我项目的最终目标是创建一个系统,该系统可以从电视采集卡录制电视节目,将其实时流式传输到网页上供观看,并将副本存储在硬盘上。这似乎是一个相当简单的概念,但我已经为此苦苦挣扎了数周。我在 Ubuntu 帮助论坛、VideoLAN.org 论坛上询问过,现在又在这里询问过。一定有人在没有使用昂贵的流媒体服务器(Adobe Streaming Server/Wowza)的情况下做过类似的事情。
我卡住的重点是直播,因为它有以下特点。
- 当用户开始查看流时,他们从当前点开始,而不是从开头(这可以通过任何可搜索的系统来完成,甚至是伪流媒体)。
- 流需要动态更新,以便播放器(Flowplayer 或 JWplayer)可以继续显示新编码的数据。我尝试了 lighttpd 的 mod_flv_streaming,遇到了一个问题:一旦用户开始流式传输,播放器就会认为文件“完成”,并且不会从服务器检索新数据,尽管每秒都会添加新数据。
我最近的尝试是通过 HTTP 使用 VLC 流式传输。我使用了以下编码行:
:sout=#transcode{vcodec=h264,vb=800,scale=1,width=320,height=240,acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=http,dst=192.168.0.75:8080/file.flv}
调试
工作 - 在单独的 VLC 访问实例中本地访问流(与流式传输流相同的 Ubuntu 框) -
http://192.168.0.75:8080/file.flv
。半工作状态 - 从 LAN 上的另一台计算机访问流。我说半工作状态是因为加载流需要 45 秒到 1 分钟的时间,这很奇怪,表明有些地方出了问题。
- 有效 - 我能够让 Flowplayer 在从本地 Ubuntu 框访问时播放流媒体,通过将 Firefox 指向它自己的 Apache Web 服务器来播放流媒体
http://192.168.0.75/flowplayer/example/index.html (which references the stream at
http://192.168.0.75:8080/file.flv`)。 - 勉强能用 - 如果我尝试从局域网上的计算机访问同一个 html 文件,播放器会出现,一会儿出现旋转的徽标,然后空白,左下角只有文字“flowplayer”。没有视频,没有声音,一片空白。将鼠标悬停在上面会显示控件。奇怪的是,如果我让浏览器打开几个小时,我的意思是几个小时,最终视频会出现并开始直播。
我的主要问题围绕以下概念:我应该使用 VLC 的 RTP/RTSP/RTMP 吗?如果是,我该如何设置?我已经尝试了无数次,但还没有在本地设置好,更不用说远程了。我是否仅限于 FLV 文件?重要的是 Flowplayer 可以以跨浏览器兼容的方式播放它,那么使用其他容器是否会更好?.ts 文件/分段器是什么?我唯一的选择是尝试让 Red5 之类的东西工作,还是购买昂贵的服务器?如果是这样,为什么 VLC 有一个 RTP 选项,但它从不工作?
任何指导或建议都将不胜感激。这是我的原始帖子在 VLC 论坛上,不幸的是,没有任何人参与。
答案1
如果你喜欢冒险,你可以给我的基于 WebM 的直播流媒体服务器试用。这是早期版本,它不会在服务器端保存流(但您可以通过服务器使用 wget 等保存副本)。
它通过 HTTP 传输,并兼容 HTML5<video>
标签。
由于我认为这是一个非常早期的版本,所以请随意使用问题跟踪器。;)