【问题标题】:No output when creating an RTMP stream from an RTP stream with FFmpeg使用 FFmpeg 从 RTP 流创建 RTMP 流时无输出
【发布时间】:2021-09-27 18:15:02
【问题描述】:

我正在构建一个需要将 RTP 流转换为 HLS 流的服务。最近需求发生了变化,我现在必须从 RTP 流创建一个 RTMP 流,然后使用两个单独的 FFmpeg 进程将 RTMP 转换为 HLS。问题是 RTP 到 RTMP 进程实际上并没有向指定的 RTMP URL 输出任何内容。

使用以下命令直接从 RTP 转到 HLS(为简洁起见,删除了一些选项)按预期工作:

ffmpeg -f sdp \
       -protocol_whitelist file,udp,rtp \
       -i example.sdp \
       -g 2 \
       -hls_time 2.0 \
       -hls_list_size 5 \
       -vcodec libx264 \
       -acodec aac \
       -f hls chunks/test-master.m3u8

但是,使用以下命令将 RTP 转换为 RTMP 不会产生任何输出,尽管使用了相同的 SDP 文件,它似乎也没有接收到任何输入:

ffmpeg -f sdp \
       -protocol_whitelist pipe,udp,rtp \
       -i example.sdp \
       -g 2 \
       -vcodec libx264 \
       -acodec aac \
       -f flv rtmp://localhost/test-stream

这是 SDP 文件的示例:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Test
c=IN IP4 127.0.0.1
t=0 0
m=audio 37000 RTP/AVPF 97
a=rtpmap:97 opus/48000/2
a=fmtp:97 minptime=10;useinbandfec=1
m=video 37002 RTP/AVPF 96
a=rtpmap:96 H264/90000
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001E

MediaSoup 生成 RTP 流,并且端口和主机匹配。我已经使用nc 验证了实际上有一个数据流通过相关端口。没有错误消息。我在这里遗漏了什么明显的东西吗?

【问题讨论】:

  • 共享失败命令的完整日志。

标签: ffmpeg rtmp rtp sdp


【解决方案1】:

MediaSoup 使用 SFU(选择性转发单元)构建。正如我所看到的,您正在使用: m=video 37002 RTP/AVPF 96 a=rtpmap:96 H264/90000 a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001E。您需要确保视频流的消费者使用相同的视频编解码器,这可以通过console.log(consumer.rtpParameters.codecs); 完成

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2020-11-16
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多