Skip to content

Commit 36656ea

Browse files
committed
修复全屏与多分屏模式切换bug
修复全屏与多分屏模式切换bug
1 parent 3aa0090 commit 36656ea

File tree

3 files changed

+57
-22
lines changed

3 files changed

+57
-22
lines changed

OnLive/src/main/java/com/frank/living/activity/MultiScreenActivity.java

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class MultiScreenActivity extends AppCompatActivity{
4545
private boolean isMultiScreen;
4646
//保存客户端ip与通道数对应关系
4747
private HashMap<String, Integer> clientMap = new HashMap<>();
48-
//保存是否投屏与通道数对应关系
48+
//记录每个通道的投屏状态
4949
private TreeMap<Integer, Boolean> channelMap = new TreeMap<>();
5050

5151
private String url = "";
@@ -180,8 +180,6 @@ private void setOptions(IjkMediaPlayer ijkPlayer){
180180
//设置播放前的最大探测时间,分析码流时长:默认1024*1000
181181
ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzedmaxduration", 100);
182182
//ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");//tcp传输数据
183-
// 音视频同步基线,0-音频为基准,1-视频为基准,3-系统时间戳为基准
184-
ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "av_sync_type", 0);
185183
}
186184

187185
/**
@@ -226,14 +224,14 @@ public void onReceive(Context context, Intent intent) {
226224
removeClient(target);
227225
clientMap.remove(ipAddress);
228226
channelMap.put(target, false);
229-
//TODO:多屏变为单屏时,自动切换为全屏
230-
// if (num == 1){
231-
// int castingChannel = getCastingChannel();
232-
// enterFullScreen(castingChannel);
233-
// }
227+
//多屏变为单屏时,自动切换为全屏
228+
if (num == 1){
229+
int castingChannel = getCastingChannel();
230+
enterFullScreen(castingChannel);
231+
}
234232
}
235233
break;
236-
case Constants.ACTION_CLIENT_ADD://新增投屏
234+
case Constants.ACTION_CLIENT_ADD://增加投屏
237235
int clientNum = intent.getIntExtra("clientNum", 0);
238236
String otherUrl = intent.getStringExtra("url");
239237
String ipAddress = intent.getStringExtra("ip");
@@ -242,7 +240,7 @@ public void onReceive(Context context, Intent intent) {
242240
clientMap.put(ipAddress, channel);
243241
channelMap.put(channel, true);
244242
addClient(channel, otherUrl);
245-
//TODO:单屏变为两路投屏时,自动切换为多屏模式
243+
//单屏变为两路投屏时,自动切换为多屏模式
246244
if (clientNum == 2){
247245
exitFullScreen();
248246
}
@@ -363,24 +361,44 @@ private void enterFullScreen(int channel){
363361
hideDivider();
364362
switch (channel){
365363
case 1:
364+
mVideoView1.setRenderViewVisible();
365+
mVideoView2.setRenderViewGone();
366+
mVideoView3.setRenderViewGone();
367+
mVideoView4.setRenderViewGone();
368+
366369
mVideoView1.setVisibility(View.VISIBLE);
367370
mVideoView2.setVisibility(View.GONE);
368371
mVideoView3.setVisibility(View.GONE);
369372
mVideoView4.setVisibility(View.GONE);
370373
break;
371374
case 2:
375+
mVideoView1.setRenderViewGone();
376+
mVideoView2.setRenderViewVisible();
377+
mVideoView3.setRenderViewGone();
378+
mVideoView4.setRenderViewGone();
379+
372380
mVideoView1.setVisibility(View.GONE);
373381
mVideoView2.setVisibility(View.VISIBLE);
374382
mVideoView3.setVisibility(View.GONE);
375383
mVideoView4.setVisibility(View.GONE);
376384
break;
377385
case 3:
386+
mVideoView1.setRenderViewGone();
387+
mVideoView2.setRenderViewGone();
388+
mVideoView3.setRenderViewVisible();
389+
mVideoView4.setRenderViewGone();
390+
378391
mVideoView1.setVisibility(View.GONE);
379392
mVideoView2.setVisibility(View.GONE);
380393
mVideoView3.setVisibility(View.VISIBLE);
381394
mVideoView4.setVisibility(View.GONE);
382395
break;
383396
case 4:
397+
mVideoView1.setRenderViewGone();
398+
mVideoView2.setRenderViewGone();
399+
mVideoView3.setRenderViewGone();
400+
mVideoView4.setRenderViewVisible();
401+
384402
mVideoView1.setVisibility(View.GONE);
385403
mVideoView2.setVisibility(View.GONE);
386404
mVideoView3.setVisibility(View.GONE);
@@ -395,25 +413,30 @@ private void enterFullScreen(int channel){
395413
* 退出全屏模式
396414
*/
397415
private void exitFullScreen(){
416+
mVideoView1.setRenderViewVisible();
417+
mVideoView2.setRenderViewVisible();
418+
mVideoView3.setRenderViewVisible();
419+
mVideoView4.setRenderViewVisible();
420+
398421
showDivider();
399422
mVideoView1.setVisibility(View.VISIBLE);
400423
mVideoView2.setVisibility(View.VISIBLE);
401424
mVideoView3.setVisibility(View.VISIBLE);
402425
mVideoView4.setVisibility(View.VISIBLE);
403426
}
404427

405-
/**
406-
* 切换分屏模式
407-
* @param channel channel
408-
*/
409-
private void changeScreenMode(int channel){
410-
isMultiScreen = !isMultiScreen;
411-
if (isMultiScreen){
412-
enterFullScreen(channel);
413-
}else {
414-
exitFullScreen();
415-
}
428+
/**
429+
* 切换分屏模式
430+
* @param channel channel
431+
*/
432+
private void changeScreenMode(int channel){
433+
isMultiScreen = !isMultiScreen;
434+
if (isMultiScreen){
435+
enterFullScreen(channel);
436+
}else {
437+
exitFullScreen();
416438
}
439+
}
417440

418441
@Override
419442
protected void onDestroy() {

OnLive/src/main/java/com/frank/living/widget/IjkVideoView.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,4 +1187,16 @@ public boolean performClick() {
11871187
return super.performClick();
11881188
}
11891189

1190+
public void setRenderViewVisible(){
1191+
if (mRenderView != null){
1192+
mRenderView.getView().setVisibility(VISIBLE);
1193+
}
1194+
}
1195+
1196+
public void setRenderViewGone(){
1197+
if (mRenderView != null){
1198+
mRenderView.getView().setVisibility(GONE);
1199+
}
1200+
}
1201+
11901202
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#Fri Apr 07 11:57:57 CST 2017
1+
#Tue Mar 05 23:59:00 CST 2019
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)