ffmpeg支持webrtc推流

作者:音视频小话
来源:https://mp.weixin.qq.com/s/urFWlNYcOFs5OwCrre9WGA

1 前言

ffmpeg是音视频业界最著名的开源之一,支持多种流媒体协议的推拉流,支持多种媒体格式,支持多种编解码器,但是一直没有对webrtc协议的推拉流进行支持。

在whip协议写入rfc的草案后,webrtc协议的推流协议就有了规范。

whip协议,全名: WebRTC-HTTP ingestion protocol.

rfc地址: 

https://www.ietf.org/archive/id/draft-ietf-wish-whip-16.txt

在SRS开源创始人winlin亲自下场,开发了ffmpeg支持webrtc推流的功能,在ffmpeg里支持了whip协议。

源码地址:

https://github.com/ossrs/ffmpeg-webrtc

本文介绍如何使用ffmpeg进行webrtc推流。

2 whip简介

whip协议的流程图如下:


 +-------------+    +---------------+ +--------------+ +---------------+ | WHIP client |    | WHIP endpoint | | Media Server | | WHIP session  | +--+----------+    +---------+-----+ +------+-------+ +--------|------+    |                         |              |                  |    |                         |              |                  |    |HTTP POST (SDP Offer)    |              |                  |    +------------------------>+              |                  |    |201 Created (SDP answer) |              |                  |    +<------------------------+              |                  |    |          ICE REQUEST                   |                  |    +--------------------------------------->+                  |    |          ICE RESPONSE                  |                  |    |<---------------------------------------+                  |    |          DTLS SETUP                    |                  |    |<======================================>|                  |    |          RTP/RTCP FLOW                 |                  |    +<-------------------------------------->+                  |    | HTTP DELETE                                               |    +---------------------------------------------------------->+    | 200 OK                                                    |    <-----------------------------------------------------------x
  • WHIP 客户端:通过向 WHIP 服务端发送带有 SDP Offer 的 HTTP POST 来发起通信。
  • WHIP 服务端:响应包含 SDP answer的“201 Created”消息。
  • WHIP 客户端和媒体服务器:建立 ICE 和 DTLS 会话,用于 NAT 穿透和安全通信。
  • RTP/RTCP 流:建立实时传输协议和实时传输控制协议流,用于从 WHIP 客户端到媒体服务器的媒体传输,由 SRTP 加密保护。
  • WHIP 客户端:发送 HTTP DELETE 以终止 WHIP 会话。
  • WHIP 会话:响应“200 OK”以确认会话

3 ffmpeg webrtc模块编译

ffmpeg的编译过程对于小白是比较痛苦的。本节介绍如何编译ffmpeg,让其支持webrtc推流。

首先支持webrtc的推荐编码格式为: 

  • 视频: H264 baseline profile,需要编译x264
  • 音频: opus,需要编译libopus

同时需要支持openssl,因为https post是需要openssl。

最后需要whip muxer模块,大神winlin开发的webrtc推流模块。

3.1 x264编译

下载地址:

https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2

x264编译:

./configure --enable-shared --disable-as
mmake -j 2
make install

如果需要支持asm的,可以去下载yasm后再编译

3.2 libopus编译

下载地址:

https://opus-codec.org/downloads/

libopus编译:

./configure --enable-shared
make -j 2
make install

3.3 ffmpeg编译

源码地址:

git@github.com:ossrs/ffmpeg-webrtc.git
分支: patch/whip/v1

./configure中需要使能:

  • x264
  • libopus
  • openssl
  • whip-muxer

编译:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ && ./configure --disable-avdevice \
--disable-doc --disable-devices \
--enable-openssl --enable-muxer=whip \
--enable-libopus --enable-libx264 \
--enable-nonfree --enable-gpl \
--extra-ldflags="-lpthread -lssl -lcrypto" \
--disable-x86asm
make -j 2
make install

3.4 ffmpeg的webrtc推流

推流需要注意的:

  • H264的profileH264的profile必须是baseline profile。
  • 音频编码必须是opus,采样率48000,双通道
  • 推流地址这个根据webrtc sfu服务的类型来定,这里介绍srs的地址:
http://192.168.1.100:1985/rtc/v1/whip/?app=live&stream=livestream

其中ip为srs服务的对外地址,1985为srs的httpapi端口号。

“/rtc/v1/whip/”为http的路径名。

“app=live”和”stream=livestream”,表明在srs中webrtc推流后,自动转成rtmp时,rtmp的app为live,stream为livestream。

ffmpeg推流命令行:

ffmpeg -re -i source.flv \
-c:v libx264 -profile:v baseline \
-c:a libopus -ar 48000 -ac 2 -ab 32k \
-f whip "http://192.168.1.100:1985/rtc/v1/whip/?app=live&stream=livestream"

3.4.1 srs编译

srs是国内流媒体最牛逼的开源之一,它的易用性和文档完整性是业内最好的。

github地址:

https://github.com/ossrs/srs

编译与运行

./configure
make -j 2
./objs/srs -c conf/rtc2rtmp.conf

直接使用rtc2rtmp.conf,这个配置支持自动把rtc流转成rtmp.

在ffmpeg推流后:

ffmpeg -re -i source.flv \
-c:v libx264 -profile:v baseline \
-c:a libopus -ar 48000 -ac 2 -ab 32k \
-f whip "http://192.168.1.100:1985/rtc/v1/whip/?app=live&stream=livestream"

因为srs自动把rtc转成rtmp流,所以可以用vlc直接观看地址:

rtmp://192.168.1.100/live/livestream

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论