使用 FFMPEG 进行直播

使用 FFMPEG 进行直播

这是一个相当简单的问题,但我找不到答案。我需要从捕获设备流式传输到服务器,然后让服务器上的 FFMPEG 重新编码适合 HLS 的流。

但是我该怎么做呢?我查看了 Flash Media Live Encoder、VLC 和 ffserver,但无法真正理解它应该如何工作。基本上,在我看来,我需要一个程序发送到服务器,该服务器接受流(可能还有一些用户身份验证),然后使流可供使用。我已经有一个系统可以接收文件并对其进行 HLS 编码,因此我可以作为输入参数指向本地服务器上的此应用程序以接收流并开始编码。

编辑:这实际上只是接受 rtmp 连接并将其提供给同一服务器上的 FFMPEG 的步骤。我希望 ffserver 可以做到这一点,但我不这么认为。

答案1

我遇到了一个名为crtmp服务器(或 rtmpd)看起来很小,但只需对代码进行一些小的改动就能完成我想要的功能。

答案2

也许这个工作示例可以给你提供更多帮助。

它通过 vlc 将实时流(网络摄像头)传输到 hls 中的网页。网络摄像头可以是任何其他实时流设备或捕获卡。该网页使用 HTML5 的特定流式传输功能。

cvlc v4l2:// :v4l2-vdev="/dev/video0" --sout '#transcode{vcodec=h264,vb=512,scale=1,acodec=none,venc=x264{aud,profile=high,level=60,keyint=15,bframes=0,ref=1,nocabac}}:duplicate{dst=std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/var/www/live/mystream.m3u8,index-url=http://"Here your webserverIP"/live/mystream-########.ts},mux=ts{use-key-frames},dst=/var/www/live/mystream-########.ts},dst=std{access=http,mux=ts,dst=:8082/video.mp4}}' &

命令行生成两个输出流,一个是用于通过网页进行流式传输的 HLS,另一个是 MP4 流,可由同一网络中的 VLC 播放器直接访问。

只需设置适当的目录并输入实际的网络服务器 IP 地址。

对于 Web 服务器,我使用了 lighttpd 的标准设置,并使用以下 HTML 5 流定义创建了 index.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Live Cam</title>
</head>

<body>
    <div id="player">
        <video autoplay="true" controls="controls" width="640" height="480">
            <source src="http://"Here your webserverIP"/live/mystream.m3u8" type="application/x-mpegURL" />
            Your browser does not support HTML5 streaming!
        </video>
    </div>
</body>
</html

连接您的网络摄像头,创建 index.html 文件,重启您的网络服务器,然后执行命令行(作为普通用户)。如果一切正常,您可以在所有 I 设备上访问您的流媒体源。

我曾尝试使用 ffmpeg(segment 和 hls)在有和没有 ffserver 的情况下甚至使用 avconv 和 avserver 的情况下执行相同操作,但迄今为止没有成功。

答案3

你可以阅读本指南这对学习使用 FFmpeg 非常有帮助。我认为你应该能够使用该指南创建一个好的解决方案,因为你需要的几乎所有 FFmpeg 方面都在那里。此外,将项目分成小部分是一个很好的步骤。只需先尝试从你的设备获取流,然后尝试使用 VLC(也使用 FFmpeg)查看它。然后你就可以在服务器上广播你的流了。祝你好运!

相关内容