seymour

seymour

0个粉丝

10

问答

0

专栏

0

资料

seymour  发布于  2016-05-05 16:10:52
采纳率 0%
10个问答
13868

hi3536 解码问题

 
关于一个解码问题,想咨询高手们。
在平台h3536上,如果输入的视频帧率是60fps,而解码输出时帧率是30fps的时候,画面播放会变慢。如果输入的视频帧率是30fps,而解码输出时帧率是60fps的时候,画面播放会变快。
为了更好的匹配显示器,能不能随意的修改输出的帧率。比如输入的视频帧率是60fps,但我的显示器不支持60fps,可以把输出帧率修改成30fps,而不影响画面的速度。
我来回答
回答27个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-05 17:17:44
认可0

海思提供了一个解决方案(但仍然比较坑)
HI_MPI_VDEC_SetDisplayMode()
当设为VIDEO_DISPLAY_MODE_PREVIEW时, 解码60fps,显示30fps是没有问题的

文档这样描述
预览模式(VIDEO_DISPLAY_MODE_PREVIEW):预览模式下VDEC 绑定的直接后级模块(VO 或VPSS)以非阻塞方式接收解码图像,即当VO 或
VPSS 的图像Buffer 满时,丢弃VDEC 发送过来的图像,以达到不反压VDEC 解码的目的,实现实时预览。

而这时候解码为30fps,显示60fps也是没有问题的

问题是如果这时候是回放,有暂停,电子放大等需求时,VIDEO_DISPLAY_MODE_PREVIEW就是坑了

seymour

0个粉丝

10

问答

0

专栏

0

资料

seymour 2016-05-05 18:25:29
认可0
非常感谢!
这是海思针对这个问题给的方案吗?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-06 08:18:21
认可0
可能是应对在PAL(25fps)显示下接入NTSC(30fps)的IPC会导致预览卡顿的问题吧

另外,用这个方法可以实现真实的2倍速甚至4倍速回放(是每帧都解,不是只解I帧),只要解码器能力够

seymour

0个粉丝

10

问答

0

专栏

0

资料

seymour 2016-05-06 11:21:57
认可0
非常感谢:handshake!  先尝试一下。
能获取海思资源的地方真的很少,代理根本无法回答。

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2016-05-31 13:11:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=29580&ptid=11225]zhuangweiye 发表于 2016-5-5 17:17[/url]
海思提供了一个解决方案(但仍然比较坑)
HI_MPI_VDEC_SetDisplayMode()
当设为VIDEO_DISPLAY_MODE_PREVI ...[/quote]

您好,再使用3536例程,播放1080p码流时,其中 stVoPubAttr.enIntfSync = VO_OUTPUT_1080P60;
                                                                        stVoPubAttr.enIntfType = VO_INTF_VGA;
进行解码播放时,播放速度快于正常速度很多,按您说明使用HI_MPI_VDEC_SetDisplayMode(VdecChn0,VIDEO_DISPLAY_MODE_PREVIEW); 发现通道0播放速度更快了,没有按正常速度显示呢,请教是什么原因?另外,显示帧率可以通过设置视频层的属性函数设置,但设置解码通道的帧率属性在哪个函数中?谢谢。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-31 13:52:13
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30921&ptid=11225]andy_mqy 发表于 2016-5-31 13:11[/url]
您好,再使用3536例程,播放1080p码流时,其中 stVoPubAttr.enIntfSync = VO_OUTPUT_1080P60;
          ...[/quote]

你说的现象和海思文档描述的一致呀
简单的说VIDEO_DISPLAY_MODE_PREVIEW模式, 就是VDEC能解多快就接多少,当然前提是码流要跟上

回放控制是要自己做的, 不是通过显示帧率设置等方法来设的
简单来说, 就是按需要的时间给VDEC喂码流, 而不是把N帧码流塞给VDEC,然后通过控制显示帧率来控制
显示60fps还是30fps应该和解码显示的帧率无关

本来VIDEO_DISPLAY_MODE_PLAYBACK还有VO反压一下VDEC, 比如显示是30fps,那么解码是最高不会超过30fps, 如果显示是60fps,那么解码不会超过60fps

您现在的情况可能就是没有控制送码流的时间, 全力送, 实际录像文件的帧率是25或30fps的,显示又是60fps
所以看上去像快放,如果录像是25fps的每40ms送一帧码流,30fps的33ms送一帧就不会有快放的问题了

回放控制是监控系统中的一块很大的模块, 不是一两个设置就能解决的

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2016-06-01 13:27:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30924&ptid=11225]zhuangweiye 发表于 2016-5-31 13:52[/url]
你说的现象和海思文档描述的一致呀
简单的说VIDEO_DISPLAY_MODE_PREVIEW模式, 就是VDEC能解多快就接多少 ...[/quote]

感谢楼上回复,由于例程是解码本地保存好的h264码流而且才用的流模式解码,每次获取的码流按创建解码通道时的缓冲区大小获得的,并不是每次向解码通道发送一帧的码流,因此没有修改为25ms或33.3ms送一次码流。
按楼上提示要控制码流帧率,我通过设置了输出通道显示帧率的函数,将输出通道帧率设置为25fps或30fps,之后回复正常速度了。
测试了一下,设置参数stVoPubAttr.enIntfSync = VO_OUTPUT_1080P60之后,获取到输出通道的帧率就为60fps了,因此导致播放快于正常速度。

老司机

0个粉丝

2

问答

0

专栏

0

资料

老司机 2016-09-26 16:26:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30924&ptid=11225]zhuangweiye 发表于 2016-5-31 13:52[/url]
你说的现象和海思文档描述的一致呀
简单的说VIDEO_DISPLAY_MODE_PREVIEW模式, 就是VDEC能解多快就接多少 ...[/quote]

请教,我做NVR观看实时流,应该用帧模式还是流模式?playback还是preview? 因为现在做的播放效果经常是一顿一顿的,感觉不流畅。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-26 16:54:38
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38456&ptid=11225]老司机 发表于 2016-9-26 16:26[/url]
请教,我做NVR观看实时流,应该用帧模式还是流模式?playback还是preview? 因为现在做的播放效果经常是 ...[/quote]

先看一下网络状况以及ipc接入情况, 确定网络过来的数据是不是也是一顿一顿的

预览的话有个策略问题, 比如流畅优先, 实时优先等等

建议使用帧模式, 如果是实时优先策略可以考虑preview模式

老司机

0个粉丝

2

问答

0

专栏

0

资料

老司机 2016-09-26 17:05:40
认可0
本帖最后由 老司机 于 2016-9-26 17:08 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=38460&ptid=11225]zhuangweiye 发表于 2016-9-26 16:54[/url]
先看一下网络状况以及ipc接入情况, 确定网络过来的数据是不是也是一顿一顿的

预览的话有个策略问题,  ...[/quote]

我做了个策略:rtsp接收不断丢到fifo中,另开一个线程去读fifo并送去解码。这样来保证网络过来的数据一顿一顿的的时候,播放也不会卡顿。这个思路正确吗?(实验发现仍然会卡顿,而且貌似更严重)
while(1){
    bytes = 0;
    if(fifo.count > 2 || timeout > 4){
          bytes = read(fifo);
     }
     if(bytes >0 ){
         sendVdec();
         timeout = 0;
     }else{
         timeout++;
     }
     usleep(10000);
}

一般的NVR会这样做吗?我发现是网络变差的情况(客户端增多)下才会一顿一顿。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-26 17:19:30
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38462&ptid=11225]老司机 发表于 2016-9-26 17:05[/url]
我做了个策略:rtsp接收不断丢到fifo中,另开一个线程去读fifo并送去解码。这样来保证网络过来的数据一 ...[/quote]

一般会带上接收到达的时间戳, 然后根据策略来

比如实时优先,那没悬念来就送

流畅优先就要平滑一下, 也意味着要有一定的缓存和一定的延时, 比如第一帧到达是0ms, 第二帧是60ms,第三帧是80ms, 间隔不均匀, 理想情况是平滑后送去解码的时间间隔都保证是40ms, 问题是不理想该怎么办

老司机

0个粉丝

2

问答

0

专栏

0

资料

老司机 2016-09-26 17:31:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38465&ptid=11225]zhuangweiye 发表于 2016-9-26 17:19[/url]
一般会带上接收到达的时间戳, 然后根据策略来

比如实时优先,那没悬念来就送
[/quote]

怎么办?。。。

老司机

0个粉丝

2

问答

0

专栏

0

资料

老司机 2016-09-26 17:38:32
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38465&ptid=11225]zhuangweiye 发表于 2016-9-26 17:19[/url]
一般会带上接收到达的时间戳, 然后根据策略来

比如实时优先,那没悬念来就送
[/quote]

我是用tcp的,所以应该不用考虑时间戳的问题吧。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-26 17:42:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38469&ptid=11225]老司机 发表于 2016-9-26 17:38[/url]
我是用tcp的,所以应该不用考虑时间戳的问题吧。[/quote]

和TCP没有关系吧

老司机

0个粉丝

2

问答

0

专栏

0

资料

老司机 2016-09-26 17:48:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38473&ptid=11225]zhuangweiye 发表于 2016-9-26 17:42[/url]
和TCP没有关系吧[/quote]

你是说如果网络情况差,tcp也是有可能 t1 t2 t3 t5 t4 t6 t7这样的顺序被接收的?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-27 08:02:09
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=38477&ptid=11225]老司机 发表于 2016-9-26 17:48[/url]
你是说如果网络情况差,tcp也是有可能 t1 t2 t3 t5 t4 t6 t7这样的顺序被接收的?[/quote]

不是次序问题, 而是数据帧的到达时间是不均匀的, 这个和TCP或是UDP没关系

如果没有任何处理, 直接把接收到的码流送到解码器去, 当这种不均匀比较严重时,  就会看到一卡一卡的现象

docterling

0个粉丝

0

问答

0

专栏

0

资料

docterling 2016-12-22 15:02:03
认可0
你们的3536解码1080P的264码流后通过接hdmi输出1080P_30接电视机有没有很模糊的情况?
读文件->vdec->vpss->vo->hdmi->tv
同样的文件在3535上是很清晰的
3535内存1G,3536内存512M
跟内存有关系么?

falloutmx

1个粉丝

15

问答

0

专栏

0

资料

falloutmx 2016-12-22 15:48:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=43220&ptid=11225]docterling 发表于 2016-12-22 15:02[/url]
你们的3536解码1080P的264码流后通过接hdmi输出1080P_30接电视机有没有很模糊的情况?
读文件->vdec->vpss ...[/quote]

VO_DUMP比较下

docterling

0个粉丝

0

问答

0

专栏

0

资料

docterling 2016-12-22 15:57:20
认可0
VPSS_DUMP和VO_DUMP是一样的模糊,说明解码出来就这样了,跟vpss,vo没关系

falloutmx

1个粉丝

15

问答

0

专栏

0

资料

falloutmx 2016-12-22 16:07:32
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=43226&ptid=11225]docterling 发表于 2016-12-22 15:57[/url]
VPSS_DUMP和VO_DUMP是一样的模糊,说明解码出来就这样了,跟vpss,vo没关系[/quote]

如果I帧解码出来就有差距,那应该是滤波系数的问题,但我没遇到过这样的事情。
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区