VLC串流DVB-T教程
By neo
2011-05-23
        VLC全名是VideoLanClient,是一个开源的、跨平台的视频播放器。目前的最新发布版本是1.1.9VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得/vlc/,下面给出一个简要的不完整的列表:
   操作系统:WindowsWinCELinuxMacOSXBEOSBSD
   访问形式:文件、DVD/VCD/CDhttpftpmmsTCPUDPRTPIP组播、IPv6rtsp
   编码格式:MPEG*DIVXWMVMOV3GPFLVH.263H.264FLAC
   视频字幕:DVDDVBTextVobsub
   视频输出:DirectXX11XVideoSDLFrameBufferASCII
   控制界面:WxWidgetsQT4WebTelnetCommandline
   浏览器插件:ActiveXMozillafirefox
   免费、开源、无广告、多格式支持,这看上去貌似很美好,但知名度为什么没有收费的DVBviewer高呢?大蛇明分别试用过两个产品,得出的结论如下:
   1.DVBviewer是专门针对数字广播开发的,其功能比较有针对性。而VLC的开发目标是局域网视频广播,DVB只是的其中一部分,就拿节目指南信号强度来说,一般dvb软件都会有这两个功能的,抱歉,这个真没有。
   2.VLC界面不友善,因为它本身支持的视频输入格式甚多,什么文件啊、光盘啊、视频采集卡。。。
这造成界面比较混乱,而且你知道做开源软件的程序员,一般只追求技术,只要功能上没有问题,界面差一点,他们是可以原谅的,有些功能甚至只有他们软件开发人员才会到。到现在为止,我都不知道怎样保存dvb-t的频道列表。值得庆幸的事,界面不友善的程序,往往脚本功能很丰富,这非常符合开源软件的编写习惯。^_^
   3.国内用户比较少,形成的中文文档不多,再加上抽象的界面,额。。。一般人都会望而却步。
   不过我相信任何困难都难不到我们勇敢的中国人的,干革命总得有人牺牲,我翻阅了无数国外的论坛,经过N多次试验,终于明白了VLC串流DVB-T的真谛。有幸在这里与大家分享一下。
   通过阅读文本,您可以:在局域网内架设VLC+DVB-T的服务器,在电脑上实现流畅播放数字电视,并且可以换频道、选择字幕、选择音轨...嗯,够吸引吧?好!跟着我做如下准备:
   硬件:
        神州数码电视棒330,简称:神棒330
        服务器一台,可选择性能比较强的PC(必须支持Usb2.0标准,我原来想在奔3电脑上测试一下低端配置的串流效果,结果驱动直接装不上,杯具收场。)
        电脑若干,用来接收串流数据,看网络电视!
        交换机、网线这些必须的,就不详细说了。
   软件:
        VLC media player1.1.9可以到下面的下载:
        /vlc/
   这里先说明一下,vlc一个程序已经囊括了服务器端和客户端的所有功能,所以各位下载的时候不需要哪个是服务器软件,哪个是客户端软件。软件下载后,直接安装,所有配置按默认选项(软件会根据操作系统的区域设置自动选择语言)。装完以后直接运行,哈。。。是不是有种无从下手的感觉?慢慢来,我们先熟悉一下界面,嗯。。。先播个高清看看吧!(前提建立在:神棒330的驱动已经安装,并且接上天线,并且信号已经过门限)
   1.主菜单中选择[媒体]->[打开捕获设备
   参数如上所述,然后按播放,没什么意外的话,您就会看到互动新闻台/高清翡翠台/J2其中一个了。按了播放以后,要稍微等1~2秒时间,程序需要锁定设备的频率,界面没有任何
提示,心急的朋友可能以为挂了,从而把程序关掉。这就是开源软件和商业软件的区别,人机交互啊~       
   如果您需要换台,则在视频画面打开右键菜单,选择[播放]->[程序]->这里就会出现586频道的所有节目列表,老实说,这个功能我了好久,大家一定要珍惜啊!如果想看650的老四台怎么办?不好意思,从这里开始吧1.主菜单中选择[媒体]->[打开捕获设备(C)]”。前面说了,软件不提供频道、节目保存功能(起码我是没到,书签功能也不好使),所以用vlc转台是个繁琐的、无奈的操作。       
   在右键菜单里,你还可以从[视频、[音频菜单里选择字幕、声道,这里就不详说了,反而有一个很实用的功能:[视频]->[剪裁里面可以把画面按不同比例剪裁,这样碰到4:3的老显示器,就能发挥全屏功能啦!简直是用老显示器看老四台的大杀器啊!
        很明显,软件对运动图像的处理不如理想,有横线,可能是编码模块的问题。免费的,将就用吧。
        好,界面操作介绍到这里,很简单,希望大家能学会,即使学不会,也不用慌,因为下
面的主菜基本用不到界面操作,我们来实在的,脚本!嘿嘿,程序员都喜欢玩脚本。玩脚本之前,我们先设置一下环境变量。右键我的电脑,选择属性



                                
    恩,细心的朋友一定发现了,这个是装载u盘上的xp,哈。。。机器配置还不错吧?我们再选择高级页面,然后点击环境
变量
                                
        选中Path”,然后按编辑,把vlc的工作路径添加到环境变量里面,如果您安装的时候是默认路径的话,应该入下图所示,注意,条目之间要用分号隔开



access是什么意思啊了        恩,不停的按确认,直至回到桌面。然后点开始菜单,输入:cmd命令(cmd不带冒号,不区分大小写),会出来一命令行窗口,我们输入指令:vlc,然后回车
        会出来什么?对啦,就是vlc的图形界面啦!哈。。。是不是很兴奋呢?恭喜您完成了vlc的第一条命令行。yeah~下面我们来个高级点的命令,用命令行打开高清翡翠台(先把vlc界面关掉,保证vlc已经完全退出,回到黑乎乎的命令行界面)输入:     
        --program=85dvb-t://frequency=586000000       
        回车,嘿嘿,高清翡翠台是不是已经出现在你眼前啦?很有成就感。当然咯,次次都这么操作,不是累死人啦,所以,您可以打开记事本,把命令抄进去,然后另存为bat批处理文件,如:高清翡翠.bat,下次想看哪个台,就点哪个批处理文件,方便吧?方便是方便了,不过滋生出一个问题是:如果您想用遥控看电视,哈。。。那。。。还是打消这个念头吧!       
        说了这么久,该进入正体了,如何串流dvb-t?当然还是命令行啦,以586为例,我编写的脚本如下:(整篇文章的精华啊,打瞌睡的同学,醒醒~)
      -v --color--intf dummy --programs=82,83,85 dvb-t://frequency=586000000:dvb-adapter=0 :dvb-bandwidth=-1 --sout#duplicate{dst=std{access=udp,mux=ts,dst=:8082},select='program=82',dst=std{access=udp,mux=ts,dst=:8083},select='program=83',dst=std{access=udp,mux=ts,dst=:8085},select='program=85',dst=std{access=http,mux=ts,dst=:8080/J2},select='program=82',dst=std{access=http,mux=ts,dst=:8080/iNews},select='program=83',dst=std{access=http,mux=ts,dst=:8080/HDJade},select='program=85'}

        命令有点长,大家编辑的时候注意不要随便加回车、换行等不可见符号,人是看不到,不过程序不认的。打开记事本,把该命令行粘帖上去,然后另存为:586广播.bat,然后再执行它,啊。。。没界面出来的?这就对了,因为指令指定了输出口为udp/tcp,并非显示屏。现在,我们开一台客户端,然后打开vlc,然后选择[媒体]->[打开网络串流,然后填写如下参数:(地址要换成您的服务器地址)
        然后按播放,就可以播放到高清翡翠台的节目了,要播放互动新闻台,可以输入:       
      192.168.10.4:8080/iNews
     
        地址后面的目录,主要根据您服务器上的指令而定。       
        根据本人的测试,当串流的频道中包含高清节目,在54m无线网络的环境下,客户端播放的时候就会卡,具体问题出现在交换机(10/100M自适应),还是cpu?还是程序本身的运算能力,因物理条件有限,这个问题还有待查证。另外,虽然我脚本里编写的有udp的串流方式,但客户端走udp协议无法连接服务器(客户端操作系统为Ubuntu10.04 LTS,服务器为WindowsXP,道理上应该采用linux作为服务器,不过神棒330没有forlinux的驱动,只好作罢)。如果是串流标清节目(720p)的话,播放非常流畅,那效果是杠杠的,绝对是出的了厅堂。希望大家带着未解决的两个问题,在不同环境下深入研究,慢慢您就会爱上vlc这个免费、没广告、纯走技术路线的软件了。     
        大概解释一下,为什么地面播信号通过串流后,对局域网的环境要求比较高,造成54m无线局域网播放高清视频会比较卡。(这需要有点技术基础,跳过本节不影响系统部署)其实,无论地面波,还是局域网,对于数据的描述都是二进制的数据流,我们可以吧数据流内容比如为您要送给我的一个杯子。只不过,地面播传输的是节目的原始内容(如果我们住得很近,就对面楼,你可以直接把杯子礽过来,这样的效率最高,住远一点嘛,还有神骨,网锅可以接住,太远就没办法了),而局域网走的是tcp/ip协议(你把杯子交给快递公司,上面有清楚有我的地址,所以无论我住多远,杯子都会安全送到我手上,只不过因为中间环节多了,
所以效率比较低),在原始内容的基础上,还会进行多次打包,其中包括程序间的通信协议,然后还有tcp/udp协议(俗称的包头包尾,如串流一个高清数据包的话,包头包尾加起来大概有140字节左右,就像我们收到的快递,外面纸箱,中间防震,最里面才是杯子)tcp协议的话,还有3次握手,每次成功发送数据后,对方还会有一个成功应答。(相当于发快递要写地址,收快递要签名)。我们可以把服务器想像成快递公司的员工,交换机为快递公司里面的输送带,当面对巨量的杯子时(高清节目)需要打包的时候,除了员工的打包速度要够快,输送带的运转速度也一定不能慢!两者相互相承,缺一不可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。