18910140161

微信小程序推流拉流示例 使用本地搭建RTMP服务

顺晟科技

2021-06-16 10:51:46

1042

适用读者:

对微信小程序有基本了解。比如:小程序账号应用,常用组件,小程序开发工具

对nodejs有基本的了解。

童鞋对微信小程序的流媒体/实时音视频组件感兴趣。

对于容易连接的小鱼/家里的小鱼,感兴趣的童鞋是在声音网的微信小程序中实现的。

小程序实时音视频底层传输协议(TCP、UDP、QUIC)

如果你对以上不满意,这篇文章应该不适合你。

好了,正文开始了:

微信小程序提供了live-pusher和live-player两个组件,但由于官方文档过于简略,很多人很难上手。而且整合过程中出现了一些问题,微信官方也避免不回答。所以这篇文章会帮你解决这个问题。我写了一个开源的栗子放在Github里,方便你自己测试。

Github地址在这里,有详细的自述文件帮助你使用

该仓库中包含的内容

使用开源组件构建本地RTMP服务供小型程序使用

如何使用小程序直播推进器/直播播放器

使用网页播放小程序推送的视频流

关于腾讯云实时流媒体服务

步骤1:开源组件构建本地RTMP服务

命令行进入文件夹节点-媒体-服务器并执行

npm安装

节点index.js

默认情况下,该程序将在1935端口提供RTMP服务,在8000端口提供HTTP流服务

该程序使用第三方开源麻省理工学院协议组件节点-媒体-服务器

第二步:如何使用小程序直播推进器/直播播放器

开始之前需要在微信开放平台注册小程序开发账号,申请小程序界面实时音视频流权限。这一步很重要,没有这一步就无法进行后续的开发。

个人账户可以申请这样的接口权限。

小程序账户注册完成后,实时音视频流的权利被申请。

获取appid,使用微信开发者工具导入项目,选择客户端文件夹,然后点击实机调试,使用微信调试RTMP视频流。记住首先启动本地RTMP服务,并且在小程序页面上将提示IP地址配置。

第三步:使用网页播放小程序推送的视频流

前两步完成后,就可以在网页上测试小程序推送的视频流了。命令行进入网络客户端文件夹,然后命令行执行以下命令:

//如果您的npm已经全局安装了http-server,

http-server -p 8080

//否则

npm安装

npx http-server -p 8080

然后浏览器打开http://localhost:8080,根据网页的提示填写拉流的名称,然后点击开始按钮。如果不出意外,可以看到小程序推上来的视频流。

网页测试截图

总结:谈谈腾讯云实时流媒体服务

如果有同学关心如何使用腾讯云的实时流媒体服务,可以进入腾讯云申请直播服务。腾讯云有免费的20GB流量供大家测试使用。(结尾有链接)至于具体的使用方法,和上面的例子一样。可以从腾讯云网页获取推/拉地址进行测试。

如果你深入测试,你会发现腾讯云更快,因为腾讯云的RTMP服务是一个私有的UDP RTMP协议,传输层使用UDP协议可以控制实时视频中大约400ms的延迟。在实际测试过程中,发现腾讯云使用的传输层协议是谷歌的QUIC协议,这是一种基于UDP的传输层协议,提供了一套完整的拥塞控制方案。

我们自己搭建的RTMP服务是基于TCP传输的。测试的时候发现了宽带的情况。在良好的4G、5G下,基于TCP传输协议的实时视频延迟约为1秒。但当WIFI等网络波动较大时,会有2秒左右的延迟。

那么你想问,我们不能把RTMP的服务改成UDP传输吗?

不可能。在微信小程序环境下,只有腾讯云自己的RTMP服务可以使用UDP传输层协议,而其他企业和个人要么使用腾讯云的服务,要么使用自己的基于TCP的服务。

你说坑不坑,腾讯真的是坑!大家都知道实时音视频场景,UDP传输是更好的做法!你在捆绑自己的服务。

然后我在微信小程序环境下测试了其他家庭的产品:

基于传输控制协议的声学网络实时音视频传输

阿里巴巴云——基于TCP的实时音视频传输

基于TCP的百度云实时音视频传输

数据真实可靠,是我通过测试或者向他们的工程师询问了解到的。腾讯粑粑再一次依赖它

但其实使用TCP的实时视频服务也没那么差。在良好的4G情况下,

用户完全可以接受一秒钟的延迟。当然,如果老板接受不了,就用腾讯云。

我个人测试小玉易联产品使用腾讯云的直播服务。

那么微信小程序live-pusher能得到原始媒体数据流吗?

问这个问题的人基本都做过HTML5 webrtc相关的开发工作。的确,在HTML5中,Javascript具有通过浏览器的API获取原始媒体数据流的能力,然后开发者可以对原始数据流进行编码、转码、压缩、美颜等预处理。但是在小程序环境下,微信不允许!

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航