解决方法
快速提示:vlc flowplayer / jw player
首先,有两种视频格式,您可以在在线流媒体中使用:FLV和h264. FLV更易于转码,h264具有更好的尺寸/质量比,但转码消耗更多.两者都可以由网页中的flash播放器显示.
其次,流媒体基础设施.由于您的笔记本电脑的带宽有限(几Mbps顶部),您需要获得流到您的服务器,并将其重新发送给客户端.因此,流将流向服务器1次,然后从那里流向N次.您尚未描述笔记本电脑的互联网连接,因此该方案分为两部分:
>笔记本电脑连接公共IP地址或您可以NAT端口到笔记本电脑.这种情况要容易得多,因为您可以轻松地从服务器连接到笔记本电脑.最大的缺点是,您被绑定到一个位置(一个IP地址).@H_404_13@>笔记本电脑与公共地址无关.这有点棘手,但可以从任何网络工作,这将允许您SSH到您的服务器并具有足够的上传(1 Mbps应该这样做).
无论使用何种场景,基础设施都将如下所示
CAMERA - (usb) - LAPTOP - (network,limited upload) - SERVER - (network) - Client 0 - Client 1 - Client 2 - Client N
从笔记本电脑流媒体
>从网络摄像头捕获视频.我从来没有从本地连接的网络摄像头捕获流,但有很多例子如何通过V4L实现,例如:@H_404_13@Webcam Setup.您应该感兴趣的唯一部分是:
laptop $vlc v4l://:v4l-vdev =“/ dev / video0”:v4l-adev =“/ dev / audio2”
这是连接到网络摄像头的VLC命令的第一部分.有关详细信息,请参阅上面提到的HOWTO.特别要查看“视频组”部分并更正/ dev / video和/ dev / audio的设备路径.这些可能与您的笔记本电脑有所不同@H_404_13@>将视频转码为FLV.我个人使用FLV,因为它对cpu要求较低.我使用的转码字符串是这样的:
–sout’#transcode {vcodec = FLV1,vb = 512,acodec = mpga,ab = 64,samplerate = 44100}’
这将使用MPGA音频将视频流转码为FLV格式(我的Ubuntu中没有MP3). Samplerate在某种程度上是强制性的,没有它就无法工作.但你可以选择较小的,如22050.这将按原样转码视频流,因此比例为1:1.您可以追加宽度和高度参数,甚至是缩放参数.查看VLC文档.@H_404_13@>从笔记本电脑流式传输.现在你必须建立本地流,服务器将在其上连接:
:STD {存取= HTTP {MIME =视频/ X-FLV},MUX = FFMPEG {MUX = FLV},DST = 0.0.0.0:8081 / stream.flv}
这会将VLC流绑定到0.0.0.0:8081/stream.flv.整个命令看起来像这样:
laptop $vlc v4l://:v4l-vdev =“/ dev / video0”:v4l-adev =“/ dev / audio2”–sout’#transcode {vcodec = FLV1,采样率= 44100}:{STD访问= HTTP {MIME =视频/ X-FLV},DST = 0.0.0.0:8081 / stream.flv}”
在服务器上重新流
>在服务器上捕获流并重新发送它.同样,我们使用VLC捕获和流式传输.使用情况基于此帖子早期的基础架构方案.正如我所展示的,笔记本电脑上的VLC在某些端口上传输视频.此端口必须可从服务器访问.如果您有笔记本电脑的公共IP地址或NATed端口,您可以使用telnet进行测试:
server $telnet public_ip_address 8081
除“连接超时”之外的任何内容都会显示,您可以连接到笔记本电脑的流.@H_404_13@如果您没有公共IP地址,或者您不能使用NAT端口,则必须以相反的方式执行此操作.您可以从笔记本电脑连接到服务器,并将笔记本电脑端口远程转发到服正确的SSH命令是:
laptop $ssh your_user @ server_ip_address -R 8081:127.0.0.1:8081
这个神奇的命令会将您的笔记本电脑端口8081“绑定”到服务器端口8081.这意味着当您在服务器上连接到8081时,您将通过SSH隧道静默连接到您的笔记本电脑端口8081.很酷,对吧?:)@H_404_13@所以我们所要做的就是简单的VLC连接和流:
server $vlc http:// localhost:8081 / stream.flv –sout’#std {access = http {mime = video / x-flv},mux = ffmpeg {mux = flv},dst = 0.0.0.0:8082 /stream.flv}”
或者在公共IP地址或NATed端口的情况下:
server $vlc http:// public_ip_address:8081 / stream.flv –sout’#std {access = http {mime = video / x-flv},dst = 0.0.0.0:8082 /stream.flv}”
与笔记本电脑部分一样,服务器上的VLC绑定到端口8082.为什么8082而不是8081? SSH远程转发已经采用8081.@H_404_13@为什么我们不像第一个例子那样使用转码部分?视频格式正确,因此我们所要做的就是按原样播放视频.@H_404_13@>测试.在这两个示例中,您都可以通过VLC查看流来测试功能.您可以测试本地流:
laptop $vlc http:// localhost:8081 / stream.flv
您可以测试服务器的流:
laptop $vlc http:// server_ip_address:8082 / stream.flv
在这两种情况下,您都应该看到您的网络摄像头输入.
在网络上显示流
在大多数情况下,在Web上显示流是通过Flash播放器.我尝试了两种免费用于非商业用途的产品:JW Player和Flowplayer.我一直在使用Flowplayer,但我不记得原因,可能是因为插件(我不使用:))或因为更好文档.
如何在网页中显示来自VLC的FLV流,请参见:Stream VLC to Website with asf and Flash
故障排除
注意会出现的许多问题.首先,就像在一切事物中一样,阅读. VLC是非常繁琐的程序,所以它会告诉你问题出在哪里.可能是访问视频/音频设备的权限,丢失编解码器,拼写错误的–sout参数等问题,…学习使用iftop查看数据是否真正通过网络等流动