微信小程序直播live-player和live-pusher踩坑记录

2024-01-11 05:38

本文主要是介绍微信小程序直播live-player和live-pusher踩坑记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现一个直播小程序踩坑汇总记录

  • 踩坑点记录
    • 1、关于live-player
      • 1)live-player 全屏问题
      • 2)在全屏后的live-player上加视图,安卓机无法展示的问题
      • 3)解决live-player放在scroll-view上的问题
      • 4)live-player上下滑动漏出黑底问题
    • 2、关于live-pusher
      • 1)live-pusher上下滑动漏出黑底问题
      • 2)live-pusher 禁止使用摄像头问题
      • 3)live-pusher推流之后自动黑屏问题

最近做了一个微信小程序版的直播小程序,期间遇到了很多问题,在此汇总记录一下,希望可以帮助到你们

如何实现小程序中的live-player或live-pusher组件展现在scrollview上?

踩坑点记录

1、关于live-player

微信小程序对live-player的介绍如下:
官方文档

必须有相关类目的资质才可以使用<live-player><live-pusher>组件,这个问题就不多说了,这里可能遇到的问题是后续提交版本的时候有可能被拒,拒绝理由是不符合资质(其实已经成功提交过N个版本了),这里不用着急,去和审核人员交流一下就行,表明原因,这个时候一般会通过的。

在这个<live-player>组件上有不少坑,下面我会分别介绍一下这个组件上我遇到的问题

1)live-player 全屏问题

在官方文档这个页面,并没有介绍全屏的实现方式,只提了一下bindfullscreenchange这个全屏变化监听方法,当时自以为实现横屏观看的方式就是需要调整orientation参数,然后实现横竖屏观看……然后走了很长的弯路才发现原来实现全屏的方法是在API中:API官文地址

wxml live-player 组件写法:

<live-player src="{{item.url}}" mode="live" autoplay binderror="error" style="height:100%;width:100%;"bindfullscreenchange="fullscreenchangemethod" id="live-player-id" />

注意:重点是id="live-player-id" 这个属性,下一步要在js中根据这个id来获取到livePlayer的上下文,拿到这个上下文之后赋值给一个变量,然后就可以通过该变量来调用全屏和退出全屏方法,这是官方文档中就有的方法,不是很复杂。

(1)JS中创建 live-player 上下文 LivePlayerContext 对象。

let player = wx.createLivePlayerContext('live-player-id', this);

(2)通过(1)创建的LivePlayerContext来调用 全屏

player.requestFullScreen()

(3) 通过(1)创建的LivePlayerContext来调用 退出全屏

player.exitFullScreen()

因为orientation这个属性,在这个地方费了很大劲,因为需求不仅只有一个直播流(有多个流这个需求,是后面诸多问题的根本原因),有可能有好多直播流,当多个live-player都放在同一个页面,这个时候再去控制某个流去横竖屏,简直就是灾难,不过当使用了API之后,这个问题算是解决了。。。

2)在全屏后的live-player上加视图,安卓机无法展示的问题

直播全屏后,需要在界面上加些按钮,于是就想到了cover-view ,官方对此组件的介绍是:

a、覆盖在原生组件之上的文本视图。
b、可覆盖的原生组件包括 map、video、canvas、camera、live-player、live-pusher
c、只支持嵌套 cover-view、cover-image,可在 cover-view 中使用 button。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

cover-view可以覆盖到live_player上,这不就妥妥的嘛,正好第一节里有可以监听全屏变化的事件,只要设置一个标志,全屏时展示,非全屏时隐藏,正好可以实现,于是:

wxml 代码:

<live-player src="{{item.url}}" mode="live" autoplay binderror="error" style="height:100%;width:100%;" bindfullscreenchange="fullscreenchange" id="live-player-id" /><cover-view wx:if='{{showToolBtn}}' style="position:absolute;width:80rpx;height:80rpx;" bindtap="cancleFullScreen"><cover-image src="/resource/fullScreen.png"></cover-image>
</cover-view>

showToolBtn 变量是监听到全屏的时候设置为true,退出全屏置为false

iOS手机运行: 功能、界面都非常完美
安卓手机运行:无法展示,cover-view 上的所有东西都出不来

错误原因:没有采用末尾标签</live-player>进行嵌套

正确代码:

<live-player src="{{item.url}}" mode="live" autoplay binderror="error" style="height:100%;width:100%;" bindfullscreenchange="fullscreenchange" id="live-player-id"><cover-view wx:if='{{showToolBtn}}' style="position:absolute;width:80rpx;height:80rpx;" bindtap="cancleFullScreen"><cover-image src="/resource/fullScreen.png"></cover-image></cover-view>
</live-player>

解决思路来源:来源

此时运行,就能适配安卓手机了,perfect…

3)解决live-player放在scroll-view上的问题

前面提到过,因为需求是可能会有多个直播流,而且是未知个数,所以就需要用可以滑动的方式去摆放N多个live-player,此时,自然而然的就想到了scroll-view,用scroll-view去放,不就可以滑动了嘛~
但是:看官文介绍
在这里插入图片描述
尴尬…如果我没记错的话,这里应该写着<live-player><live-pusher>同样不支持嵌套,结果我写这篇文章的时候再去看就更新了 ???……
但是当时我看的是scroll-view 不支持嵌套,我的做法是先放到view上,然后scroll-view再嵌套view,这样就能加载出来,并且可以滑动了

4)live-player上下滑动漏出黑底问题

在这个地方我遇到的问题是在scroll-view上渲染live-player,某些情况下(一般是推流设备进行过横竖屏转换之后)live-player可以上下滑动,有视频画面的地方滑上去之后露出黑色的一部分,初始我以为是scroll-view上放置live-player的原因,后来查资料发现不放在scroll-view上也会出现这个问题。
网上百度资料没有找到相关解决办法,官方论坛有一篇文章,但是官方没有给出答复

后面我的解决办法是禁止<live-player>滑动手势,一般需求下,应该是没问题的,但是我的需求是有多个<live-player>的时候可以滑动,加上这个属性之后,就没法左右滑动了,所以这个办法在我的需求中不太实用,现在这个问题还在寻找解决办法中

记:有文章说,可以在live-player上面覆盖一层透明的cover-view,不让用户扒拉就行了,不失为一种办法,但个人感觉不太好,所以暂时不采纳,有想看的老铁可以看这里:博文

代码示例:

//加上catchtouchmove就相当于阻止了滑动手势,但是点击手势是不受影响的
<live-player catchtouchmove style="width:70px;height:100px;" />

2、关于live-pusher

1)live-pusher上下滑动漏出黑底问题

同第4条的<live-player>可滑动问题,一般情况下,一台设备只能同时有一个<live-pusher>,所以他不存在左右滑动的需求,可以加上此属性,禁止滑动

<live-pusher catchtouchmove style="width:70px;height:100px;" />

2)live-pusher 禁止使用摄像头问题

有些时候推流的时候不需要推画面,只需要推声音,这个时候可以直接设置live-pusher中的enable-camera属性,千万不要设置隐藏live-pusher,隐藏之后会造成推流无效问题,因为推流的组件都让你干掉了,它还怎么推……😂

如果无效,请仔细检查代码:
enable :bool类型

<live-pusher enable-camera="{{enable}}" />

3)live-pusher推流之后自动黑屏问题

这个问题我没遇到过,但是搜资料的时候发现好多人出现了这个问题,而且没有正儿八经的解决答案,只遇到了一个说已经解决了,但没贴出解决办法,本人正积极联系当事人,争取获得解决方案,后续会更新文章

这篇关于微信小程序直播live-player和live-pusher踩坑记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593328

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho