首页 > 解决方案 > 在 Web 平台上使用 ffmpeg 运行本地用户的实时流式传输

问题描述

我正在使用以下命令来流式传输我的实时桌面屏幕。

ffmpeg -f x11grab -r 1 -loglevel panic -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -i $DISPLAY -qscale 0 -f mpegts udp://192.168.3.151:1111

udp://192.168.3.151:1111 - 这是我的流媒体 URL

我可以在假释媒体播放器中看到直播(在 Linux 平台上),但我在跨网络中看不到这个(即来自 windows PC - 在同一个网络中)

是否有任何网络平台,所以我可以使用唯一的流媒体 URL 从任何地方(Windows 或 linux)查看我的流媒体,还是我需要更改我的流媒体命令或方法?

任何帮助深表感谢

标签: ffmpegvideo-streaminglive-streaming

解决方案


我假设 192.168.3.151 是您的 linux 机器 IP,并且使用提到的 URL (udp://192.168.200.151:1111),您正在本地机器的端口 1111 上进行流式传输,因此预计只能在其上看到此流。

首先,您可以使用多播 UDP 范围(在此处查看更多信息)将您的桌面屏幕流式传输到本地 LAN,如下所示:

ffmpeg -f x11grab -r 1 -loglevel panic -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -i $DISPLAY -qscale 0 -f mpegts udp://239.0.0.1:1111

因此,您可以在本地 LAN 中的其他机器上看到流。

如果您想在网络上流式传输您的桌面屏幕,您必须使用适当的编解码器,如 h264 (MP4),并使用NginxWowza或类似的媒体服务器,并使用以下命令在其上流式传输:

ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -framerate 25 -i $DISPLAY -c:v h264 -preset ultrafast -tune zerolatency -qscale 0 -f mpegts rtmp://<Media_Server_Address>:1935/live/<stream_name>

Media_Server_Address是您的服务器域或 IP 地址。这可以是您的 Web 服务器或安装了媒体服务器的其他服务器。

live是一个处理实时流的应用程序。它可以有另一个名称,但默认情况下它的默认名称是 live。

stream_name是流的任意名称。

在这种情况下,您通过媒体服务器上的RTMP发送流,然后其他人可以通过例如HLS协议通过 VLC 播放器等播放器应用程序或通过具有此 URL 的网页中的 HTML5 视频标签看到它:

http://<Media_Server_Address>:1935/live/<stream_name>/playlist.m3u8

更新:

这是使用 Nginx 作为媒体服务器的示例:

Nginx 配置:

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        chunk_size 4000;

    application live {
            live on;
            allow publish all;
            allow play all;
        }

    }
}

FFmpeg 命令必须在本地 PC 上执行才能将本地 PC 的桌面流式传输到媒体服务器:

ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -framerate 25 -i $DISPLAY -c:v h264 -preset ultrafast -qscale 0 -f flv rtmp://<Media_Server_Address>:1935/live/localdesktop

现在,用户可以通过此 URL 在其他 PC 上使用 VLC 播放流:

rtmp://<Media_Server_Address>/live/localdesktop

如果需要 HLS 播放,只需将 hls 配置添加到 Nginx 配置文件中即可。然后用户可以使用 VLC 使用这个 URL 来播放 hls 流:

http://<Media_Server_Address>:1935/live/localdesktop/playlist.m3u8

需要注意的是,在这种情况下,必须使用相同的 ffmpeg 命令。


推荐阅读