监控视频播放时出现倒帧现象怎么解决?

mubai007 2009-07-30 04:27:04
监控视频播放时出现倒帧现象怎么解决?

在实时播放时有倒帧现象;
如果录成文件,用读文件的方式用程序播放,也有倒帧现象;
如果录成文件,用MPlayer播放器播放,就不会出现倒帧现象。

我用的是推模式,按我的理解,如果读不到数据,画面应该停在最后一帧,现在的现象是画面来回闪,而且会出现到帧,好像是在播放最后一帧前面的数据,请问该怎么解决?
...全文
409 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mubai007 2009-10-19
  • 打赏
  • 举报
回复
问题原因没有找到,后来改变数据发送方式,就没有这个问题了。
firedsky 2009-08-03
  • 打赏
  • 举报
回复
曾经碰到过一次这个问题,当时的情况是服务器端读取媒体文件时定位不准,造成前一段数据与后一段数据之间有重叠,造成有重复的现象。准确定位每次读取的内容后问题解决。你可以检查一下读文件时定位是不是精确的。
  • 打赏
  • 举报
回复
有理。
[Quote=引用 1 楼 lius1984 的回复:]
一般seek必须到关键帧, 不然会出现花屏现象,而关键帧间隔可能很大。 所以画面重复是可能的。
[/Quote]
mubai007 2009-07-31
  • 打赏
  • 举报
回复
怎么没人回答??
是我没讲清楚,还是高手都不愿回答??
mubai007 2009-07-31
  • 打赏
  • 举报
回复
"当接收到一个sample时,首先通过IMediaSample::GetPointer得到上述内存区域的首地址,然后得到sample中的有效数据IMediaSample::GetActualDataLength,然后就可以正确处理sample的数据了。"
上面这句话该怎么理解?
IMediaSample::GetActualDataLength是不是FilterGraph自动调用,不用写代码呀?

下面是我的FillBuffer方法,加上SetActualDataLength会报异常,应该在哪儿用SetActualDataLength??

HRESULT CH264Stream::FillBuffer(IMediaSample *pms)
{
CheckPointer(pms, E_POINTER);

BYTE *pData;
long lDataLen;
int lFrameLength = 0;
PH264_FRAME pFrame = NULL;

pms->GetPointer(&pData);
lDataLen = pms->GetSize();
ZeroMemory(pData, lDataLen);
{
CAutoLock cAutoLockShared(&m_cSharedState);

pFrame = m_pFrameList->GetFrameBuffer();
if (pFrame != NULL)
{
CopyMemory((PVOID)pData, (PVOID)(PBYTE)(pFrame->FrameData), pFrame->FrameLen);
m_pFrameList->ReleaseFrameBuffer(pFrame);

// The current time is the sample's start
CRefTime rtStart = m_rtSampleTime;

// Increment to find the finish time
m_rtSampleTime += (LONG)m_iRepeatTime;

pms->SetTime((REFERENCE_TIME *)&rtStart, (REFERENCE_TIME *)&m_rtSampleTime);
}

// pms->SetActualDataLength((long)pFrame->FrameLen);
}

// Set TRUE on every sample for uncompressed frames
pms->SetSyncPoint(FALSE);
return NOERROR;
}
homesos 2009-07-31
  • 打赏
  • 举报
回复
播放时时间戳同步有问题?
lius1984 2009-07-30
  • 打赏
  • 举报
回复
一般seek必须到关键帧, 不然会出现花屏现象,而关键帧间隔可能很大。 所以画面重复是可能的。
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告:本课程项目仅供学习参考,请不要直接商用,概不负责任何法律责任。 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。 我将带领大家一起来学习使用FFmpeg开发视频监控项目,并动手操练。具体内容包括: 一、视频监控的架构和流程二、FFmpeg4.3+SDL2+Qt5开发环境的搭建三、FFmpeg的SDK编程回顾总结并操练四、SDL2.0的编程回顾总结并操练五、颜色空间转换RGB和YUV的原理与实战六、Qt5+FFmpeg本地摄像头采集预览实战七、代码封装:摄像头h264/5编码并存储八、Qt5+FFmpeg单路网络摄像头采集预览九、Qt5+FFmpeg单路网络摄像头采集预览录制会看十、onvif与GB/T-28181的简介  音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码一头雾水,不知道代码到底是什么意思,这是为什么呢?   因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。 所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。   梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。  目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。  

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧