kennybluezy

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy  发布于  2015-08-26 13:54:00
采纳率 0%
16个问答
10062

视频文件单帧播放

 
        各位好,目前我需要在3531平台上实现视频文件的逐帧播放,视频文件为h264裸视频流,无B帧。目前的方法是从视频文件中读取一帧视频数据,通过HI_MPI_VDEC_SendStream()发送到VDEC进行解码,由于之前已经将VO和VDEC绑定,故能在VO上看到解码后的结果。在这种机制上也实现了下一帧的单帧播放
        现在需要实现前一帧的单帧播放。首先每次成功读取了前一帧的视频数据(可能为I帧,也可能为P帧),也通过HI_MPI_VO_SetChnFrameRate()设置播放速率为-60(正常播放速率为60帧),PTS递减,每次减小幅值为1000000/60。但发现Vo显示图像并不是前一帧的图像,且图像中部分区域为乱码。
        请教各位如何实现单帧向前播放?是否需要先向VDEC送入前一I帧的内容,再根据待解码显示的视频帧(P帧)? 如何通过HI_MPI_VO_SetChnFrameRate()来实现倒序播放? 在此先行谢过!
我来回答
回答10个
时间排序
认可量排序

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-08-27 15:50:21
认可0
HI_MPI_VO_ChnStep(VoDev, VoChn);

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-08-27 15:51:54
认可0
HI_MPI_VO_ChnStep(VoDev, VoChn);我用这个单帧播放不了,你是怎样顺序单帧播放的

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy 2015-08-27 16:54:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=19659&ptid=8575]bingbing 发表于 2015-8-27 15:51[/url]
HI_MPI_VO_ChnStep(VoDev, VoChn);我用这个单帧播放不了,你是怎样顺序单帧播放的[/quote]

你好,目前我是采用帧式解码,首先从视频文件中读取一帧完整的视频数据(I帧或P帧),再通过HI_MPI_VDEC_SendStream()进行解码,解码后暂停,点击后继续读取视频->解码播放,实现了单帧播放。

采用HI_MPI_VO_ChnStep()是能实现的,参考sample_vdec中的SAMPLE_VDEC_ProcessForPip()

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy 2015-08-27 17:00:00
认可0
目前发现能实现关键帧(即I帧)的后退播放。首先还是读取视频文件中一帧完整的视频数据进行解码,这里特指读取当前帧之前的I帧数据。并设置HI_MPI_VO_SetChnFrameRate()中播放速率为负,这样能实现此关键帧的播放。但非关键帧(如P帧)则未能解码播放,画面保持不变。
请问是否需要先送入I帧解码,再解码后续P帧,最后手动推送到VPSS或VO?

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-08-28 09:47:32
认可0
你这样能实现视频快进吗

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy 2015-08-28 10:32:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=19680&ptid=8575]bingbing 发表于 2015-8-28 09:47[/url]
你这样能实现视频快进吗[/quote]

只送I帧。快退已经实现,理论上快进是没问题的

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-09-02 09:32:38
认可0
你做快进快退时,需要在编码的时候I帧的地址保存一下吗,我的qq是892432203,

kennybluezy

0个粉丝

16

问答

0

专栏

0

资料

kennybluezy 2015-09-02 14:21:39
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=19813&ptid=8575]bingbing 发表于 2015-9-2 09:32[/url]
你做快进快退时,需要在编码的时候I帧的地址保存一下吗,我的qq是892432203,[/quote]

需要保存的,包括当前解码帧帧头在文件中的偏移和帧长度。当快退时,首先fseek向前移动文件指针,读取buffer长度的视频文件数据到buffer中,再从后向前寻找到I帧。

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-09-02 17:05:55
认可0
我现在是将这些I帧的偏移保存在一个文件中,快进快退时调取对应便宜,,

bingbing

0个粉丝

12

问答

0

专栏

0

资料

bingbing 2015-09-02 17:07:04
认可0
请教一下,你是怎样保存这些信息的,方便的话加一下qq,交个朋友吧
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区