免费报名:中国数字电视增值业务论坛 猎聘流媒体服务工程师 ST5105的机顶盒的源代码下载 浙江急聘IPTV增值业务工程师
急聘IPTV系统工程师 数码视讯成立十周年,创新十载 智造未来 深圳招聘软件工程师 浙江急聘系统集成售前技术经理
1/1页1 跳转到查看:1203
发新话题 回复该主题
键盘左右键可以进行前后翻页操作
帮助

[急]用VLC传输实时视频流的问题

[急]用VLC传输实时视频流的问题

各位大大好,小弟目前在WINXP下用VLC0.9.9a版播放器实时传输摄像头采集的视频,将数据流传给我们自己的设备。传输协议用的UDP,请问我如何能够改变传输视频的分辩率大小以及VLC发送视频流的帧率呢?

我的操作流程是:打开VLC播放器,点击媒体菜单,选择打开捕获设备,捕获模式DirectShow,刷新列表,选择指定的摄像头。之后点击流选项,输出选择“首选UDP替代RTP”,设置好发送IP和端口。方案中的封装没选(感觉选不选MPEG-TS都是一样的),视频编码器选的WMV1,位率默认800kb/s,比例默认1,之后点击流输出视频。在接收端回放的是摄像头的默认分辩率800×600的图像,实时位率基本上在800kb/s-1200kb/s之间。
用软件抓包来看,VLC的视频输出每一帧携带的数据都是1316字节,不同编码方式,不同画面情况下只是帧率不同,帧大小是固定不变的。在速率低时,差不多30ms/frame,速率高时8ms/frame,这是我通过软件自己算出来的平均值。另外在参数设置中,流输出--交换输出流--转码中,可以设置图像的分辩率大小,修改后在收端确实可以改变回放图像的大小。但在参数中的视频位率和视频帧率改变了数值却没什么变化,这些参数究竟要怎么使用呢?我可以固定发送的帧率吗?另外帧大小是不是也可以改变呢?请各位大大指教。小弟先谢过了。
最后编辑caonan8287 最后编辑于 2009-06-29 09:49:40

TOP

 

另外我们有讨论群可以加吗?群号是多少呢?

TOP

 

改变分辨率的大小,以及帧率,是可以改变的.

你的帧大小是指的什么?分辨率大小?还是关键帧长度?
修改分辨率,就是修改比例,0.5就是缩小一半,2.0就是放大一倍.只能按比例缩放,不能自由设置.
关键帧长度改变不了,界面没有提供修改设置.或许有命令行参数交互,可以看看源代码把这个参数交互出来没,如果没有就只能自己修改代码.

固定发送帧率又是指的什么?帧率本来就是固定的,只有码率才可能是可变.
你是不是看到接收播放段的帧率不固定?
你使用的WMV1编码,我怀疑可能使用的ASF封装,按照MMS协议发送.在接收播放段,显示那个帧率很可能显示的是当前播放帧率.不一定就是你设置的帧率.
这个可以用微软的ASF编码器,用推方式推到某个IP端口上,然后用MediaPlay来接收播放进行验证.在MediaPlay中看帧率,不一定就是编码设置的帧率.因为对于这类流式媒体,帧的概念很模糊.

TOP

 

[quote] 原帖由 [b]caonan8287[/b] 于 2009-6-29 9:47:00 发表
另外我们有讨论群可以加吗?群号是多少呢? [/quote]

== 49846130 QQ群.个人不推荐进群...
论坛比较适合技术交流.何况上班进QQ群,很容易被闲聊打扰....

TOP

 

首先感谢C+裤子的回复,因为我对VLC的概念比较模糊,所以提的问题可能也不明确,在这种情况下你还能耐心回答我的问题,很令我敬佩。
我说的帧大小是指VLC以串流形式发出来的数据帧,或者应该叫数据包,包大小,具体我也不清楚该用哪个词更准确。我用VLC发送串流,采用UDP传输协议,在另一端,用SOCKET套接字写了一个接收程序,循环固定次数(我设的300次),每当接收到一个数据包,打印接收到的字节数,循环前和循环后分别记录一下当前时间,取差值可得整个循环占用时间,除以总共收到的包数(我的程序里是300)可得平均每个包的发包间隔。
经过我的测试,发现不同编码方式包的大小(或者叫帧大小,携带的数据量)都是固定的1316字节,而平均发包的间隔是不同的。VLC状态显示里的串流发送率是实时的,对应到发包间隔上就是发送率越大,间隔越小。
而在VLC的参数设置里可以修改视频宽度、高度、位率、帧率、缩放等参数。我已通过修改参数成功改变了发送的图像分辩率,但对于位率、帧率两项的修改却没什么作用。
感觉就像你所说的,对于流媒体而言帧的概念很模糊,我现在通过修改发送图像的分辩率可以直接降低发送速率,但对于帧率和位率的概念还是不太清楚,或者说流媒体中跟本不需要这两种参数?

TOP

 

在网络上抓的数据包大小,跟帧率没有关系.
每一帧数据,经过编码后,形成一段对应封装格式的数据流,这个数据流,按照网络协议进行封包,然后在以太网络上进行传输.
这个封包的过程,只跟选择的网络环境有关,跟编码的时候设置的码率,帧率等参数没有任何联系.
一般IP网络的MTU值是1500或者1480,所以网络数据包的大小一般是小于这个值,而TS格式的封装,一般是188个字节一个TS包,188个字节x7个TS包=1316个字节,你看到的1316个字节一个网络数据包就是这么得来的.

我先说一点基本名词定义:
编码码率,是指的每1秒钟的图像数据,编码后数据的大小.
一般情况下,同样的一帧图像,码率越高,图像质量越好,码率越低,图像质量越差.
如果还是不能理解,就去找一张100k大小jpg图片,分别转换成10k大小,和50k大小,自己看看图片的差别.
而帧率,就是图像每秒中的数量,一般是25帧图片每秒钟.
所以,编码码率除以帧率,就是每张图片的编码大小.

网络发送码率,是指的数据在网络上的传输速度.也就是每秒传输多少数据.
所以,在这里,网络发送码率,等于编码码率.也就是每张图片的 编码大小乘以帧率.
举个例子:如果帧率是25帧每秒,每帧图片编码大小是100kbit,那么1秒内,就要发送 100kbit X 25帧 = 2500kbit/秒 = 2500kbit/s = 2500kbps,这就是编码码率.
为了便于网络传输,我们一般直接是设置编码码率,而不是设置编码图片大小.
注意:网络上的码率,一般是用bit做单位,编码码率,一般是byte做单位,1byte=8bit,k表示1000,m表示1000000,1m=1000k=1000000

因此基于上面的理由:
在编码的时候,设置不同高低编码码率,但是网络数据包的大小是固定的,也就可以理解你看到的情况,就是高码率,网络数据包时间间隔短,低码率,网络数据包时间间隔长.
当你改变帧率,但是编码码率不变,网络上的数据包的大小也是固定的,网络数据包的发送间隔也自然没有变化.

打字够呛...
你自己多google下名词解释... 搞不懂就拿纸笔来写草稿...

TOP

 

首先再次感谢C+裤子同志的耐心回复。

我按你说的理解就是:VLC发送串流,用TS格式封装包大小是固定的188字节,网络传输IP包一个包括7个TS包,所以大小固定。而视频编码时码率不同,所以一段时间内生成的TS包数量也不同,所以同一段时间内生成的IP包数量也不同,即发包率不同,也就是我看到的情况。不知我的理解是否正确。

另外再回到帧率的问题上。首先帧率是由摄像头指定的还是VLC中的各种编码方式指定呢?我在VLC中试验了几种不同的编码方式,然后在串流和媒体信息中查看串流状态,显示分辩率都是800×600,帧率都是15。我查了下摄像头的说明书,说摄像头的默认分辩率就是800×600,VLC中显示的应该就是摄像头的默认分辩率,这个应该是摄像头在采集图像时的分辩率,也就是压缩编码前的。我通过转码参数设置的分辩率大小应该是编码后的分辩率,也就是在接收端回放图像的大小。那么是不是可以同理认为15frame/sec的帧率也是摄像头采集图像时的帧率呢?而不是编码后的帧率。我在VLC转码串流输出的参数中修改视频帧率,在发送端的串流媒体信息中帧率始终是15不改变,而且在收端的收包间隔也没什么变化。所以感觉15frame/sec这个参数是摄像头的数据。(VLC以串流发送视频数据时是不是就没有所谓的帧率这个概念了?)

TOP

 

另外VLC的转码串流输出设置中还有一个视频位率,默认是800kb/s。这个设置MS也没什么作用,同样的编码方式下,我用800kb/s和400kb/s传输视频,收端的图像质量和时延没变化。

TOP

 

视频位率??
我在VLC串流输出,视频编码器选项卡,在选择视频编码格式下面有个比特率,你是不是说的这个?
这个是编码的码率.默认是800kbit/s.需要自己根据自己图像的分辨率,帧率,选择的编码大概的图像压缩效率比来设置.

如果你摄像头是160x120的分辨率,每秒15帧,一般摄像头是YUV格式隔行扫描,
每秒钟原始数据就是 160宽*120高*16bit*15帧=4608000bit/s=4608kbit/s,因为隔行扫描的因素,数据量还要少一半,2304kbit/s,这就是摄像头每秒钟采集的原始图像数据量.

MPEG2格式一般压缩效率比大概是25:1,就是说可以把原始图像压缩到原来的1/25的情况下,图像质量的损失还可以接受.2304kbit/25=92.16kbit/s,就是说,编码码率设置到92kbit/s左右,你肉眼基本看不出图像区别(放大几倍也可以看到区别).如果设置到40kbit/s,就可以看到明显的图像质量下降.

而默认是800kbit/s,很显然,你摄像头的宽高尺寸和帧率产生的图像数据,在这个编码码率下,你察觉不到什么图像损失.即使是设置到400kbit/s...

帧率的问题:
设想头每秒钟采集多少帧数据,编码器就编码多少帧数据,然后丢给网络发送模块发出去.帧率关编码器的参数设置什么事?你想让编码器调整帧率?
我不记得VLC有把调整帧率的功能在界面上交互出来.再说,调整帧率一般也不是编码器干的事...

这是最后一次打字回复.
基本常识性的问题最好自己看书...

TOP

 
1/1页1 跳转到
发表新主题 回复该主题