RTSP流式传输到Web App(使用VLC 2.0)

时间:2012-06-11 21:56:14

标签: video-streaming rtsp vlc transcoding

我正在开发一个需要显示远程桌面流媒体视频的网络应用。我们已经使用ffmpeg / ffserver和flowplayer实现了这一点,将RTSP转码为.flv格式,但它非常脆弱,我的研究使我使用了命令行版本的VLC。

我的问题是: 有没有办法将转码后的RTSP(如OGG,RTP或其他格式)传输到浏览器中,同时避免依赖闪存?

我知道标签在很长一段时间内都不支持流媒体视频,但我无法找到一致的文档。有人说你可以直接输入RTP,有些人说你永远无法通过标签传输。

此外,我目前正在我的本地Apache服务器上测试所有这些。

我假设转码看起来像是:

  • vlc -vvv rtsp://xx.xx.xx.xx:554 / vga.sdp --no-sout-audio --sout'#standard {access = http,mux = ogg,dst = http:/ /localhost/test_ogg.php}“

OR

  • vlc -vvv rtsp://xx.xx.xx.xx:554 / vga.sdp --no-sout-audio --sout'#transcode {vcodec = mp4v,acodec = mpga,vb = 400}:重复{DST =显示,DST = RTP {MUX = TS,DST = XXX.XXX.XX.XX,端口= XXXX}}“

谢谢 - 梅森

1 个答案:

答案 0 :(得分:5)

好的,我正在寻找的解决方案是以CVLC 2.0.1 [仅限控制台的VLC]的形式,但也利用了ffmpeg的多路复用功能。

这个单行代码将RTSP流转码为FLV并将其推送到指定端口的本地主机服务器。

cvlc rtsp://xxx.xxx.xxx.xxx:554/vga.sdp :sout='#transcode{vcodec=FLV1,vb=2048,fps=25,scale=1,acodec=none,deinterlace}:http{mime=video/x-flv,mux=ffmpeg{mux=flv},dst=127.0.0.1:8090/device_1.flv}' :no-sout-standard-sap :ttl=5 :sout-keep :no-audio --video --no-sout-audio 

这样做的好处包括每次流更改分辨率,比特率,帧速率等时都不必编辑ffserver.conf文件。 - 只需重新启动这一行,以便它可以重新捕获流。此外,如果流具有适当的规范,则不需要vb=fps=属性;如果我需要为了网页而节流流,我只会使用它们。

--network-caching是我正在考虑的另一个功能,虽然在某些情况下非常有用,但在我的情况下是不必要的。

Flowplayer代码如下所示:

<div style="width:1280px;height:720px;margin:10px" id="player_1"></div><script language="javascript">
flowplayer("player_1", {src: "/js/flowplayer-3.2.7.swf", wmode:"transparent"},{
clip: {
  url: 'http://127.0.0.1:8090/device_1.flv',
  autoPlay: true,
  autoBuffering: true,
  live: true,
  bufferLength:0
}, 
plugins: { 
   controls: { 
      all: false,
      scrubber: true,
      play: true, 
      fullscreen: true, 
      time: false,
      width: '100%',
      opacity: 0.8,
      tooltips: {
        buttons: true,
        fullscreen: 'Enter fullscreen mode'
    }
   }
} 
});

希望这有助于所有观众遇到类似的问题!

梅森