little_water

little_water

0个粉丝

3

问答

0

专栏

0

资料

little_water  发布于  2017-08-24 15:55:36
采纳率 0%
3个问答
5054

Hi3516A SDK P帧帧内刷新功能

 
海思的开发参考文档有关P帧帧内刷新的相关原文如下

6.2.12 P 帧帧内刷新
P 帧刷新 ISlice,可以为客户提供码流非常平滑的编码方式,每个 I 帧和 P 帧的大小可
以非常接近。在网络带宽有限(如无线网络)的情况下,降低 I 帧过大带来的网络冲
击,降低网传延时,降低网络传输出错的概率。
6.2.12.1 使用方式
步骤 1. 通过接口 HI_MPI_VENC_SetIntraRefresh 设置刷新使能 bRefreshEnable 及 ISlice 转换使
能 bISliceEnable。
步骤 2. 设置刷新使能后 SDK 会自动根据设置的刷新行数 u32RefreshLineNum 从每个 GOP 的
第一帧开始从上至下完成 Intra 宏块刷新;刷新间隔为 GOP;
步骤 3. 设置 ISlice 转换使能后 SDK 会自动把每次刷新第一帧的帧内预测宏块转换为一个 I
Slice;刷新 ISlice 可以提供更好的码流兼容性;
步骤 4. 设置 HI_MPI_VENC_SetIntraRefresh 接口后,码率控制依然生效,可以调整
VENC_GOP_ATTR_S:stGopAttr.stNormalP.s32IPQpDelta 来控制 Intra 宏块刷新起始帧
的大小,推荐值为-1;
----结束
6.2.12.2 注意事项
1、HI_MPI_VENC_SetIntraRefresh 设置的刷新行数 u32RefreshLineNum 需要保证在一
个 GOP 周期内,图像内所有的宏块行都完成一次刷新;
2、由于刷新行数 u32RefreshLineNum 与编码参数 GOP 及跳帧参考参数相关,所以设
置编码属性及跳帧参考高级接口后,HI_MPI_VENC_SetIntraRefresh 接口需要重新
设置;
3、HI_MPI_VENC_SetIntraRefresh 只对 H.264/ H.265 协议有效;
4、HI_MPI_VENC_SetIntraRefresh 设置使能 bISliceEnable,刷新 Islice 的帧会自动按
照刷新 Islcie 的大小做 slice 划分,用户设置的 slice 划分接口将无效。
当 bRefreshEnable 使能时,bISliceEnable 必须配置为使能。

问题如下:
当前开发通过无线传输图像数据,希望可以有较平滑的编码,根据以上说明开启了P帧帧内刷新并且开启Islice使能。打印帧信息显示,只有在开始编码时出现了一个IDR帧,后续SPS PPS SEI帧后只有P帧不再出现I帧,帧的数量变多了,平均每帧的大小变小。且在编码时在SPS开始都会有一个较大的编码时延。编码时间不够平滑。在关闭了ISlice后,帧个数恢复。请问多出来的帧是哪里来的,是在没开启P帧帧内刷新时的I帧转换过来的么?有谁知道P帧帧内刷新的原理吗?谢谢?
我来回答
回答3个
时间排序
认可量排序

helphel

0个粉丝

4

问答

0

专栏

0

资料

helphel 2017-09-28 19:06:37
认可0
就是把I帧拆解,用较小的帧传输。

lishiqi

0个粉丝

19

问答

0

专栏

0

资料

lishiqi 2017-09-30 11:40:12
认可0
多出来的就是把I帧拆解成了多个P帧,你在调试看看是可以平滑下来了的。

aeeligang

0个粉丝

4

问答

0

专栏

0

资料

aeeligang 2017-10-29 10:49:12
认可0
这是我开启hi3516a P 帧帧内刷新后从venc获取码流打印日志:PTS为从vin开始由硬件打入的时间戳,

insmod hi3516a_h264e.ko        OneStreamBuffer=1 设置为单包模式,这样sps/pps/sei包不单独出现,到该出了IDR帧时一次出来12个包,若设置为多包模式,则一次出来15个包(多出来的3个包即sps/pps/sei)
请注意,这一次出来的12个包的PTS是同一个时间戳,若此看了,GOP内I帧、P帧加起来总个数仍然等于帧率,总个数并没有增加。

pack#00,addr=b479ffc0,len=11382,pack type=01,PTS(ms)=290713
VENC_SaveH264,PackCount=12, time stap (ms)is =290796 ms
pack#00,addr=b47a2dca,len=6853,pack type=05,PTS(ms)=290746
pack#01,addr=b47a4900,len=465,pack type=01,PTS(ms)=290746
pack#02,addr=b47a4b40,len=739,pack type=01,PTS(ms)=290746
pack#03,addr=b47a4e80,len=860,pack type=01,PTS(ms)=290746
pack#04,addr=b47a5240,len=718,pack type=01,PTS(ms)=290746
pack#05,addr=b47a5580,len=824,pack type=01,PTS(ms)=290746
pack#06,addr=b47a5900,len=813,pack type=01,PTS(ms)=290746
pack#07,addr=b47a5c80,len=1290,pack type=01,PTS(ms)=290746
pack#08,addr=b47a6200,len=1429,pack type=01,PTS(ms)=290746
pack#09,addr=b47a6800,len=1804,pack type=01,PTS(ms)=290746
pack#0a,addr=b47a6f80,len=2523,pack type=01,PTS(ms)=290746
pack#0b,addr=b47a79c0,len=964,pack type=01,PTS(ms)=290746
VENC_SaveH264,PackCount=1, time stap (ms)is =290815 ms
pack#00,addr=b47a7e00,len=18014,pack type=01,PTS(ms)=290779
VENC_SaveH264,PackCount=1, time stap (ms)is =290840 ms
pack#00,addr=b47ac4c0,len=14017,pack type=01,PTS(ms)=290813
VENC_SaveH264,PackCount=1, time stap (ms)is =290870 ms
pack#00,addr=b47afc00,len=18854,pack type=01,PTS(ms)=290846
VENC_SaveH264,PackCount=1, time stap (ms)is =290915 ms
pack#00,addr=b47b4600,len=15007,pack type=01,PTS(ms)=290879
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区