ffmpeg推流到mediasoup

0、前言

mediasoup提供了PlainTransport可以接收裸RTP数据,可以通过ffmpeg.sh脚本推本地文件到mediasoup(ffmpeg.sh推流介绍脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh)

1、PlainTransport 分析

( mediasoup.version >= 3.5.0 )
PlainTransport 主要用于 RTP/RTCP (或者采用安全的srtp)以及 SCTP(DataChannel)的通讯连接。

PlainTransport可以接收rtp裸流,也可以接收AES加密的RTP流。

源码中提供了一个可以通过ffmpeg发送RTP裸流到mediasoup的脚本。

脚本通过HTTP post发送创建PlainTransport请求,然后通过ffmpeg向指定 地址+端口 发送RTP裸流

#
# Create a PlainTransport in the mediasoup to send our video using plain RTP
# over UDP. Do it via HTTP post specifying type:"plain" and comedia:true and
# rtcpMux:false.
#
echo ">>> creating mediasoup PlainTransport for producing video..."
 
res=$(${HTTPIE_COMMAND} \
	POST ${SERVER_URL}/rooms/${ROOM_ID}/broadcasters/${BROADCASTER_ID}/transports \
	type="plain" \
	comedia:=true \
	rtcpMux:=false \
	2> /dev/null)

ffmpeg发送RTP流

#
# Run ffmpeg command and make it send audio and video RTP with codec payload and
# SSRC values matching those that we have previously signaled in the Producers
# creation above. Also, tell ffmpeg to send the RTP to the mediasoup
# PlainTransports' ip and port.
#
echo ">>> running ffmpeg..."

#
# NOTES:
# - We can add ?pkt_size=1200 to each rtp:// URI to limit the max packet size
#   to 1200 bytes.
#
ffmpeg \
	-re \
	-v info \
	-stream_loop -1 \
	-i ${MEDIA_FILE} \
	-map 0:a:0 \
	-acodec libopus -ab 128k -ac 2 -ar 48000 \
	-map 0:v:0 \
	-pix_fmt yuv420p -c:v libvpx -b:v 1000k -deadline realtime -cpu-used 4 \
	-f tee \
	"[select=a:f=rtp:ssrc=${AUDIO_SSRC}:payload_type=${AUDIO_PT}]rtp://${audioTransportIp}:${audioTransportPort}?rtcpport=${audioTransportRtcpPort}|[select=v:f=rtp:ssrc=${VIDEO_SSRC}:payload_type=${VIDEO_PT}]rtp://${videoTransportIp}:${videoTransportPort}?rtcpport=${videoTransportRtcpPort}"

2、ffmpeg.sh推流介绍

脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh

注意:想看到ffmpeg的推流效果,可以通过chrome网页请求,提前创建好一个房间,然后向这个房间进行推流

(1)安装脚本运行时的依赖库

安装ffmpeg

apt-get install -y ffmpeg

安装httpie

apt-get install -y httpie

安装urlib

pip install urllib3

(2)去掉https ssl证书认证

直接运行ffmpeg.sh脚本会报 ssl证书认证问题,需要修改脚本,添加去除认证参数

具体操作如下:

打开ffmpeg.sh 找到HTTPIE_COMMAND 定义处,添加字段:--verify,具体修改为:

HTTPIE_COMMAND="http  --verify=no  --check-status"

 3、启动ffmpeg.sh推流

启动命令为:

// test.mp4为要推送的本地视频
SERVER_URL=https://ip:4443 ROOM_ID=u0y6t9dt MEDIA_FILE=./test.mp4 ./ffmpeg.sh

运行终端效果如下图:


>>> verifying that room 'b8td5tjf' exists...
>>> creating Broadcaster...
>>> creating mediasoup PlainTransport for producing audio...
>>> creating mediasoup PlainTransport for producing video...
>>> creating mediasoup audio Producer...
>>> creating mediasoup video Producer...
>>> running ffmpeg...
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './demo.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.58.101
  Duration: 00:00:15.38, start: 0.000000, bitrate: 609 kb/s
    Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 48 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480, 563 kb/s, 24 fps, 24 tbr, 12288 tbn, 96 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> opus (libopus))
  Stream #0:1 -> #0:1 (h264 (native) -> vp8 (libvpx))
Press [q] to stop, [?] for help
[libvpx @ 0x55a93955b040] v1.8.2
Output #0, tee, to '[select=a:f=rtp:ssrc=1111:payload_type=100]rtp://192.168.10.90:40000?rtcpport=40005|[select=v:f=rtp:ssrc=2222:payload_type=101]rtp://192.168.10.90:40002?rtcpport=40003':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    Stream #0:0(und): Audio: opus (libopus), 48000 Hz, stereo, flt, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc58.54.100 libopus
    Stream #0:1(und): Video: vp8 (libvpx), yuv420p, 640x480, q=-1--1, 1000 kb/s, 24 fps, 24 tbn, 24 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.54.100 libvpx
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=51346 fps= 24 q=0.0 Lsize=N/A time=00:35:39.55 bitrate=N/A dup=716 drop=0 speed=   1x

界面显示效果如下:

参考:mediasoup源码分析(十) ffmpeg推流到mediasoup 及调试node.js层代码-物联网技术文章-傲云电气网

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orgotF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值