我正在尝试从nginx-rtmp服务器获取.m3u8文件,并将其传递给YouTube rtmp。我相信这是可能的(例如这里:https://stackoverflow.com/a/11978820/1552594,尽管这是在同一个主机上)。我使用的命令是:
ffmpeg -analyzeduration 0 -i \
http://source.rtmp.server/hls/stream.m3u8 -pix_fmt yuv420p \
-f flv rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx然而,输出只包含音频,YouTube不喜欢它。该命令会生成以下内容:

由于您在输出元数据中看不到任何视频流,因此流映射仅显示音频,而轨迹显示651kb音频的0kb视频
任何帮助都非常感谢
更多信息
本文中命令的改进版本:
https://judge2020.com/restreaming-a-m3u8-hls-stream-to-youtube-using-ffmpeg/
“使用FFMPEG将m3u8 HLS流重定向到Youtube”也就是我正在尝试做的事情。
我现在发送的命令是:
ffmpeg -re -i "http://source.rtmp.server/hls/stream.m3u8" \
-strict -2 -c:v copy -c:a aac -ar 44100 -ab 128k -ac 2 -flags \
+global_header -bsf:a aac_adtstoasc -bufsize 3000k -f flv \
"rtmp://a.rtmp.youtube.com/live2/xxx-xxxx-xxxx-xxxx"除了使用aac编解码器读取和输出音频之外,我得到了几乎完全相同的响应。

更多信息
我发现添加映射可以强制视频流进入输出:
ffmpeg -re -i "http://source.rtmp.server/hls/stream.m3u8" \
-strict -2 -c:v copy -c:a -map 0:0 -map 0:1 -ar 44100 -ab 128k -ac 2 \
-flags +global_header -bsf:a aac_adtstoasc -bufsize 1000k \
-f flv "rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx"这抛出了可能导致视频流被静默丢弃的错误:

发布于 2018-02-05 14:05:25
最终解决了这个问题。上面的最后一个问题是转移注意力,由于缺少音频-c:a的编解码器参数。
完整的工作命令如下:
ffmpeg -probesize 100M -analyzeduration 20M -re \
-i "http://source.rtmp.server/hls/stream.m3u8" -strict -2 -c:v \
libx264 -pix_fmt yuv420p -c:a aac -map 0:0 -map 0:1 -ar 44100 \
-ab 128k -ac 2 -b:v 2567k -flags +global_header -bsf:a aac_adtstoasc \
-bufsize 1000k -f flv "rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx"重要的部分是-probesize和-analyeduration -它们需要调整,直到它们正常工作。-re标志对于指示重流很重要。各种视频编解码器声明也很重要- -c:v libx264 -pix_fmt yuv420p,否则将抛出输出大小为0x0的错误。最后,映射标志确保两个流都包含在输出中:-map 0:0 -map 0:1
https://stackoverflow.com/questions/48610579
复制相似问题