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

Mas*_*uer 4 vlc transcoding rtsp video-streaming

我正在开发一个需要显示远程桌面流媒体视频的网络应用.我们已经使用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}"

要么

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

谢谢 - 梅森

Mas*_*uer 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 
Run Code Online (Sandbox Code Playgroud)

这样做的好处包括每次流更改分辨率,比特率,帧速率等时都不必编辑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'
    }
   }
} 
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助任何观众遇到类似的问题!

石匠