视频流 – 如何从Linux服务器流式传输实时视频?
这就是我想要做的.环顾四周,但没有找到任何直接的答案.我有一个使用Ubuntu /
MySQL / Apache运行网站的Linux机器.我也拥有自己的静态IP,即不使用虚拟主机.我希望能够将视频源从笔记本电脑上的网络摄像头(可能是运行Windows)流式传输到我的Linux服务器,让我的某个网站的用户能够在流式传输时看到该视频.显然,笔记本电脑需要以某种方式对服务器进行身份验证,但是对于谁可以在网站上查看实时视频应该没有限制.谢谢.
解决方法
我目前正在通过FireWire连接的3台miniDV摄像机开发在线流媒体,这与您的需求非常相似.
快速提示:vlc flowplayer / jw player 首先,有两种视频格式,您可以在在线流媒体中使用:FLV和h264. FLV更易于转码,h264具有更好的尺寸/质量比,但转码消耗更多.两者都可以由网页中的flash播放器显示. 其次,流媒体基础设施.由于您的笔记本电脑的带宽有限(几Mbps顶部),您需要获得流到您的服务器,并将其重新发送给客户端.因此,流将流向服务器1次,然后从那里流向N次.您尚未描述笔记本电脑的互联网连接,因此该方案分为两部分: >笔记本电脑连接公共IP地址或您可以NAT端口到笔记本电脑.这种情况要容易得多,因为您可以轻松地从服务器连接到笔记本电脑.最大的缺点是,您被绑定到一个位置(一个IP地址). 无论使用何种场景,基础设施都将如下所示 CAMERA - (usb) - LAPTOP - (network,limited upload) - SERVER - (network) - Client 0 - Client 1 - Client 2 - Client N 从笔记本电脑流媒体 >从网络摄像头捕获视频.我从来没有从本地连接的网络摄像头捕获流,但有很多例子如何通过V4L实现,例如: laptop $vlc v4l://:v4l-vdev =“/ dev / video0”:v4l-adev =“/ dev / audio2” 这是连接到网络摄像头的VLC命令的第一部分.有关详细信息,请参阅上面提到的HOWTO.特别要查看“视频组”部分并更正/ dev / video和/ dev / audio的设备路径.这些可能与您的笔记本电脑有所不同 –sout’#transcode {vcodec = FLV1,vb = 512,acodec = mpga,ab = 64,samplerate = 44100}’ 这将使用MPGA音频将??视频流转码为FLV格式(我的Ubuntu中没有MP3). Samplerate在某种程度上是强制性的,没有它就无法工作.但你可以选择较小的,如22050.这将按原样转码视频流,因此比例为1:1.您可以追加宽度和高度参数,甚至是缩放参数.查看VLC文档. :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 除“连接超时”之外的任何内容都会显示,您可以连接到笔记本电脑的流. laptop $ssh your_user @ server_ip_address -R 8081:127.0.0.1:8081 这个神奇的命令会将您的笔记本电脑端口8081“绑定”到服务器端口8081.这意味着当您在服务器上连接到8081时,您将通过SSH隧道静默连接到您的笔记本电脑端口8081.很酷,对吧?:) 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. 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查看数据是否真正通过网络等流动 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |