查看: 369|回复: 0

[经验] ti 8168芯片调整h264编码I帧大小的方法

[复制链接]

该用户从未签到

发表于 2021-3-6 20:52:18 | 显示全部楼层 |阅读模式
分享到:
在ti81xx系列芯片上,实现硬件h264编码的码流,I帧特别大,而P帧又特别小,这样编码虽说编码效率较高(信息和残差分离的比较好),但是通过网络传输的时候会增加网络的冲击,导致视频丢包,例如,在1080P 60帧的编码中,会出现30万byte的一帧,而普通的帧不过1万byte左右。
可以通过更改DVR RDK的encLink_h264.c的方法,解决这个问题。
文件路径为:

DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3video/iva_enc/encLink_h264.c
1
更改的代码为:

dynamicParams->rateControlParams.maxPicSizeRatioI = 960;
1
改为300左右,如果出现大的P帧,也可以增加设置,例如

dynamicParams->rateControlParams.maxPicSizeRatioP = 250;
1
重新编译固件,在

~/DVR_RDK/dvr_rdk
1
下输入

make -s dvr_rdk_bios6
1
生成结果在

~/DVR_RDK/dvr_rdk/bin/ti816x/firmware
1
下面,替换相应的firmware,可以得到平缓的视频byte流,不过这样会增加编码器的性能消耗。

同事给出了通过网络来解决解决I帧过大的问题,如上文所说的,30万byte一帧,60帧每秒,其瞬时带宽占用为1800万byte每秒,即17.17Mbyte/s,即137.33Mbit/s,需要千兆网络作为RTP的发送服务端。
另外,udp的sendto函数,作为非阻塞的函数,不会因为发送丢包而返回失败,所以需要解决sendto丢包的问题,可以通过设置sendto的缓冲区及缓冲队列的长度来解决问题。
需要引入的头文件为:

#include
#include
#include
#include
#include
#include

6
设置缓冲区大小的方法为:

int value = 102400*100;
socklen_t valSize = sizeof(value);
setsockopt(udpfd, SOL_SOCKET, SO_SNDBUFFORCE,(char *)&value, valSize);
value =0;
getsockopt(udpfd, SOL_SOCKET, SO_SNDBUF,(char *)&value, &valSize);
printf("socket size: %d\n",value);

设置队列长度的方法为

struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
if (-1 == ioctl(udpfd, SIOCGIFTXQLEN, &ifr))
    printf( "failed to get dev eth0 queue length\n");
printf( "Dev eth0 queue length:%d\n ", ifr.ifr_qlen);
ifr.ifr_qlen = 1000000;
if (-1 == ioctl(udpfd, SIOCSIFTXQLEN, &ifr))
    printf( "failed to set dev eth0 queue length\n");
if (-1 == ioctl(udpfd, SIOCGIFTXQLEN, &ifr))
    printf( "failed to get dev eth0 queue length\n");
printf( "Dev eth0 queue length:%d\n ", ifr.ifr_qlen);

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /1 下一条



手机版|小黑屋|与非网

GMT+8, 2024-4-25 06:53 , Processed in 0.108741 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.