这是我想要做的。 环顾四周,但没有find任何直接的答案。 我有一个使用Ubuntu / MySQL / Apache运行网站的Linux机器。 我也有我自己的静态IP,即不使用虚拟主机。 我希望能够将来自笔记本电脑(大概是运行Windows)的摄像头的videostream传输到我的Linux服务器,并让我的其中一个网站的用户能够以videostream的forms观看该video。 显然,笔记本电脑需要以某种方式与服务器进行身份validation,但不应限制谁可以在网站上查看实时video。 谢谢。
我目前正在开发通过FireWire连接的3台miniDV摄像机的在线数据stream,这非常类似于您的需求。
快速提示:vlc + flowplayer / jw播放器
首先,有两种video格式,您可以使用在线stream媒体:FLV和h264。 FLV转码更容易,h264具有更好的尺寸/质量比,但转码是更多的CPU消费。 网页中的Flash播放器都可以显示。
其次,stream媒体基础设施。 由于笔记本电脑的带宽是有限的(几Mbps顶端),你需要stream到你的服务器,并将其重新注入到客户端。 所以这个stream将stream一次到服务器,然后从那里streamN次到客户端。 您没有描述您的笔记本电脑的互联网连接,所以该场景分为两部分:
笔记本电脑连接公共IP地址或者你可以将NAT端口连接到笔记本电脑 。 这种情况要容易得多,因为你可以很容易地从服务器连接到笔记本电脑。 最大的缺点是,你绑定到一个位置(一个IP地址)。
笔记本电脑没有与公众地址连接 。 这是有点棘手,但将工作从任何networking,将允许您SSH连接到您的服务器,并有足够的上传(1Mbps应该这样做)。
无论使用情况如何,基础架构将如下所示
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0 - Client 1 - Client 2 - Client N
从笔记本电脑stream
从networking摄像头捕捉video 。 我从来没有从本地连接的networking摄像头捕获stream,但有很多例子如何通过V4L,例如: networking摄像头设置 。 你应该感兴趣的唯一部分是:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
这是VLC命令连接到摄像头的第一部分。 有关更多详细信息,请参阅上述HOWTO。 尤其是看“video组”部分,并更正/ dev / video和/ dev / audio的设备path。 这些可以在你的笔记本电脑上不同。
将video转码为FLV 。 我个人使用FLV,因为它对CPU的要求不高。 我使用的转码string是这样的:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
它将videostream转换为MPVaudio的FLV格式(MP3在我的Ubuntu中不可用)。 Samplerate是强制性的,没有它就无法工作。 但你可以select较小的,如22050.这将videostream“原样”,所以规模是1:1。 您可以追加宽度和高度参数,甚至可以缩放参数。 看看VLC文档。
从笔记本电脑stream出 。 现在,你必须做出本地stream,服务器连接:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
这将绑定VLCstream到0.0.0.0:8081/stream.flv。 整个命令将如下所示:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
在服务器上重新stream式传输
在服务器上捕获stream并重新调用它 。 再次,我们使用VLC捕捉和stream。 使用情况是基于本文早期的基础架构情景。 正如我所展示的,笔记本电脑上的VLC在一些端口上传输video。 该端口必须从服务器访问。 如果您拥有笔记本电脑的公网IP地址或NATed端口,则可以使用telnet进行testing:
server$ telnet public_ip_address 8081
除“连接超时”之外的任何内容都会显示,您可以连接到笔记本电脑的stream。 如果您没有公共IP地址,或者您不能使用NAT端口,则必须以相反的方式进行操作。 您可以从笔记本电脑到服务器进行SSH连接,并将笔记本电脑端口远程转发到服 正确的SSH命令是:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
这个神奇的命令将“绑定”你的笔记本电脑端口8081到服务器端口8081.这意味着当你连接服务器到8081时,你将静静地通过SSH隧道连接到你的笔记本电脑端口8081。 很酷,呵呵?:)所以我们所要做的就是简单的VLC连接和stream:
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地址或NAT端口的情况下:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
就像在笔记本电脑部分,服务器上的VLC绑定到端口8082.为什么8082而不是8081? 8081已经被SSH远程转发。 为什么我们不像第一个例子那样使用转码部分? video已经是正确的格式,所以我们只需要按照原样进行stream式传输。
testing 。 在这两个示例中,您都可以通过VLC查看stream来testingfunction。 你可以testing你的本地stream:
laptop$ vlc http://localhost:8081/stream.flv
你可以testing你的服务器的stream:
laptop$ vlc http://server_ip_address:8082/stream.flv
在这两种情况下,你都应该看到你的摄像头input。
在networking上显示stream
在大多数情况下,在networking上显示stream,通过Flash播放器。 我尝试了两种产品,这些产品可以免费用于非商业用途: JW Player和Flowplayer 。 我留在Flowplayer,但我不记得原因,也许是因为插件(我不使用:))或因为更好的文档。
如何在网页中显示来自VLC的FLVstream如下: 使用asf和Flash将VLCstream到网站
故障排除
注意会出现很多问题。 首先,像所有事情一样, 阅读 。 VLC是非常健谈的程序,所以它会告诉你问题在哪里。 可能是访问video/audio设备的权限问题,缺less编解码器,拼写错误 – 输出参数,…学习如何使用iftop
来查看数据是否真正stream经networking等。
我在这里select的工具是vlc 。 它不仅是一个多用途的多格式video播放器,它还能够以一定规模的文件格式和stream媒体协议进行stream式传输。 作为奖励,它在Windows和Linux主机之间跨平台工作。
几年前,我们已经build立了类似的情况,一个使用窄带宽DSL线(上游128 K)的客户需要将他的networking连接的networking摄像头传输给广大的用户。 作为“reflection器”主机的VLC安装完成凸轮信号轮换,从stream客户端获取主要带宽负载,并以不同的stream协议和格式呈现stream。
不是我的专业领域,但也许我可以指出你潜在的方向。
商业实现是使用Adobe的Flash Media Server。 当然,这可能是一个相当昂贵的方法。 然而,开源的替代品 – 比如Red5 。 您将需要安装服务器(它具有Java依赖项)。
一旦你的服务器运行,你可以select你的前端(我相信Red5有一些样品,但你也可以使用type=camera
JW播放器 )。
前端将从媒体服务器接收stream媒体video,并将您的媒体stream上传到媒体服务器。
更多信息: Red5帮助信息和Red5参考