微信小程序 RTMP 音视频 通话 ffmpeg_WebRTC与微信小程序音视频互通方案设计与实现...

本文主要介绍了如何在不大幅改动WebRTC端代码的情况下,实现基于WebRTC的实时音视频通话与微信小程序的互通。通过WebRTC Gateway和Streaming Server,将WebRTC的RTP&RTCP流与微信小程序的RTMP流进行转换和中继,支持主叫和被叫两端的互通。详细探讨了会话建立过程和媒体流交换方案,以及针对时延和首帧优化的策略。目前该方案已成功落地,提供稳定音视频通话能力。
摘要由CSDN通过智能技术生成

背景

在之前的WebRTC实时音视频通话之语音通话设计与实践中介绍了58 TEG部门基于 WebRTC 的实时音视频通话解决方案。

考虑到腾讯微信的小程序平台提供了音视频通话与直播的支持,如果能打通基于 WebRTC 的实时音视频通话与微信小程序,就能够极大地扩展音视频直播的能力范围,为业务线的产品和服务提供更多更好的选择。

本文主要介绍打通 WebRTC 端和微信小程序端的音视频互通方案,实现在尽量不需要改动 WebRTC 端代码的情况下,添加对主叫和被叫微信小程序端的支持。

基于 WebRTC 的实时音视频方案

58 已搭建了成熟的基于 WebRTC 的实时音视频方案,能够有效地支持多端(iOS/Android/Web)之间的音视频会话。其通过后端的 Room Server 服务来管理会话;某端需要发起音视频会话,首先需要到 Room Server 中注册一个房间,之后基于房间来进行信令的交互;主叫端和被叫端的音视频数据传输通过 PeerConnection 进行。

WebRTC 端的媒体流方案是采用标准的 RTP[1] 和 RTCP[2] 协议。

微信小程序的音视频支持

微信的小程序对外开放了音视频直播[3] 的能力,使用方可以通过 live-pusher 标签实现基于 RTMP[4] 的音视频推流(录制),live-player 标签实现基于 RTMP 的音视频拉流(播放)。

- 微信 App iOS 最低版本要求:6.5.21

- 微信 App Android 最低版本要求:6.5.19

- 小程序基础库最低版本要求:1.7.0

微信小程序的音视频方案是基于 RMTP 流媒体协议的。

互通方案

总体架构

方案的总体架构如下:

71b054586b8805dbe57b2595905f54c7.png
  1. WebRTC Gateway 作为一个特殊的 WebRTC 端与指定的另一个 WebRTC 端通过 Room Server 交换信令并建立会话
  2. 会话建立后,WebRTC 端与 WebRTC Gateway 直接(P2P)或间接(TURN)交换音视频流
  3. WebRTC Gateway 将 WebRTC 端之音视频流经 Streaming Server 转发至微信小程序端;微信小程序音视频输入流经 Streaming Server 转发至WebRtc 端

其中,WebRTC Gateway 使用成熟的服务来搭建࿰

根据提供的引用内容,我们可以得知微信小程序开发播放flv视频需要经过以下步骤: 1.使用ffmpeg拉取海康摄像头的rtsp流,然后推到nginx rtmp模块下监听的1935端口的/live下面。 2.推到nginx装的http-flv模块,将ffmpeg转换过来的flv流转换成flv格式视频。 3.在微信小程序中使用live-player组件播放flv视频。 下面是具体的步骤: 1.使用ffmpeg拉取海康摄像头的rtsp流,然后推到nginx rtmp模块下监听的1935端口的/live下面。具体命令如下: ```shell ffmpeg -i rtsp://username:password@ip:port/h264/ch1/main/av_stream -c copy -f flv rtmp://localhost:1935/live/stream ``` 其中,rtsp://username:password@ip:port/h264/ch1/main/av_stream是海康摄像头的rtsp流地址,rtmp://localhost:1935/live/stream是nginx rtmp模块的推流地址。 2.推到nginx装的http-flv模块,将ffmpeg转换过来的flv流转换成flv格式视频。具体配置如下: ```nginx rtmp { server { listen 1935; application live { live on; # 将flv流转换成flv格式视频 exec ffmpeg -i rtmp://localhost:1935/live/$name -c:v libx264 -c:a aac -f flv http://localhost:8080/hls/$name.flv; } } } http { server { listen 8080; location /hls { # 将flv格式视频转换成http-flv流 flv; root /usr/local/nginx/html; } } } ``` 其中,rtmp模块监听1935端口,将推流地址为rtmp://localhost:1935/live/stream的流推到名为live的应用下。live应用中的exec指令将推流地址为rtmp://localhost:1935/live/$name的流转换成flv格式视频,并推送到http://localhost:8080/hls/$name.flv。http模块监听8080端口,将请求/hls/xxx.flv的http请求转换成http-flv流。 3.在微信小程序中使用live-player组件播放flv视频。具体代码如下: ```html <live-player src="http://localhost:8080/hls/stream.flv"></live-player> ``` 其中,src属性为http-flv流地址,即http://localhost:8080/hls/stream.flv。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值