我正在开发一个需要显示远程桌面流媒体视频的网络应用。我们已经使用ffmpeg / ffserver和flowplayer实现了这一点,将RTSP转码为.flv格式,但它非常脆弱,我的研究使我使用了命令行版本的VLC。
我的问题是: 有没有办法将转码后的RTSP(如OGG,RTP或其他格式)传输到浏览器中,同时避免依赖闪存?
我知道标签在很长一段时间内都不支持流媒体视频,但我无法找到一致的文档。有人说你可以直接输入RTP,有些人说你永远无法通过标签传输。
此外,我目前正在我的本地Apache服务器上测试所有这些。
我假设转码看起来像是:
OR
谢谢 - 梅森
答案 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'
}
}
}
});
希望这有助于所有观众遇到类似的问题!
梅森