本程序是基于FFMPEG的解码程序,和libLiveClient对接。
2017-09-027 V1.04.170927
1.修改解码速度跟不上,原来缓存的码流数据会被覆盖;
2.修改解码速度跟不上导致丢帧,或者帧太大,或解码失败,从而引起解码花屏问题(但如果上层应用程序传入的帧数据本来就不是连续的帧也一样会花屏);
3.解码任务线程,判断有数据没解码时就不做休眠,以加速解码;
4.增加传入数据大小判断,避免拷贝的数据大小大于缓存大小导致程序崩溃,
2017-09-018 V1.04.170918
1.增加int HY_DecoderCreateModuleEx(int useHardDec)接口,可创建硬件解码的解码器;
2.增加int HY_RegDecoderCallbackFunEx(int id,void (__stdcall *fDecodeVDataFunEx)(int,int,BYTE *,int,BYTE *,int,BYTE *,int,int,int))接口,可设置不做内存拷贝的回调函数;
3.Interface.cpp文件的MAX_CHANNEL(为32)和Decoder.cpp文件MAX_CHANNEL(为16)的宏定义不一致,这会导致后16个通道释放不了,将它们统一都定义为32;
此提交的增加硬件解码功能的测试结果:
1.多个硬件解码时,提升的性能并不明显(可能是硬件资源冲突导致),单个硬件解码性能提升最多,因此建议硬件解码的最好小于2个;
2.建议硬件解码对大分辨率视频来做,cif、d1等小分辨率用软件解码时的cpu占用也不高,看不出很大差别;
3.对硬件解码出来的视频帧内存拷贝要比软件解码的视频帧内存拷贝速度要慢(有可能硬件解码的内存时uncache的),这会抵消掉部分硬件解码提升的性能,所以这里增加了HY_RegDecoderCallbackFunEx接口来设置不做内存拷贝的回调函数,那样用户可以将内存拷贝和其他的放缩算法或格式转换算法合并在一起进行,那样可以减少一些内存等待时间;
注意使用ffmpeg的硬件解码还需要配置显存:
在/boot/config.txt文件中增加下面一行
gpu_mem=320
表示配置显存为320M,也许不需要这么大,不过试过64M是不行的,对内存要求比较严格时可以去试出一个最小值再做修改。
另外编译ffmpeg库configure时需要增加--enable-mmal --enable-decoder=h264_mmal --enable-hwaccel=h264_mmal选项。编出来的ffmpeg才支持硬件解码。
2017-07-05 V1.03.170904
1、修复解码丢帧问题。
2017-07-05 V1.02.170705
1、更改缓存保存流媒体数据方式,以完整一帧作为一个缓存单位,目的是保证送入解码器的数据是完整一帧。
2、整理代码的目录。
2017-02-28 V1.01.170228
1、第一版。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。