@@ -146,18 +146,51 @@ Component({
146
146
// 经历了 5001 浮窗关闭事件,小程序底层会自动退房,恢复小程序时组件需要重新进房
147
147
// 重新进房
148
148
this . enterRoom ( { roomID : this . data . config . roomID } ) . then ( ( ) => {
149
- setTimeout ( ( ) => {
150
- this . publishLocalVideo ( )
151
- this . publishLocalAudio ( )
152
- } , 2000 )
153
149
// 进房后开始推送视频或音频
150
+ // setTimeout(()=>{
151
+ // this.publishLocalVideo()
152
+ // this.publishLocalAudio()
153
+ // }, 2000)
154
154
} )
155
+ } else if ( ENV . IS_ANDROID && this . status . pageLife === 'hide' && this . status . isOnHideAddStream && this . data . streamList . length > 0 ) {
156
+ // 微信没有提供明确的最小化事件,onHide事件,不一定是最小化
157
+ // 获取所有的player 清空 src 重新赋值 验证无效
158
+ // 清空 visibleStreamList 重新赋值, 验证无效
159
+ // 退房重新进房,有效但是成本比较高
160
+
161
+ // 将标记了 isOnHideAdd 的 stream 的 palyer 销毁并重新渲染
162
+ const streamList = this . data . streamList
163
+ let tempStreamList = [ ]
164
+ // 过滤 onHide 时新增的 stream
165
+ for ( let i = 0 ; i < streamList . length ; i ++ ) {
166
+ if ( streamList [ i ] . isOnHideAdd && streamList [ i ] . playerContext ) {
167
+ const stream = streamList [ i ]
168
+ tempStreamList . push ( stream )
169
+ stream . playerContext = undefined
170
+ streamList . splice ( i , 1 )
171
+ }
172
+ }
173
+ // 设置渲染,销毁onHide 时新增的 player
174
+ this . _setList ( {
175
+ streamList : streamList ,
176
+ } ) . then ( ( ) => {
177
+ for ( let i = 0 ; i < tempStreamList . length ; i ++ ) {
178
+ streamList . push ( tempStreamList [ i ] )
179
+ }
180
+ // 设置渲染,重新创建 onHide 时新增的 player
181
+ // setTimeout(()=>{
182
+ this . _setList ( {
183
+ streamList : streamList ,
184
+ } ) . then ( ( ) => {
185
+ for ( let i = 0 ; i < tempStreamList . length ; i ++ ) {
186
+ tempStreamList [ i ] = wx . createLivePlayerContext ( tempStreamList [ i ] . streamID , this )
187
+ }
188
+ tempStreamList = [ ]
189
+ } )
190
+ // }, 500)
191
+ } )
192
+ this . status . isOnHideAddStream = false
155
193
}
156
- // if (this.status.isPush) {
157
- // // 小程序hide - show 有一定概率本地黑屏或静止,远端正常,或者远端和本地同时黑屏或静止,需要手动启动预览,非必现
158
- // this.data.pusher.getPusherContext().startPreview()
159
- // this.data.pusher.getPusherContext().resume()
160
- // }
161
194
this . status . pageLife = 'show'
162
195
} ,
163
196
hide : function ( ) {
@@ -193,6 +226,7 @@ Component({
193
226
isPush : false , // 推流状态
194
227
isPending : false , // 挂起状态,触发5000事件标记为true,onShow后标记为false
195
228
pageLife : '' , // 页面生命周期 hide, show
229
+ isOnHideAddStream : false , // onHide后有新增Stream
196
230
}
197
231
this . _lastTapTime = 0 // 点击时间戳 用于判断双击事件
198
232
this . _beforeLastTapTime = 0 // 点击时间戳 用于判断双击事件
@@ -1035,7 +1069,7 @@ Component({
1035
1069
rtcConfig . userDefineRecordID = rtcConfig . userDefineRecordID || '' // 指定录制文件的recordid
1036
1070
rtcConfig . privateMapKey = rtcConfig . privateMapKey || '' // 字符串房间号
1037
1071
rtcConfig . pureAudioMode = rtcConfig . pureAudioMode || '' // 指定是否纯音频推流及录制,默认不填,值为1 或 2,其他值非法不处理
1038
- rtcConfig . recvMode = rtcConfig . recvMode || 3 // 1. 自动接收音视频 2. 仅自动接收音频 3. 仅自动接收视频 4. 音视频都不自动接收, 不能绑定player
1072
+ rtcConfig . recvMode = rtcConfig . recvMode || 1 // 1. 自动接收音视频 2. 仅自动接收音频 3. 仅自动接收视频 4. 音视频都不自动接收, 不能绑定player
1039
1073
let roomID = ''
1040
1074
if ( / ^ \d + $ / . test ( rtcConfig . roomID ) ) {
1041
1075
// 数字房间号
@@ -1215,6 +1249,11 @@ Component({
1215
1249
this . userController . on ( EVENT . REMOTE_VIDEO_ADD , ( event ) => {
1216
1250
console . log ( TAG_NAME , '远端视频可用' , event , event . data . stream . userID )
1217
1251
const stream = event . data . stream
1252
+ // 如果Android onHide 时,新增的player 无法播放 记录标识位
1253
+ if ( this . status . pageLife === 'hide' ) {
1254
+ this . status . isOnHideAddStream = true
1255
+ stream . isOnHideAdd = true
1256
+ }
1218
1257
this . _setList ( {
1219
1258
userList : event . data . userList ,
1220
1259
streamList : event . data . streamList ,
0 commit comments