- live-player 使用rtmp拉回放流,状态码2103闪退问题?
live-player拉取rtmp回放片段流播放结束后,会报2103状态码,这种状态时我会主动调用LivePlayerContext.stop()停止播放。但是部分回放流会出现小程序闪退问题。 [图片] 必现(不是所有rtmp回放流必现。比如设备有10个回放文件,所有文件都有rtmp回放推流地址,并且每次去服务器请求都会更新推流地址,所有rtmp流播放完成都会出现状态码2103。但是大概有2,3个的rtmp地址会出现播放完成后小程序闪退,出现的这2,3个文件重新获取新的rtmp推流地址,一样会闪退。必然闪退,试过真机调试、预览、体验版,这几个回放文件获取到的rtmp流播放完后均出现必然闪退) 因为不是所有流均出现该问题,并且出现问题的流是必现的,所有怀疑不是调用代码问题,可能是第三方提供的流地址与微信小程序端不兼容问题。日志已上传,微信号lx_goodness,最后报错时间点:2022年1月10日4点50-5点之间。 以下代码片段为判断状态live-player的bindstatechange statechange(e) { console.log('live-player code:', e.detail.code, e.detail); const { code } = e.detail; let { videoLoadingStatus } = this.data switch (code) { case 2007: //启动loading videoLoadingStatus = 0; this.setData({ playVideo: true, videoLoadingStatus: 0, }) break case 2001: //连接服务器 videoLoadingStatus = 20 + Math.floor(Math.random() * 10 + 1) break case 2002: //已经连接 RTMP 服务器,开始拉流 videoLoadingStatus = 40 + Math.floor(Math.random() * 10 + 1) break case 2008: // 解码器启动 break; case 2009: //视频分辨率改动 break; case 2004: // 视频播放开始 videoLoadingStatus = 80 + Math.floor(Math.random() * 10 + 1) break case 2105: break case 2003: //网络接收到首个视频数据包(IDR) videoLoadingStatus = 100 this.setData({ playVideo: true }) this.autoHideControl() break case 2103: //网络断连, 已启动自动重连 this.handleStop() break case 3001: case 3002: case 3003: case 3005: // 播放失败 videoLoadingStatus = 100 this.checkNetWork() this.handleStop() this.setData({ showVideoControls: false, videoNetWorkError: true, videoLoadingStatus: 100, }); break case -2301: // 经多次重连抢救无效,更多重试请自行重启播放 videoLoadingStatus = 100; this.setData({ showVideoControls: false, videoNetWorkError: true, videoLoadingStatus: 100, }) break } this.setData({ videoLoadingStatus: videoLoadingStatus, playCode: code }) } 以下代码片段为获取播放地址、播放、停止相关方法 getPlayUrl(param) { var _this = this; wx.showLoading({ title: '加载中', }) app.authRequest({ url: 'camera/playback?deviceId=' + _this.properties.did + '&startTime=' + param.startTime + '&endTime=' + param.endTime, success: (res) => { wx.hideLoading() console.log('获取到的播放地址:', res); if (res.data.code == "200" && res.data.data && res.data.data.url) { const playUrl = res.data.data.url this.setData({ videoSrc: playUrl }) // 先停止 this.handleStop() // 开始播放 setTimeout(() => { _this.handlePlay() }, 100) } else { this.setData({ videoSrc: '' }) wx.showToast({ title: '播放失败,请稍后重试', icon: 'none' }) } }, fail: () => { wx.hideLoading() wx.showToast({ title: '网络异常!', icon: 'none' }) } }) }, handlePlay(callback) { console.log("handelPlay", this.data.playVideo, this.data.isHD); livePlayerContext.play({ success: () => { console.log("开始播放视频") this.setData({ showVideoControls: true, videoLoadingStatus: 1, videoNetWorkError: false, }) if (callback && typeof callback === "function") { callback(); } }, fail: (error) => { this.checkNetWork(); wx.showToast({ title: '网络异常', icon: 'none', }) console.log("开始播放失败"); this.setData({ videoNetWorkError: true, showVideoControls: false, videoLoadingStatus: 100, }) } }) }, handleStop(callback) { console.log("stop"); livePlayerContext.stop({ success: () => { this.setData({ playVideo: false, videoLoadingStatus: 0, panelStatus: 0, }) if (callback && typeof callback === "function") { callback() } }, fail: (error) => { console.log("停止播放失败") } }) }
2022-01-10 - 开发工具无法真机调试,可以预览?
手机型号:小米9 系统:miui 11.0.2稳定版 Android版本:10 微信版本 [图片] 电脑版本:win8.1 64位系统 开发者工具版本 [图片] 错误描述:真机调试无论是扫码还是自动,均无法连接。扫码方式一直等待连接,自动方式点击按钮后等待5秒左右自动恢复成按钮。手机端提示错误超时如下图。(预览可以正常使用。) [图片]
2019-11-15