基于HLS-TS&RTMP-FLV的微信小程序点直播方案

27 篇文章 35 订阅
订阅专栏

​问题背景:

视频监控不仅仅要上云,还要支持多端播放,这一块在移动端APP和PC端难度不大,只要能实现一个简单的播放器引擎内核,然后交叉编译为不同端的SDK就可以。随着移动互联网的发展,特别是微信生态的完善。很多客户都在做轻量的微信小程序,所以支持在网页、微信小程序的点直播就很有必要了。

 

在微信小程序上实现视频点直播,好处是不用装APP,随时随地能打开,便于分享,也容易和公众号等其它功能打通。但是技术这块,浏览器上支持的音视频底层能力还很弱,更不用说微信小程序了。因为不仅仅要考虑视频编码类型,视频延时,首屏等常见问题,还有很多一些底层接口的限制,也许你在APP上播放啥问题都没有,但是挪到微信小程序播放问题就很多,这需要服务端和前端一起配合兼容才能实现比较好的落地效果。

 

可以关注个人公众号和微信进行交流学习:

                                       

 


解决方案:

1. 前端直播方案

为了在微信小程序上播放视频,我们调研了一下微信小程序的媒体组件,文档接口见

https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html

发现关于视频这块主要是live-player和live-pusher组件,其中live-player组件主要支持rtmp和flv拉流方式,推流live-pusher组件主要支持rtmp推流,所以直播我们选用live-player组件,选用rtmp-flv分发协议,目的是为了降低延时,一般的rtmp延时能控制在1-3秒左右,基本可以满足使用视频监控中的场景要求。

2. 前端点播方案

点播不关心延时,采用H5中video标签对hls-ts的支持即可,因为HLS兼容性很好,在PC端、Ios和Android,支持都非常友好,也是目前唯一跨平台支持比较好的拉流协议,美中不足就是直播延时比较大,延时大的原因是因为这套协议本质采用了小文件片段的分发方式,一个小文件片段基本在2秒左右,这样HLS延时一般下来都在10s+,做的好的也在5s+,综合来看HLS作为直播分发协议不太合理(除非直播时不关心延时),但是用来做点播还是非常好的,省很多兼容处理的工作量。

3. 服务端方案

服务端一般都要支持多协议多客户端的分发,这里画个示意图来说明下服务端的简单架构,hls-ts点播部分我们采用了自研形式,rtmp-flv采用了开源流媒体SRS和一些配套服务即可。

 

模块说明:

1. Open API,提供一些Restful API接口,允许用户通过该接口创建点直播任务,获取HLS拉流和RTMP拉流URL,任务一旦创建后就唤醒设备,设备通过私有协议或者国标协议,将码流推到平台侧;

2. GB GateWay,国标网关,第三方IPC或者平台主要通过该网关收流和对接,其中对接协议主要采用监控协议GB28181协议;

3. StreamProxy,流媒体代理,则主要完成私有码流到标准码流的转换工作,其中包含音频G711到AAC的转码,或者H.265到H.264的转码工作等;

4. SRS,主要用来接收StreamProxy的推流和允许用户侧的微信小程序过来拉流,实现RTMP-FLV的分发;

5. HLSTS,则通过私有协议从StreamProxy拉流,进行HLSTS切片,同时以HLS协议分发给微信小程序或者浏览器;

 


实践遇到的坑:

问题1:安卓微信小程序每次点播云存储视频看回放时,只能看10几秒的视频,然后又继续从头开始播放,不会从上次播放位置进行播放;

问题原因:创建点播任务时,服务端Open API会返回一个拉流会话ID,服务端就是通过这个拉流会话来确定当前客户端的播放进度的,如果后续请求的拉流会话ID总是变化,服务端就觉得这是新的拉流,就会重新切片重新分发导致客户端每次只能播放3个ts的视频,然后就从头开始继续播放导致点播视频不能连续持续播放;

解决方案:客户端拉流时,主要在HTTP的头里面把服务端第一次返回的拉流会话ID号固定下来即可,如下图所示:

 

 


问题2:小程序利用RTMP直播时,没有办法听声音,当前画面只有视频无声音;

问题原因:由于国标网关接的第三方国标设备音频大部分都是采用的G711.a的编码方式,而微信小程序live-player组件只支持AAC音频,所以导致解码音频失败;

解决方案:StreamProxy代理服务在从国标网关GB GateWay拉流后,需要做一次音频转码动作,需要将音频g711.a的音频转码为AAC的,这里转码库我们采用开源的fffmpeg转码;

 


问题3:小程序利用HLS回放时,跳秒严重,播放的TS文件不能连续播放;

问题原因:经过分析后发现微信小程序对TS文件的时间戳要求比较严格,各个文件的时间戳要连续单调递增,不能忽大忽小,这种时间戳打的不规范都有可能导致跳秒现象出现;

解决方案:代理在同一路拉流会话中,各个TS文件的时间戳要严格按照采样和帧率打时间戳,保证各个TS文件的时间戳要单调递增,不能出现跳变情况,特别对于TS文件末尾和下一个文件的开头部分时间戳情况;

 


问题4:小程序利用RTMP直播时,音画不同步,声音滞后于视频1秒左右;

问题原因:采用音频转码方案后,肯定有一定的延时,这时从国标ps流转为flv流后,需要注意时间戳的填写,这里主要是一帧g711.a的音频时间戳增量和一帧aac的时间戳增量不一样,我们要完成时间基的转换操作;

解决方案:转码后要对音频时间戳在服务端处理好,注意采样率、时间基的转换动作,有些转码器允许将原始时间戳带进去,然后填写好采样率,吐出来的码流就回调出新编码格式的时间戳,有些转码器认为时间戳跟转码本身没关系,需要上层业务做好时间戳的转换操作;

 


问题5:小程序利用RTMP直播时,视频没出来黑屏状态,先听到音频;

问题原因:这个主要是开源方案SRS服务端的配置问题,为了减小首屏时间,服务端可以不缓存GOP,这样客户端拉流过去的视频可能第一帧不是IDR帧导致解码失败,所以先听到声音没有出现画面,其实服务端只要缓存GOP即可,保证客户端拉流时,第一帧总是IDR帧即可;

解决方案:服务端缓存GOP,保证分发第一帧为IDR帧,但同时要注意服务端GOP队列长度对延时的影响;

 


问题6:小程序利用RTMP直播和HLS点播时,如何做防盗链?

解决方案:为了保证拉流URl的时效性和对客户端身份的校验,OpenAPI在客户创建拉流会话任务时一般都会在返回的拉流URL里面填上token信息,然后客户端拉流时,我们利用HTTP 回调机制,统一到Open API做身份鉴权,鉴权通过则允许拉流,鉴权失败则返回失败,不允许客户端下行拉流,当然也可以对一些IP开白名单;

 


问题7:直播播放时,经常卡顿,转圈不能流畅播放;

问题原因:由于下行网络等原因或者设备推流原因,导致客户端在播放视频时,暂时没有解码数据导致,为了解决卡顿问题我们可以在播放器端设置播放缓存空间的大小,当下行网络抖动时,可以利用缓存解决卡顿问题,同时live-player接口给了回调状态码可以观察卡顿情况;

解决方案:

1. 将客户端播放器组件的live-player组件的播放缓存加大,当然服务端也可以加点GOP缓存应对设备端推流网络问题,但是带来的负面效应就是延时会稍微加大,不能设置过大过小;

2. 也可以调整推流端的上行码率来解决,一般的摄像头都支持自动码率,也可以改变有些设备的编码参数来调整,比如帧率,分辨率,I帧间隔等,服务端可以做一定的丢帧处理也可以应对下行网络差的问题;

 

 

 


问题8:对接过程出现问题时,怎么定位问题和排查思路是什么?

解决方案:

1. 以前写过一篇文章,讲过排查问题思路可参照,基本就是根据客户端的回调信息或者系统错误,进行分段排查、不同服务端写码流文件、抓包以及做对比试验;

2. 排查播放器的问题,可以用同样的URl在其它端进行播放,比如VLC,ffplayer和flash,其它端播放没问题基本就是前端小程序的问题;

3. 其它播放器有问题,根据回调状态错误码,进行服务端抓包以及服务端写文件形式排查,基本可以将问题定位到哪一个模块上;

4. 服务端加调试日志等进行进一步大判断和分析,用专业工具分析写下来的码流,排查问题是时间戳问题,还是编解码问题还是服务自己内部处理问题;

 


Demo代码:

基于微信小程序Live-player组件,这个要绑定微信开发者账号,最后上架要提交前端代码审核才可以发布小程序:

基于H5的Video标签形式,这个也可以直接在PC的相关插件上调试:

 


最终效果:

上面代码只是为了验证下服务端功能,前端我们除了点直播,还增加了随机拖动,花式播放、缩略图和timeline等功能。

Rtmp直播:

HLS点播:

 


本文总结:

本文主要讲了下基于微信小程序的点直播方案,其中点播基于H5 Video标签用了HLS-TS方案,直播基于微信live-player媒体组件用了RTMP-FLV方案。同时给了服务端方案示意和前端Demo示例代码。对接过程中也有很多细小问题,本文例举了典型的7个问题并一一给出了这些问题的解决方案,当然还有很多细小问题你可以后台继续咨询我,相互交流学习。


往期文章回顾:

视频编解码之H.264介绍

一图看懂音视频核心技术栈(框架、工具和场景))

国产开源流媒体SRS4.0对视频监控GB28181的支持

从方块效应&呼吸效应看编码量化参数对流控的作用

家庭消费类摄像头选择攻略和隐私保护小建议

音视频封装小总结(PS TS 和FLV)

SDP在RTSP、国标GB28181、WebRTC中的实践

视频监控摄像头的互联网化实践思路

在HTML5上开发音视频应用的五种思路

周末活动回顾:视频质量主观评价、实时RTC和AV1

音视频封装:MP4结构概述和分析工具

音视频解封装:MP4核心Box详解及H264&AAC打包方案

音视频基础知识-时间戳的理解

音视频封装格式:AAC音频基础和ADTS打包方案详解

从人类的第一次直播聊聊视频监控行业

音视频压缩:H264码流层次结构和NALU详解

音视频传输:RTP协议详解和H.264打包方案

音视频常见问题分析和解决:延时和抖动

 

 


今天就说这么多,祝您工作顺利!

个人转载内容至朋友圈和群聊天,无需特别申请版权许可。

引用转载该订阅号文章,注明文章来源即可。

                                                                                                                                    

微信小程序开发中的视频播放和直播功能
吃不胖.
04-28 453
通过以上的代码案例,我们可以实现在微信小程序中实现视频播放和直播功能。希望以上内容对你有所帮助。在本文中,我将提供一个详细的代码案例来演示如何在微信小程序中实现视频播放和直播功能。在video目录下的index.js文件中,实现击视频列表项后能够进行视频播放的逻辑。在video目录下的index.wxml文件中,定义一个视频列表,并绑定击事件。在video目录下的live.wxss文件中,定义视频直播区域和控制按钮的样式。在video目录下的live.js文件中,实现视频直播的相关逻辑。
一个可以播放.flv文件的小程序
08-05
一个可以播放flv文件的c++语言的小程序 主要技术: 1.mfc框架 2.调用Flash控件
vue和小程序上实现HLS直播流视频
最新发布
weixin_39170410的博客
12-30 758
js 中,请求到视频 url,链接一般是 .m3u8结尾的数据,直接复制给liveVideoUrl。在 引入video 页面引入。
视频监控/视频汇聚/视频云存储EasyCVR平台HLS流集成在小程序无法播放的问题排查
EasyCVR视频融合云平台的技术博客
08-29 454
如果在VLC无法播放,则需要排查视频的编码是否是H.265。
uniApp 实现微信小程序和app视频播放flv格式视频监控
风花一世月
05-08 6780
测试要在真机测试,微信开发者工具不能测试 video 支持 App平台: 支持本地视频(mp4/flv)、网络视频地址(mp4/flv/m3u8)及流媒体(rtmp/hls/rtsp)。 小程序: live-player 支持 app不支持 百度小程序支持 m3u8 格式;微信小程序支持 flv, rtmp 格式 所以决定微信小程序使用liveplayer,app中使用...
使用微信小程序播放视频直播
haming123的专栏
09-25 5180
介绍如何使用微信小程序的live-player组件进行视频直播的播放
基于HLS&&RTMP微信小程序直播方案1
08-08
问题背景:视频监控不仅仅要上云,还要支持多端播放,这一块在移动端APP和PC端难度是不大的,只要能实现一个简单的播放器内核引擎,然后交叉编译为不同端的SDK就可
mp4-flv-RTP-HLS-RTMP桌面直播演示程序V2(基于ffmpeg)方案资料
06-10
mp4-flv-RTP-HLS-RTMP桌面直播演示程序V2(基于ffmpeg)方案资料
nginx直播http-flv+hls+rtmp演示.zip
06-11
网上很多文章都是介绍nginx的源码编译,但是首先我得看到效果啊 1、解压到目录,比如D:\nginx2、运行服务器软件: 双击...http-flv:VLC或者打开rtmp播放器,输入地址.(浏览器不支持苹果) HLS:苹果浏览器打开m3u8地址
nginx-rtmp-module:为rtmp flvhls添加hevc(增加支持H265)
02-05
nginx-rtmp-module:为rtmp flvhls添加hevc(增加支持H265)
hls-ts-js:Javascript中的HLS MPEG-TS解析器库
05-06
解析Apple HLS MPEG传输流段的Javascript库 用法(Node JS) npm install --save hls-ts 该库实现Writable流接口并充当“接收器”。 例如,要下载并解析HLS MPEG传输流段: const request = require("request"); ...
小程序击图片实现自动播放视频
10-17
主要为大家详细介绍了小程序击图片实现自动播放视频,停止上一个视频播放,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
rtmp2flv rtmp直播转httpflv
09-29
rtmp2flv. rtmp直播流转httpflvrtmp2flv. rtmp
nginx+rtmp+http-flv
06-03
基于nginx-1.8.1+nginx-rtmp-module的基础上增加以下功能: 1.http-flv流,默认缓冲最后一个关键帧。 经测试与rtmp拉流延时相差一帧; rtmp的拉时延时在600--800ms之间; 外网在1200ms左右; 2.HLS增加token认证及session管理 3.完善relay模块 利用relay模块,搭建边缘,源集群
基于Rtmp协议的流媒体直播 Demo
06-19
此为示例代码,详细讲解请参考:http://blog.csdn.net/u012604745/article/details/73466204
video标签播放m3u8视频流需要的hls.js文件
10-23
video标签播放m3u8格式视频流需要的hls.js文件,video标签播放m3u8格式视频流完整代码可在本人博客中查看
原生微信小程序播放rtmp
qq_34955596的博客
06-24 2197
原生微信小程序播放rtmp
小程序实现RTMP/HLS协议直播监控视频实时播放实现步骤
数组嵌套对象数组遍历方法
07-16 7948
小程序实现监控视频实时播放步骤 简述:使用小程序live-player组件实现视频播放,暂只针对国内主体特定类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。 一.添加小程序相关服务类目(审核通过即可使用小程序live-player组件 以下类目可使用小程序live-player组件) 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html 二.
RTMPflv分析
TanZL的博客
08-21 629
RTMP是一种基于flv文件格式的流媒体格式;FLVSignature3ByteFLV签名,固定"F","L","V"(0x46,0x4c,0x56)Version1ByteFLV版本,目前固定为0x01TypeFlag1Byte数据类型,前5bit为保留位,必须为0;第6位表示是否存在音频tag;第7位为保留位,必须为0;第8为表示是否存在视频tagDataOffSet4ByteFLV Header的大小,当前为9Body4Byte前一个tag的长度,第一个tag则为0。
http-FLv/RTMP/HLS
09-16
HTTP-FLV是一种通过HTTP协议传输的流媒体数据格式,它将流媒体数据封装成FLV格式。...HLS协议在延迟和适配性方面相对于HTTP-FLVRTMP有一定的优势,但是对于实时性要求非常高的场景,HLS的延迟可能会较高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 国产开源流媒体SRS4.0对视频监控GB28181的支持 19987
  • 基于HLS-TS&RTMP-FLV的微信小程序点直播方案 4332
  • HLS+FMP4方案对H.265+AAC支持要点 4246
  • 一图看懂音视频核心技术栈(框架、工具和场景) 3710
  • 音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查 3583

分类专栏

  • 音视频开发 27篇
  • 流媒体开发 4篇
  • 工具使用 1篇
  • 音视频IOT

最新评论

  • 国产开源流媒体SRS4.0对视频监控GB28181的支持

    Uchiha-obito: 博主。我的摄像头发送注册请求,然后srs回复 Destination unreachable (Port unreachable)是为什么啊,5060端口是开放的啊,我也没开防火墙。我换了一个端口还是这个错误,怎么解决啊。。。。

  • 基于HLS-TS&RTMP-FLV的微信小程序点直播方案

    mio!!: 博主,您好,请问StreamProxy将G711a音频用ffmpeg转为AAC音频,是用的文件流作为输入输出吗?表情包

  • 音视频封装:MPTG2-TS 媒体封装实例解析和说明

    qq_41280207: section_length表示的长度应该是不包括该字段在内到CRC的字段长度

  • HLS+FMP4方案对H.265+AAC支持要点

    superxxd: Github上有

  • 国产开源流媒体SRS4.0对视频监控GB28181的支持

    xu19970312: 注意 5061防火墙开启的是udp

大家在看

  • 基于cpolar的macOS的内网穿透 102

最新文章

  • 2021上海LVS音视频大会观感和思考
  • 新型开源语音编码器Lyra最新进展
  • 手把手搭建WebRTC测试环境,实现1对1视频通话
2021年2篇
2020年12篇
2019年15篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司滁州网站推广系统揭阳模板网站建设坪地外贸网站建设公司通辽品牌网站设计报价辽源百度竞价多少钱荆州网站推广系统价格安康网站推广方案公司邵阳百度seo哪家好金华网站推广系统多少钱锦州外贸网站建设推荐沙井百度竞价报价宝安推广网站吴忠关键词排名多少钱安阳网站推广系统价格蚌埠网站关键词优化公司福州至尊标王多少钱蚌埠网站优化软件价格张掖英文网站建设报价双龙SEO按天收费推荐萍乡百度标王报价石家庄网站排名优化推荐上饶SEO按效果付费公司拉萨关键词按天计费多少钱怒江关键词按天收费推荐清远企业网站设计昭通网站推广系统推荐大连关键词排名报价临汾优化新余seo网站推广推荐罗湖SEO按效果付费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化