我假设 192.168.3.151 是您的 linux 机器 IP,并且使用提到的 URL (udp://192.168.200.151:1111),您正在本地机器的端口 1111 上进行流式传输,因此预计只能在它。
首先,您可以使用多播 UDP 范围 (See more information here) 将您的桌面屏幕流式传输到本地 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
因此,您可以在本地局域网中的其他机器上看到流。
如果您想在网络上流式传输您的桌面屏幕,您必须使用适当的编解码器,例如 h264 (MP4) 并使用 media server,例如 Nginx、Wowza 或一些喜欢这些并使用以下命令对其进行流式传输:
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 发送流,然后其他人可以通过 VLC 播放器等播放器应用程序或通过 HLS 协议看到它具有此 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 使用 VLC 在其他 PC 上播放流:
rtmp://<Media_Server_Address>/live/localdesktop
如果需要 HLS 播放,只需将 hls 配置添加到 Nginx 配置文件中即可。然后用户可以使用 VLC 使用这个 URL 来播放 hls 流:
http://<Media_Server_Address>:1935/live/localdesktop/playlist.m3u8
需要注意的是,在这种情况下,必须使用相同的 ffmpeg 命令。