Skip to content

Commit fbea12c

Browse files
committed
增加多线路播放
1 parent 7f93db1 commit fbea12c

34 files changed

+569
-26
lines changed

.idea/encodings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

acode_player_lib/src/main/java/com/acode/player/lib/AcodePlayer.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Context;
55
import android.content.res.Configuration;
66
import android.media.AudioManager;
7+
import android.net.Uri;
78
import android.os.Handler;
89
import android.util.Log;
910
import android.view.GestureDetector;
@@ -13,6 +14,7 @@
1314
import android.view.WindowManager;
1415

1516
import com.acode.player.lib.bean.PlayerBean;
17+
import com.acode.player.lib.data.Config;
1618
import com.acode.player.lib.listener.AcodePlayerListener;
1719
import com.acode.player.lib.listener.AcodePlayerStateListener;
1820
import com.acode.player.lib.utils.GestureEnum;
@@ -166,15 +168,48 @@ public void createPlayer() {
166168
* 准备播放
167169
*
168170
* @param playerBean 播放数据源
171+
* 默认播放标清
169172
*/
170173
public void readyPlayer(PlayerBean playerBean) {
174+
readyPlayer(playerBean, Config.STARTMD_CLEAR);
175+
176+
}
177+
178+
/**
179+
* 准备播放
180+
*
181+
* @param playerBean 播放数据源
182+
* 设置播放线路
183+
*/
184+
public void readyPlayer(PlayerBean playerBean, int lins) {
171185
this.playerBean = playerBean;
172186
if (timerUtils != null) {
173187
timerUtils.stop();
174188
timerUtils = null;
175189
}
176190
//创建定时间监听播放状态
177191
timerUtils = new TimerUtils(this, player, playerBean);
192+
Uri uri = null;
193+
for (int i = 0; i < playerBean.getUris().size(); i++) {
194+
if (lins == playerBean.getLineNames().get(i)) {
195+
uri = playerBean.getUris().get(i);
196+
}
197+
}
198+
//初始化数据源
199+
MediaSource mediaSource = initMediaSource(uri);
200+
// 添加数据源
201+
player.prepare(mediaSource);
202+
203+
// 设置播放进度
204+
player.seekTo(playerBean.getCurrentPosition());
205+
206+
// 播放监听
207+
player.addListener(eventListener);
208+
}
209+
210+
211+
//初始化数据源
212+
private MediaSource initMediaSource(Uri uri) {
178213
// 测量播放带宽,如果不需要可以传null
179214
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
180215

@@ -186,17 +221,9 @@ public void readyPlayer(PlayerBean playerBean) {
186221
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
187222

188223
// 传入Uri、加载数据的工厂、解析数据的工厂,就能创建出MediaSource
189-
MediaSource videoSource = new ExtractorMediaSource(playerBean.getUri(),
224+
MediaSource videoSource = new ExtractorMediaSource(uri,
190225
dataSourceFactory, extractorsFactory, null, null);
191-
192-
// 添加数据源
193-
player.prepare(videoSource);
194-
195-
// 设置播放进度
196-
player.seekTo(playerBean.getCurrentPosition());
197-
198-
// 播放监听
199-
player.addListener(eventListener);
226+
return videoSource;
200227
}
201228

202229
//播放监听
@@ -422,6 +449,7 @@ public boolean onTouch(View v, MotionEvent event) {
422449
private class PlayerGestureListener extends GestureDetector.SimpleOnGestureListener {
423450
private boolean firstTouch;
424451
private boolean toSeek;
452+
425453
@Override
426454
public boolean onDoubleTap(MotionEvent e) {
427455
Log.d("post", "onDoubleTap");

acode_player_lib/src/main/java/com/acode/player/lib/AcodePlayerView.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ public class AcodePlayerView extends FrameLayout implements View.OnClickListener
9797
private LinearLayout ll_network_no_found;
9898
//网络监测工具类
9999
private NetUtils netUtils;
100+
//超清清
101+
private TextView tv_super_clear;
102+
//高清
103+
private TextView tv_hight_clear;
104+
//标清
105+
private TextView tv_standard_clear;
100106

101107

102108
public AcodePlayerView(@NonNull Context context) {
@@ -173,6 +179,9 @@ private void initNetworkView() {
173179

174180
//初始化播放器的布局
175181
private void initPlayerView() {
182+
tv_super_clear = view.findViewById(R.id.tv_super_clear);
183+
tv_hight_clear = view.findViewById(R.id.tv_hight_clear);
184+
tv_standard_clear = view.findViewById(R.id.tv_standard_clear);
176185
rl_player_view = view.findViewById(R.id.rl_player_view);
177186
img_back = view.findViewById(R.id.img_back);
178187
tv_title = view.findViewById(R.id.tv_title);
@@ -207,6 +216,9 @@ public void initListener() {
207216
rl_controller_view.setOnClickListener(this);
208217
sv_player.setOnClickListener(this);
209218
img_back.setOnClickListener(this);
219+
tv_super_clear.setOnClickListener(this);
220+
tv_hight_clear.setOnClickListener(this);
221+
tv_standard_clear.setOnClickListener(this);
210222
}
211223

212224
private void initData() {
@@ -311,13 +323,26 @@ public void createPlayer() {
311323
* 准备播放
312324
*
313325
* @param playerBean 播放的实体
326+
* 默认播放路线
314327
*/
315328
public void readyPlayer(PlayerBean playerBean) {
316329
player.readyPlayer(playerBean);
317330
this.playerBean = playerBean;
318331
//设置标题
319332
tv_title.setText(playerBean.getInfo());
320333
}
334+
/**
335+
* 准备播放
336+
*
337+
* @param playerBean 播放的实体
338+
* 设置播放路线
339+
*/
340+
public void readyPlayer(PlayerBean playerBean,int line) {
341+
player.readyPlayer(playerBean,line);
342+
this.playerBean = playerBean;
343+
//设置标题
344+
tv_title.setText(playerBean.getInfo());
345+
}
321346

322347
//开始播放
323348
public void startPlayer() {
@@ -495,6 +520,15 @@ public void onClick(View view) {
495520
return;
496521
}
497522
rl_controller_view.setVisibility(VISIBLE);
523+
} else if (i == R.id.tv_super_clear) {
524+
pausePlayer();
525+
readyPlayer(playerBean,Config.SUPER_CLEAR);
526+
} else if (i == R.id.tv_hight_clear) {
527+
pausePlayer();
528+
readyPlayer(playerBean,Config.HIGHT_CLEAR);
529+
} else if (i == R.id.tv_standard_clear) {
530+
pausePlayer();
531+
readyPlayer(playerBean,Config.STARTMD_CLEAR);
498532
}
499533
}
500534

acode_player_lib/src/main/java/com/acode/player/lib/bean/PlayerBean.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.net.Uri;
44

55
import java.io.Serializable;
6+
import java.util.ArrayList;
67

78
/**
89
* user:yangtao
@@ -11,8 +12,11 @@
1112
* introduce:视频实体
1213
*/
1314
public class PlayerBean implements Serializable {
14-
//视频的uri
15-
private Uri uri;
15+
//视频的uri集合
16+
private ArrayList<Uri> uris;
17+
18+
//线路集合
19+
private ArrayList<Integer> lineNames;
1620

1721
//视频名称
1822
private String title;
@@ -45,8 +49,9 @@ public class PlayerBean implements Serializable {
4549
@Override
4650
public String toString() {
4751
return "PlayerBean{" +
48-
"uri=" + uri +
4952
", title='" + title + '\'' +
53+
", uris='" + uris.toString() + '\'' +
54+
", lineNames='" + lineNames.toString() + '\'' +
5055
", info='" + info + '\'' +
5156
", imgUrl='" + imgUrl + '\'' +
5257
", currentTime=" + currentTime +
@@ -59,6 +64,25 @@ public String toString() {
5964
'}';
6065
}
6166

67+
68+
public ArrayList<Integer> getLineNames() {
69+
return lineNames;
70+
}
71+
72+
public PlayerBean setLineNames(ArrayList<Integer> lineNames) {
73+
this.lineNames = lineNames;
74+
return this;
75+
}
76+
77+
public ArrayList<Uri> getUris() {
78+
return uris;
79+
}
80+
81+
public PlayerBean setUris(ArrayList<Uri> uris) {
82+
this.uris = uris;
83+
return this;
84+
}
85+
6286
public int getBufferedPercentage() {
6387
return bufferedPercentage;
6488
}
@@ -113,15 +137,6 @@ public PlayerBean setImgUrl(String imgUrl) {
113137
return this;
114138
}
115139

116-
public Uri getUri() {
117-
return uri;
118-
}
119-
120-
public PlayerBean setUri(Uri uri) {
121-
this.uri = uri;
122-
return this;
123-
}
124-
125140
public String getCurrentTime() {
126141
return currentTime;
127142
}

acode_player_lib/src/main/java/com/acode/player/lib/data/Config.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,11 @@ public class Config {
1313
public static final int secondStart = 500;
1414
//更新当前时间和进度条
1515
public static final int UPDATE_CURRNET_UI = 1000;
16+
//超清
17+
public static final int SUPER_CLEAR = 1080;
18+
//高清
19+
public static final int HIGHT_CLEAR = 720;
20+
//标清
21+
public static final int STARTMD_CLEAR = 560;
22+
1623
}

acode_player_lib/src/main/java/com/acode/player/lib/data/Data.java

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
public class Data {
1717
public static ArrayList<PlayerBean> getPlayerBeans() {
1818
ArrayList<PlayerBean> playerBeans = new ArrayList<>();
19-
for (int i = 0; i < 3; i++) {
19+
for (int i = 0; i < 4; i++) {
2020
PlayerBean playerBean = new PlayerBean();
2121
playerBean.setUrl("");
2222
playerBean.setCurrentTime("00:00");
@@ -25,17 +25,58 @@ public static ArrayList<PlayerBean> getPlayerBeans() {
2525
if (i == 0) {
2626
playerBean.setTitle("小神龙");
2727
playerBean.setInfo("小神龙谈父亲");
28-
playerBean.setUri(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/tmp.mp4"));
28+
ArrayList<Uri> uris = new ArrayList<>();
29+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/tmp.mp4"));
30+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/tmp.mp4"));
31+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/tmp.mp4"));
32+
playerBean.setUris(uris);
33+
ArrayList<Integer> linsNames = new ArrayList<>();
34+
linsNames.add(1080);
35+
linsNames.add(720);
36+
linsNames.add(560);
37+
playerBean.setLineNames(linsNames);
2938
}
3039
if (i == 1) {
3140
playerBean.setTitle("烟火里的尘埃");
3241
playerBean.setInfo("不是华晨宇唱的烟火里的尘埃");
33-
playerBean.setUri(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_t3QJVZ.mp4"));
42+
ArrayList<Uri> uris = new ArrayList<>();
43+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_t3QJVZ.mp4"));
44+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_t3QJVZ.mp4"));
45+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_t3QJVZ.mp4"));
46+
playerBean.setUris(uris);
47+
ArrayList<Integer> linsNames = new ArrayList<>();
48+
linsNames.add(1080);
49+
linsNames.add(720);
50+
linsNames.add(560);
51+
playerBean.setLineNames(linsNames);
3452
}
3553
if (i == 2) {
3654
playerBean.setTitle("螳螂拳");
3755
playerBean.setInfo("热血像那红日光");
38-
playerBean.setUri(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_5Vkbz0.mp4"));
56+
ArrayList<Uri> uris = new ArrayList<>();
57+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_5Vkbz0.mp4"));
58+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_5Vkbz0.mp4"));
59+
uris.add(Uri.parse("http://oif1jvh5f.bkt.clouddn.com/CFNetworkDownload_5Vkbz0.mp4"));
60+
playerBean.setUris(uris);
61+
ArrayList<Integer> linsNames = new ArrayList<>();
62+
linsNames.add(1080);
63+
linsNames.add(720);
64+
linsNames.add(560);
65+
playerBean.setLineNames(linsNames);
66+
}
67+
if (i == 3) {
68+
playerBean.setTitle("六一儿童节快乐");
69+
playerBean.setInfo("六一儿童节快乐");
70+
ArrayList<Uri> uris = new ArrayList<>();
71+
uris.add(Uri.parse("http://mp4.vjshi.com/2015-05-11/1431320221859_786.mp4"));
72+
uris.add(Uri.parse("http://mp4.vjshi.com/2016-10-21/84bafe60ef0af95a5292f66b9f692504.mp4"));
73+
uris.add(Uri.parse("http://mp4.vjshi.com/2017-04-14/933db6540f53dd38974b4446388fb928.mp4"));
74+
playerBean.setUris(uris);
75+
ArrayList<Integer> linsNames = new ArrayList<>();
76+
linsNames.add(1080);
77+
linsNames.add(720);
78+
linsNames.add(560);
79+
playerBean.setLineNames(linsNames);
3980
}
4081
playerBeans.add(playerBean);
4182
}

acode_player_lib/src/main/res/layout/acode_player_view.xml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,40 @@
4242
android:text="title"
4343
android:textColor="#ffffff"
4444
android:textSize="15dp" />
45+
46+
<LinearLayout
47+
android:layout_width="wrap_content"
48+
android:layout_height="wrap_content"
49+
android:layout_alignParentRight="true"
50+
android:orientation="horizontal">
51+
52+
<TextView
53+
android:id="@+id/tv_super_clear"
54+
android:layout_width="wrap_content"
55+
android:layout_height="wrap_content"
56+
android:paddingLeft="10dp"
57+
android:paddingRight="10dp"
58+
android:text="超清"
59+
android:textColor="#ffffff" />
60+
61+
<TextView
62+
android:id="@+id/tv_hight_clear"
63+
android:layout_width="wrap_content"
64+
android:layout_height="wrap_content"
65+
android:paddingLeft="10dp"
66+
android:paddingRight="10dp"
67+
android:text="高清"
68+
android:textColor="#ffffff" />
69+
70+
<TextView
71+
android:id="@+id/tv_standard_clear"
72+
android:layout_width="wrap_content"
73+
android:layout_height="wrap_content"
74+
android:paddingLeft="10dp"
75+
android:paddingRight="10dp"
76+
android:text="标清"
77+
android:textColor="#ffffff" />
78+
</LinearLayout>
4579
</RelativeLayout>
4680

4781
<ImageView
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
<resources>
22
<string name="app_name">acode_player_lib</string>
3+
<string name="uri_test_7">http://mp4.vjshi.com/2017-04-14/933db6540f53dd38974b4446388fb928.mp4</string>
4+
<string name="uri_test_8">http://mp4.vjshi.com/2016-10-21/84bafe60ef0af95a5292f66b9f692504.mp4</string>
5+
<string name="uri_test_9">http://mp4.vjshi.com/2015-05-11/1431320221859_786.mp4</string>
36
</resources>

0 commit comments

Comments
 (0)