采集到的yuv视频 在播放时为什么像是快进似的 , 求高手指点一二, 应用程序开发接口用的v4l2

aj_3 2014-01-09 02:27:16
问题困扰了很久了,望有人理我~~~
...全文
385 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongjiawei316 2014-01-23
  • 打赏
  • 举报
回复
引用 2 楼 dongjiawei316 的回复:
哦!如果你的画面不是播快了,而是看上去不连贯,则是你采集的时候丢了很多帧数据。比如说每秒25帧的数据,你每秒才采了1帧,看上去可不就是1跳1跳的
正如我之前怀疑的,可能你代码处理得太慢了?
aj_3 2014-01-17
  • 打赏
  • 举报
回复
引用 14 楼 falloutmx 的回复:
采YUV很容易的,做过好多次了。v4l2只用过一次,在TI芯片上用的。你统计下两次采集到的间隔就知道是不是按25帧采的了
你好 ,我之前没看清, 今天又调了下, 发现 两次采集到的间隔 是100多毫秒~ 原本以为播放像“快进”的原因是采集太快了,现在发现其实是采集过慢,平均一秒才10帧左右, (另外我有试过通过程序 再减小1秒的帧数,就是采集一帧,空一帧,再采集,那么就变成了1秒是5帧, 然后保存视频再播放观察,发现播放的更快了,所以也就确定,之前的 “快进”现象其实是每秒采集的帧数过少~) 可是摄像头在windows在 用qq视频 是正常画面的 这个是什么原因呢? 看一些帖子有说 采集 yuv 640x480 的 可能只是支持5帧 于是我又将分辨率调小了,可是间隔还是 1秒10帧。。。 求解啊~~~· 能不能给的启发 谢过了~
aj_3 2014-01-14
  • 打赏
  • 举报
回复
引用 16 楼 hj5225244 的回复:
[quote=引用 13 楼 Wujunjie_66460 的回复:] [quote=引用 9 楼 hj5225244 的回复:] [quote=引用 8 楼 Wujunjie_66460 的回复:] [quote=引用 7 楼 hj5225244 的回复:] 自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。[/quote] 那就是的采集每一帧的时间周期和播放每一帧的时间周期不一致[/quote] 那这个我要怎么做, 请问你们到底有没有 在 linux上使用 v4l2 这个编程接口 采集过 yuv的视频数据,怎么老是话说到一半~[/quote] 刚刚开始的时候没有看到你是用的V4L2接口,所以不确定你是用的什么处理器,不知道怎么和你说。既然是linux的,你可以C++来开发上层,利用Qt的库,在采集的时候设立一个定时器就可以了,比如30ms采集一帧数据并且保存数据。到时候播放的时候,同样设立一个定时器,30ms播放一帧图片,就可以了。[/quote] 我的程序中确实没有设立什么定时器,因为我的理解是,我们只要在程序中设置好 FPS 那么采集时间间隔应该是硬件帮我们做的,不用定时了。 不过想看看时间间隔到底有没有像设置FPS(25 = 40ms)那样一致 所以上星期在 程序中添加了 计算采集时间间隔的代码 发现有问题 帧间隔平均都是 20多ms 我的程序是用 select 监听摄像头看有没有新帧, 那么做定时器的话,我是要怎么做 比如在select 后 发现时间小于 40ms 就丢弃这帧?然后到了40ms就将帧加入文件尾部,然后再重新定时?
falloutmx 2014-01-10
  • 打赏
  • 举报
回复
采YUV很容易的,做过好多次了。v4l2只用过一次,在TI芯片上用的。你统计下两次采集到的间隔就知道是不是按25帧采的了
aj_3 2014-01-10
  • 打赏
  • 举报
回复
引用 9 楼 hj5225244 的回复:
[quote=引用 8 楼 Wujunjie_66460 的回复:] [quote=引用 7 楼 hj5225244 的回复:] 自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。[/quote] 那就是的采集每一帧的时间周期和播放每一帧的时间周期不一致[/quote] 那这个我要怎么做, 请问你们到底有没有 在 linux上使用 v4l2 这个编程接口 采集过 yuv的视频数据,怎么老是话说到一半~
aj_3 2014-01-10
  • 打赏
  • 举报
回复
引用 11 楼 falloutmx 的回复:
引用
我从网上下的那个yuv视频能够正常的播放是因为它的采集频率刚好跟这个pyuv 固有的播放帧率是刚好的
就是这样的。 还有,一般存储不用yuv存的,因为数据量太大了。我刚看了下pYUV,有个参数是设播放帧率的
就算编码后保存,播放也是一样的(在编码的时候我也有添加帧率信息) 所以不管我是怎么保存,我必须采集到能正常播放yuv数据,这样编码后才是正常播放的。。。。 这些我都试过! 现在就是确定了我的采集过程是有问题的,否则网上下的yuv文件为什么就可以正常播放,而且用的是同样的播放器! 注意pYUV有设播放帧率,这我之前就知道(你之前的 “固有帧率” 我就奇怪了)所以我把帧率设置成和程序中设置的一样,但是还是不行 ,还有你有实现过吗(采集到正常的 yuv 数据,)
falloutmx 2014-01-10
  • 打赏
  • 举报
回复
引用
我从网上下的那个yuv视频能够正常的播放是因为它的采集频率刚好跟这个pyuv 固有的播放帧率是刚好的
就是这样的。 还有,一般存储不用yuv存的,因为数据量太大了。我刚看了下pYUV,有个参数是设播放帧率的
dongjiawei316 2014-01-10
  • 打赏
  • 举报
回复
elecard可以设定帧率
stan_linux 2014-01-10
  • 打赏
  • 举报
回复
引用 13 楼 Wujunjie_66460 的回复:
[quote=引用 9 楼 hj5225244 的回复:] [quote=引用 8 楼 Wujunjie_66460 的回复:] [quote=引用 7 楼 hj5225244 的回复:] 自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。[/quote] 那就是的采集每一帧的时间周期和播放每一帧的时间周期不一致[/quote] 那这个我要怎么做, 请问你们到底有没有 在 linux上使用 v4l2 这个编程接口 采集过 yuv的视频数据,怎么老是话说到一半~[/quote] 不过要对YUV进行格式转换,转到RGB565或者RGB888,如果你的处理器平台主频不高,建议另外想办法
stan_linux 2014-01-10
  • 打赏
  • 举报
回复
引用 13 楼 Wujunjie_66460 的回复:
[quote=引用 9 楼 hj5225244 的回复:] [quote=引用 8 楼 Wujunjie_66460 的回复:] [quote=引用 7 楼 hj5225244 的回复:] 自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。[/quote] 那就是的采集每一帧的时间周期和播放每一帧的时间周期不一致[/quote] 那这个我要怎么做, 请问你们到底有没有 在 linux上使用 v4l2 这个编程接口 采集过 yuv的视频数据,怎么老是话说到一半~[/quote] 刚刚开始的时候没有看到你是用的V4L2接口,所以不确定你是用的什么处理器,不知道怎么和你说。既然是linux的,你可以C++来开发上层,利用Qt的库,在采集的时候设立一个定时器就可以了,比如30ms采集一帧数据并且保存数据。到时候播放的时候,同样设立一个定时器,30ms播放一帧图片,就可以了。
aj_3 2014-01-10
  • 打赏
  • 举报
回复
引用 14 楼 falloutmx 的回复:
采YUV很容易的,做过好多次了。v4l2只用过一次,在TI芯片上用的。你统计下两次采集到的间隔就知道是不是按25帧采的了
那你当时 v4l2的 是怎么做的 是用 select 这个函数监听设备吗,如果有数据就读出直接加入到文件尾部
stan_linux 2014-01-09
  • 打赏
  • 举报
回复
引用 8 楼 Wujunjie_66460 的回复:
[quote=引用 7 楼 hj5225244 的回复:] 自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。[/quote] 那就是的采集每一帧的时间周期和播放每一帧的时间周期不一致
aj_3 2014-01-09
  • 打赏
  • 举报
回复
引用 7 楼 hj5225244 的回复:
自己写个程序实现实时播放就可以了
我是要保存下来的,供日后查看的。。。。
stan_linux 2014-01-09
  • 打赏
  • 举报
回复
自己写个程序实现实时播放就可以了
aj_3 2014-01-09
  • 打赏
  • 举报
回复
引用 4 楼 falloutmx 的回复:
这个我留言给你回复了啊 没有帧率信息的时候播放器是按固定速率播的,YUV采集的时候跟这个速率匹配了就是正常速度。帧率信息一般PS、TS这些封装才会有,H264也没有帧率信息。如果你要编码的话,直接按采集帧率编出来就行了,不用考虑帧率。 pYUV不是播放器,就是个yuv图像显示工具,按固定速度播的
可是 我现在是没有编码 直接上 yuv的原始视频 播放的时候会这种状况。。 我从网上下来的 yuv原始视频就不会 一样的播放器 不一样的效果 而且现在我也在 程序中添加了帧率的信息的代码,效果还是一样的,代码如下: streamParm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; streamParm.parm.capture.capturemode = V4L2_MODE_HIGHQUALITY; streamParm.parm.capture.timeperframe.denominator = 25; streamParm.parm.capture.timeperframe.numerator = 1; 除非 像你说的 我从网上下的那个yuv视频能够正常的播放是因为它的采集频率刚好跟这个pyuv 固有的播放帧率是刚好的 还有,按照你的意思是, 我采集的程序没有错,只是播放器需要换一个可以调节帧率的播发器就ok了,那么你给介绍个看看 谢谢~~~·
aj_3 2014-01-09
  • 打赏
  • 举报
回复
可是 我现在是没有编码 直接上 yuv的原始视频 播放的时候会这种状况。。 我从网上下来的 yuv原始视频就不会 一样的播放器 不一样的效果 而且现在我也在 程序中添加了帧率的信息的代码,效果还是一样的,代码如下: streamParm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; streamParm.parm.capture.capturemode = V4L2_MODE_HIGHQUALITY; streamParm.parm.capture.timeperframe.denominator = 25; streamParm.parm.capture.timeperframe.numerator = 1; 除非 像你说的 我从网上下的那个yuv视频能够正常的播放是因为它的采集频率刚好跟这个pyuv 固有的播放帧率是刚好的 还有,按照你的意思是, 我采集的程序没有错,只是播放器需要换一个可以调节帧率的播发器就ok了,那么你给介绍个看看 谢谢~~~·
falloutmx 2014-01-09
  • 打赏
  • 举报
回复
这个我留言给你回复了啊 没有帧率信息的时候播放器是按固定速率播的,YUV采集的时候跟这个速率匹配了就是正常速度。帧率信息一般PS、TS这些封装才会有,H264也没有帧率信息。如果你要编码的话,直接按采集帧率编出来就行了,不用考虑帧率。 pYUV不是播放器,就是个yuv图像显示工具,按固定速度播的
aj_3 2014-01-09
  • 打赏
  • 举报
回复
每秒25帧的, 不是断断续续的 就是跟快进一样~ 我用的播放器是 pYUV
dongjiawei316 2014-01-09
  • 打赏
  • 举报
回复
哦!如果你的画面不是播快了,而是看上去不连贯,则是你采集的时候丢了很多帧数据。比如说每秒25帧的数据,你每秒才采了1帧,看上去可不就是1跳1跳的
dongjiawei316 2014-01-09
  • 打赏
  • 举报
回复
请问你用什么软件播的,如果是elecard的话,是正常的,它没有帧率控制机制,只要CPU跑得动,就会不断的播

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧