视频推流组件EasyRTMP_HIK推视频流到EasyDSS,由于时间戳问题无法播放?该如何处理?

作为一款可靠的视频推流功能组件EasyRTMP,很多用户都会通过该组件的协助来搭建推流平台。最近有开发者在试用EasyRTMP_HIK工程的时候,发现将视频推流到EasyDSS流媒体服务播放不了,有时候只显示码流数据,却无法播放;有时候只会出现第一帧数据,显示一帧画面,后面就卡住不动了。

根据推流产生的该现象,我们按照以下三点来进行分析:

1、我们可以确认在EasyDSS上已经可以接收到码流数据,但是无法正常显示,说明数据流已经成功传送,无法播放很大可能性是解码的问题; 2、是否是由于解码性能不够导致的?但经过研究之后,我们很快排除了这一点。因为EasyDSS中集成的EasyPlayer播放器是一款很优秀的Web播放器,而且经过很多年的迭代,目前已经很完善; 3、那么很有可能是数据发送时间戳问题,EasyRTMP_HIK项目的原理是通过海康SDK的方式获取音视频流数据,然后通过EasyRTMP库推送出去。

在大概分析了过程后,我们对照如下工程源码,也并未发现异常的地方,数据也是按条件赋值一一传递的。

if (m_RtmpHandle && m_bRtmpRunning)
	{
		//H264推送RTMP
		EASY_AV_Frame	avFrame;
		memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));

		avFrame.pBuffer = (unsigned char*)pBuffer;
		avFrame.u32AVFrameLen = nBufSize;
		avFrame.u32VFrameType = (bKeyFrame)?EASY_SDK_VIDEO_FRAME_I:EASY_SDK_VIDEO_FRAME_P;
		avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;
		//avFrame.u32TimestampSec = lTimeStamp/1000000;
		//avFrame.u32TimestampUsec = (lTimeStamp%1000000);

		//EnterCriticalSection(&m_cs);
		EasyRTMP_SendPacket(m_RtmpHandle, &avFrame);	
	}

57.png

 

那么很有可能是推送库的问题。有这个想法后,我们及时和团队内部其他人员进行了沟通,得知了一个情况:即EasyRTMP库内会自己计算时间戳,上层调用的时候并不需要指定时间戳,如果指定的时间戳准确,则不会出问题,但如果指定的时间戳错误,那么库内的计算过程则不会启动计算时间戳的过程。

该问题的解决关键,即是上文中关于时间戳赋值的两行代码,如上图中的红框标注内容,将其注释掉即可。

58.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值