TIwilliam hill官网
直播中

李天竹

7年用户 183经验值
私信 关注
[问答]

encode例程记录的264文件格式问题

encode例程记录的264文件,似乎并没有对编码帧数据做任何加工,真实的记录了编码后的I帧和P帧原始数据。
但通过split将264文件分割为几段后,只有首段能够通过decode例程顺利播放,剩余几段无法播放。
但是如果将264文件的头部少量字节(最少测试了512字节),通过cat命令加入到剩余几段中任意段首,
该段文件也可以播放了。请问什么原因?难道在文件头有什么关键?
 
数据串任意位置开始播放的能力,关系到网络或无线环境下画面还原的鲁棒性。
感谢您百忙中的回复。

回帖(4)

王敏

2018-6-21 11:05:11
 查看一下DMAI中查看Venc1_process的实现,就可以知道编码后的信息保存在hInBuf中。
encode例程,只有第一帧是IDR帧,后面的I帧不是IDR帧,不具备解码刷新功能,所以剩余的不能独立播放。
所以要想解决这个问题,就需要周期性的生成IDR帧。可以通过h264编码器IH264VENC_DynamicParams中的
intraFrameInterval和idrFrameInterval去设置。
举报

李天竹

2018-6-21 11:21:56
引用: 上海秉恒 发表于 2018-6-21 11:05
 查看一下DMAI中查看Venc1_process的实现,就可以知道编码后的信息保存在hInBuf中。
encode例程,只有第一帧是IDR帧,后面的I帧不是IDR帧,不具备解码刷新功能,所以剩余的不能独立播放。
所以要想解决这个问题,就需要周期性的生成IDR帧。可以通过h264编码器IH264VENC_DynamicParams中的

明白了,谢谢
举报

李天竹

2018-6-21 11:39:02
引用: hjh22678 发表于 2018-6-21 11:21
明白了,谢谢

分析encode例程, video.c中通过VideoEncode_process() 调用了 VIDENC1_process(),而后者是实现某种算法的容器。虽然代码在执行Venc1_create()时,通过参数通知了Codec_Engine创建一个264编码器。但由于DMAI对264编码器
进行了多层封装,很难找到修改IH264VENC_DynamicParams的地方。
还请告知修改参数的具体位置?谢谢
举报

李天竹

2018-6-21 11:50:36
引用: hjh22678 发表于 2018-6-21 11:39
分析encode例程, video.c中通过VideoEncode_process() 调用了 VIDENC1_process(),而后者是实现某种算法的容器。虽然代码在执行Venc1_create()时,通过参数通知了Codec_Engine创建一个264编码器。但由于DMAI对264编码器
进行了多层封装,很难找到修改IH264VENC_DynamicParams的地方。
还请告知修改参数的具体位置?谢谢 ...

找到了一段例程: www.61ic.com/.../34962.html
有类似问题的同学,可以参考
举报

更多回帖

发帖
×
20
完善资料,
赚取积分