Skip to content

Commit 04970d1

Browse files
committed
2.1.23新增非旋转横竖屏全屏播放
1 parent 1889647 commit 04970d1

File tree

15 files changed

+249
-93
lines changed

15 files changed

+249
-93
lines changed

README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#### 三、SDK集成
2626
* 建议集成前先[下载apk][2]体验,找到自己想要实现的功能模块,后续集成可参考demo源码。
2727

28-
[2]:https://amuse-1259486925.cos.ap-hongkong.myqcloud.com/apk/iPlayer-2.1.22.apk?version=2.1.22 "下载apk"
28+
[2]:https://amuse-1259486925.cos.ap-hongkong.myqcloud.com/apk/iPlayer-2.1.23.apk?version=2.1.23 "下载apk"
2929

3030
##### 1、项目根build.gradle配置</br>
3131
```
@@ -39,17 +39,17 @@
3939
```
4040
dependencies {
4141
//播放器(无UI交互)
42-
implementation 'com.github.hty527.iPlayer:iplayer:2.1.22'
42+
implementation 'com.github.hty527.iPlayer:iplayer:2.1.23'
4343
//UI交互组件,可根据需要使用
44-
implementation 'com.github.hty527.iPlayer:widget:2.1.22'
44+
implementation 'com.github.hty527.iPlayer:widget:2.1.23'
4545
4646
//音视频预缓存+边播边存,根据需要使用
47-
//implementation 'com.github.hty527.iPlayer:cache:2.1.22'
47+
//implementation 'com.github.hty527.iPlayer:cache:2.1.23'
4848
4949
//ijk音视频解码器,根据需要使用
50-
//implementation 'com.github.hty527.iPlayer:ijk:2.1.22'
50+
//implementation 'com.github.hty527.iPlayer:ijk:2.1.23'
5151
//exo音视频解码器,根据需要使用
52-
//implementation 'com.github.hty527.iPlayer:exo:2.1.22'
52+
//implementation 'com.github.hty527.iPlayer:exo:2.1.23'
5353
//选择exo音视频解码器时需引用
5454
//以下为必须项,SDK内部已引用,集成时无需引用
5555
//implementation 'com.google.android.exoplayer:exoplayer:2.18.1'//(必需)

app/build.gradle

+10-10
Original file line numberDiff line numberDiff line change
@@ -78,26 +78,26 @@ dependencies {
7878
implementation 'com.google.code.gson:gson:2.8.5'
7979

8080
//播放器SDK
81-
implementation 'com.github.hty527.iPlayer:iplayer:2.1.22'
81+
// implementation 'com.github.hty527.iPlayer:iplayer:2.1.23'
8282
//UI交互组件,可根据需要使用
83-
implementation 'com.github.hty527.iPlayer:widget:2.1.22'
83+
// implementation 'com.github.hty527.iPlayer:widget:2.1.23'
8484
//音视频预缓存+边播边存,根据需要使用
85-
implementation 'com.github.hty527.iPlayer:cache:2.1.22'
85+
// implementation 'com.github.hty527.iPlayer:cache:2.1.23'
8686
//ijk音视频解码器,根据自己需要实现
87-
implementation 'com.github.hty527.iPlayer:ijk:2.1.22'
87+
// implementation 'com.github.hty527.iPlayer:ijk:2.1.23'
8888
//exo音视频解码器,根据自己需要实现
89-
implementation 'com.github.hty527.iPlayer:exo:2.1.22'
89+
// implementation 'com.github.hty527.iPlayer:exo:2.1.23'
9090

9191
// //播放器SDK
92-
// implementation project(':iplayer')
92+
implementation project(':iplayer')
9393
// //UI交互组件
94-
// implementation project(':widget')
94+
implementation project(':widget')
9595
// //音视频缓存
96-
// implementation project(':cache')
96+
implementation project(':cache')
9797
// //ijk音视频解码器
98-
// implementation project(':ijk')
98+
implementation project(':ijk')
9999
// //exo音视频解码器
100-
// implementation project(':exo')
100+
implementation project(':exo')
101101

102102
//以下为必须项,SDK内部已引用
103103
//implementation 'com.google.android.exoplayer:exoplayer:2.18.1'//(必需)

app/src/main/AndroidManifest.xml

+6
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@
124124
android:screenOrientation="portrait"
125125
android:configChanges="orientation|screenSize">
126126
</activity>
127+
<!--Pad和Tv-->
128+
<activity android:name="com.android.videoplayer.ui.activity.PadActivity"
129+
android:launchMode="singleTask"
130+
android:screenOrientation="landscape"
131+
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout">
132+
</activity>
127133
<!--权限申请-悬浮窗-->
128134
<activity android:name="com.android.videoplayer.ui.activity.WindowPermissionActivity"
129135
android:launchMode="singleTask"

app/src/main/java/com/android/videoplayer/ui/activity/MainActivity.java

+15-11
Original file line numberDiff line numberDiff line change
@@ -95,48 +95,52 @@ public void onItemClick(View view, int position, long itemId) {
9595
intent=new Intent(MainActivity.this, VideoListPlayerActivity.class);
9696
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_list,"连续播放一个列表示例"));
9797
break;
98-
case 8://列表自动播放(无缝转场)
98+
case 8://Pad和TV
99+
intent=new Intent(MainActivity.this, PadActivity.class);
100+
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_item_pad,"Pad和TV"));
101+
break;
102+
case 9://列表自动播放(无缝转场)
99103
intent = new Intent(MainActivity.this, PagerListActivity.class);
100104
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_auto,"列表自动播放"));
101105
intent.putExtra("auto_play","1");
102106
break;
103-
case 9://列表点击播放(无缝转场)
107+
case 10://列表点击播放(无缝转场)
104108
intent = new Intent(MainActivity.this, PagerListActivity.class);
105109
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_click,"列表点击播放"));
106110
intent.putExtra("auto_play","0");
107111
break;
108-
case 10://Activity小窗口
112+
case 11://Activity小窗口
109113
intent = new Intent(MainActivity.this, WindowPlayerActivity.class);
110114
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_window,"Activity局部悬浮窗"));
111115
break;
112-
case 11://全局悬浮窗
116+
case 12://全局悬浮窗
113117
intent = new Intent(MainActivity.this, WindowGlobalPlayerActivity.class);
114118
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_goable_window,"全局悬浮窗"));
115119
break;
116-
case 12://任意界面开启窗口播放器
120+
case 13://任意界面开启窗口播放器
117121
startMiniWindowPlayer();
118122
break;
119-
case 13://任意界面开启全局悬浮窗播放器
123+
case 14://任意界面开启全局悬浮窗播放器
120124
checkedPermission();
121125
break;
122-
case 14://画中画
126+
case 15://画中画
123127
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
124128
intent=new Intent(MainActivity.this, PiPPlayerActivity.class);
125129
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_dip,"画中画"));
126130
}
127131
break;
128-
case 15://类抖音垂直滚动播放
132+
case 16://类抖音垂直滚动播放
129133
intent=new Intent(MainActivity.this, PagerPlayerActivity.class);
130134
break;
131-
case 16://自定义弹幕控制器功能示例
135+
case 17://自定义弹幕控制器功能示例
132136
intent = new Intent(MainActivity.this, DanmuPlayerActivity.class);
133137
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_title_danmu,"自定义弹幕控制器"));
134138
break;
135-
case 17://预缓存
139+
case 18://预缓存
136140
intent = new Intent(MainActivity.this, VideoCacheActivity.class);
137141
intent.putExtra("title",DataFactory.getInstance().getString(R.string.text_item_cache,"视频预缓存"));
138142
break;
139-
case 18://项目主页 https://gitee.com/hy_Yuye/iPlayer
143+
case 19://项目主页 https://gitee.com/hy_Yuye/iPlayer
140144
ProjectDialog dialog=new ProjectDialog(MainActivity.this);
141145
dialog.setOnMenuActionListener(new ProjectDialog.OnMenuActionListener() {
142146
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.android.videoplayer.ui.activity;
2+
3+
import android.os.Bundle;
4+
import android.view.View;
5+
import com.android.iplayer.controller.VideoController;
6+
import com.android.iplayer.listener.OnPlayerEventListener;
7+
import com.android.iplayer.media.IMediaPlayer;
8+
import com.android.iplayer.model.PlayerState;
9+
import com.android.iplayer.widget.VideoPlayer;
10+
import com.android.iplayer.widget.WidgetFactory;
11+
import com.android.videoplayer.R;
12+
import com.android.videoplayer.base.BaseActivity;
13+
import com.android.videoplayer.base.BasePresenter;
14+
import com.android.videoplayer.ui.widget.TitleView;
15+
import com.android.videoplayer.utils.ScreenUtils;
16+
17+
/**
18+
* created by hty
19+
* 2023/5/26
20+
* Desc:Pad和Tv
21+
*/
22+
public class PadActivity extends BaseActivity {
23+
24+
@Override
25+
protected BasePresenter createPresenter() {
26+
return null;
27+
}
28+
29+
@Override
30+
protected void onCreate(Bundle savedInstanceState) {
31+
super.onCreate(savedInstanceState);
32+
setContentView(R.layout.activity_pad);
33+
TitleView titleView = (TitleView) findViewById(R.id.title_view);
34+
titleView.setTitle(getIntent().getStringExtra("title"));
35+
titleView.setOnTitleActionListener(new TitleView.OnTitleActionListener() {
36+
@Override
37+
public void onBack() {
38+
onBackPressed();
39+
}
40+
});
41+
findViewById(R.id.fullscreen).setOnClickListener(new View.OnClickListener() {
42+
@Override
43+
public void onClick(View view) {
44+
/**!!!重点!!!:必须在启动全屏前调用下列方法禁止旋转Activity方向**/
45+
//mVideoPlayer.shutFullScreenOrientation();
46+
mVideoPlayer.toggleFullScreen();
47+
}
48+
});
49+
initPlayer();
50+
}
51+
52+
private void initPlayer() {
53+
findViewById(R.id.player_container).getLayoutParams().height= ScreenUtils.getInstance().dpToPxInt(300f) * 10 /16;//给播放器固定一个高度
54+
mVideoPlayer = (VideoPlayer) findViewById(R.id.video_player);
55+
VideoController controller = mVideoPlayer.createController();//绑定默认的控制器
56+
WidgetFactory.bindDefaultControls(controller);
57+
controller.setTitle("测试播放地址");//视频标题(默认视图控制器横屏可见)
58+
mVideoPlayer.setOnPlayerActionListener(new OnPlayerEventListener() {
59+
@Override
60+
public void onPlayerState(PlayerState state, String message) {
61+
if(PlayerState.STATE_START==state){
62+
findViewById(R.id.fullscreen).setVisibility(View.VISIBLE);
63+
}
64+
}
65+
});
66+
mVideoPlayer.setZoomModel(IMediaPlayer.MODE_ZOOM_TO_FIT);
67+
mVideoPlayer.setLoop(true);
68+
mVideoPlayer.setProgressCallBackSpaceMilliss(300);
69+
/**!!!重点!!!:关闭、退出全屏时禁止旋转Activity方向,默认开启**/
70+
mVideoPlayer.shutFullScreenOrientation();
71+
mVideoPlayer.setDataSource(MP4_URL3);//播放地址设置
72+
mVideoPlayer.prepareAsync();//开始异步准备播放
73+
}
74+
}

app/src/main/java/com/android/videoplayer/utils/DataFactory.java

+13-12
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,19 @@ public List<Menu> getMenus() {
6565
menus.add(new Menu(getString(R.string.text_item_full,"直接全屏播放(全屏沉浸)"),4,null,2));
6666
menus.add(new Menu(getString(R.string.text_item_perview,"收费试看模式"),5,null,2));
6767
menus.add(new Menu(getString(R.string.text_item_resouce,"Assets/Raw本地资源播放"),6,null,2));
68-
menus.add(new Menu(getString(R.string.text_item_continuity,"连续播放一个视频列表"),7,null,1));
69-
menus.add(new Menu(getString(R.string.text_item_auto,"列表自动播放(无缝转场)"),8,getString(R.string.text_item_sub_list,"列表"),0));
70-
menus.add(new Menu(getString(R.string.text_item_click,"列表点击播放(无缝转场)"),9,null,1));
71-
menus.add(new Menu(getString(R.string.text_item_window,"Activity悬浮窗"),10,getString(R.string.text_item_sub_window,"窗口"),0));
72-
menus.add(new Menu(getString(R.string.text_item_goable_window,"全局悬浮窗"),11,null,2));
73-
menus.add(new Menu(getString(R.string.text_item_window_open,"任意界面开启窗口播放器"),12,null,2));
74-
menus.add(new Menu(getString(R.string.text_item_window_goable_open,"任意界面开启全局悬浮窗播放器"),13,null,2));
75-
menus.add(new Menu(getString(R.string.text_item_dip,"画中画(Android8.0+)"),14,null,1));
76-
menus.add(new Menu(getString(R.string.text_item_dy,"仿抖音(扩展示例,支持缓存)"),15,getString(R.string.text_item_sub_expand,"扩展"),0));
77-
menus.add(new Menu(getString(R.string.text_item_danmu,"自定义弹幕控制器(扩展示例)"),16,null,2));
78-
menus.add(new Menu(getString(R.string.text_item_cache,"视频预缓存"),17,null,1));
79-
menus.add(new Menu(getString(R.string.text_item_home,"项目主页"),18,getString(R.string.text_item_sub_other,"其它"),3));
68+
menus.add(new Menu(getString(R.string.text_item_continuity,"连续播放一个视频列表"),7,null,2));
69+
menus.add(new Menu(getString(R.string.text_item_pad,"Pad和TV"),8,null,1));
70+
menus.add(new Menu(getString(R.string.text_item_auto,"列表自动播放(无缝转场)"),9,getString(R.string.text_item_sub_list,"列表"),0));
71+
menus.add(new Menu(getString(R.string.text_item_click,"列表点击播放(无缝转场)"),10,null,1));
72+
menus.add(new Menu(getString(R.string.text_item_window,"Activity悬浮窗"),11,getString(R.string.text_item_sub_window,"窗口"),0));
73+
menus.add(new Menu(getString(R.string.text_item_goable_window,"全局悬浮窗"),12,null,2));
74+
menus.add(new Menu(getString(R.string.text_item_window_open,"任意界面开启窗口播放器"),13,null,2));
75+
menus.add(new Menu(getString(R.string.text_item_window_goable_open,"任意界面开启全局悬浮窗播放器"),14,null,2));
76+
menus.add(new Menu(getString(R.string.text_item_dip,"画中画(Android8.0+)"),15,null,1));
77+
menus.add(new Menu(getString(R.string.text_item_dy,"仿抖音(扩展示例,支持缓存)"),16,getString(R.string.text_item_sub_expand,"扩展"),0));
78+
menus.add(new Menu(getString(R.string.text_item_danmu,"自定义弹幕控制器(扩展示例)"),17,null,2));
79+
menus.add(new Menu(getString(R.string.text_item_cache,"视频预缓存"),18,null,1));
80+
menus.add(new Menu(getString(R.string.text_item_home,"项目主页"),19,getString(R.string.text_item_sub_other,"其它"),3));
8081
Menu menu = new Menu("", 101, getString(R.string.text_item_version,"版本预告"), 3, 1);
8182
Version version=new Version();
8283
version.setCode("2.1.xx");
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:orientation="vertical"
7+
android:background="@color/bg_color">
8+
<com.android.videoplayer.ui.widget.TitleView
9+
android:id="@+id/title_view"
10+
android:layout_width="match_parent"
11+
android:layout_height="wrap_content"/>
12+
<!--需要一个父容器包裹,并且必须固定高度-->
13+
<LinearLayout
14+
android:layout_width="match_parent"
15+
android:layout_height="wrap_content"
16+
android:orientation="horizontal">
17+
<FrameLayout
18+
android:id="@+id/player_container"
19+
android:layout_width="300dp"
20+
android:layout_height="wrap_content"
21+
android:layout_marginTop="12dp"
22+
android:layout_marginLeft="16dp">
23+
<com.android.iplayer.widget.VideoPlayer
24+
android:id="@+id/video_player"
25+
android:layout_width="match_parent"
26+
android:layout_height="match_parent"
27+
android:background="#000000"/>
28+
</FrameLayout>
29+
<ImageView
30+
android:id="@+id/fullscreen"
31+
android:layout_width="wrap_content"
32+
android:layout_height="wrap_content"
33+
android:layout_gravity="bottom"
34+
android:src="@mipmap/ic_live_fullscreen"
35+
android:paddingLeft="12dp"
36+
android:paddingRight="12dp"
37+
android:visibility="invisible"/>
38+
</LinearLayout>
39+
</LinearLayout>

app/src/main/res/values-zh-rCN/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<string name="text_item_perview">收费试看模式</string>
2424
<string name="text_item_resouce">Assets或Raw本地资源播放</string>
2525
<string name="text_item_continuity">连续播放一个视频列表</string>
26+
<string name="text_item_pad">Pad和TV</string>
2627
<string name="text_item_auto">列表自动播放(转场衔接播放)</string>
2728
<string name="text_item_click">列表点击播放(转场衔接播放)</string>
2829
<string name="text_item_window">Activity悬浮窗</string>

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<string name="text_item_perview">Fee trial mode</string>
2424
<string name="text_item_resouce">Assets or Raw local resource play</string>
2525
<string name="text_item_continuity">Play a video list in a row</string>
26+
<string name="text_item_pad">Pad and TV</string>
2627
<string name="text_item_auto">List auto to play(Transfer connection play)</string>
2728
<string name="text_item_click">List click to play(Transfer connection play)</string>
2829
<string name="text_item_window">Activity local suspension window</string>

config.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ext {
22
sdk=[
3-
versionCode : 20122,
4-
versionName : "2.1.22"//SDK版本号
3+
versionCode : 20123,
4+
versionName : "2.1.23"//SDK版本号
55
]
66
}
Binary file not shown.

doc/update/updateLog.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
历史版本
22

3-
### 2.1.22
3+
### 2.1.23
44
**更新日期:** 2023-5-26<br/>
55
**更新内容:**<br/>
6-
>1. IJK解码器直播模式参数开关修复;<br/>
7-
>2. 部分失效资源替换<br/>
8-
>3. 直播示例新增解码器和源切换交互<br/>
6+
>1. SDK新增横竖屏切换时禁用Activity方向切换;<br/>
7+
>2. IJK解码器直播模式参数开关修复;<br/>
8+
>3. 直播示例新增解码器和源切换交互;<br/>
9+
>4. 部分失效资源替换<br/>
910
___
1011
### 2.1.21
1112
**更新日期:** 2023-4-10<br/>

0 commit comments

Comments
 (0)