我正在构建一个需要将RTP流转换为HLS流的服务。需求最近发生了变化,我现在必须从RTP流创建一个RTMP流,然后使用两个独立的FFmpeg进程将RTMP转换为HLS。问题是RTP to 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=64001EMediaSoup生成RTP流,端口和主机匹配。我已经使用nc验证了实际上有一个数据流通过有问题的端口。没有错误消息。我是不是漏掉了什么明显的东西?
发布于 2021-08-28 10:39:06
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);来完成
https://stackoverflow.com/questions/68451391
复制相似问题