修改首页的播放为 aliplayer
This commit is contained in:
@@ -53,8 +53,8 @@ public interface ApiService {
|
||||
String LivePLayerStartUrl = "https://play.bab3live.com/live/";
|
||||
|
||||
// String testUrl = "";
|
||||
// String testUrl = "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8";
|
||||
String testUrl ="https://v5-dy.ixigua.com/7d2ab6a5dce41b3d0797b590d7a47b53/69856e82/video/tos/cn/tos-cn-ve-15c000-ce/oACIgITg7rgQTAQeEyKBUB7jveeGBDLLQL8J6J/?a=2011&ch=0&cr=0&dr=0&net=5&cd=0%7C0%7C0%7C0&cv=1&br=689&bt=689&cs=0&ds=4&ft=k7Fz7VVywhiRF_80mo~pK7pswApED00_vrK40zTmto0g3cI&mime_type=video_mp4&qs=0&rc=Omk3Z2dmOjtpOGc6OTRpZkBpankzaG45cnMzOTMzbGkzNUAzX2FgM2E0XjExYWEuYl4vYSMvMXNtMmRjbi5hLS1kLTVzcw%3D%3D&btag=80000e00010000&dy_q=1770348642&feature_id=0ea98fd3bdc3c6c14a3d0804cc272721&l=20260206113041D129CBC53D38F56754D3";
|
||||
String testUrl = "https://static.bab3live.com/videos/1763804146659.mp4";
|
||||
// String testUrl ="https://v5-dy.ixigua.com/7d2ab6a5dce41b3d0797b590d7a47b53/69856e82/video/tos/cn/tos-cn-ve-15c000-ce/oACIgITg7rgQTAQeEyKBUB7jveeGBDLLQL8J6J/?a=2011&ch=0&cr=0&dr=0&net=5&cd=0%7C0%7C0%7C0&cv=1&br=689&bt=689&cs=0&ds=4&ft=k7Fz7VVywhiRF_80mo~pK7pswApED00_vrK40zTmto0g3cI&mime_type=video_mp4&qs=0&rc=Omk3Z2dmOjtpOGc6OTRpZkBpankzaG45cnMzOTMzbGkzNUAzX2FgM2E0XjExYWEuYl4vYSMvMXNtMmRjbi5hLS1kLTVzcw%3D%3D&btag=80000e00010000&dy_q=1770348642&feature_id=0ea98fd3bdc3c6c14a3d0804cc272721&l=20260206113041D129CBC53D38F56754D3";
|
||||
|
||||
String fengMian = "https://static.bab3live.com/match_cover/%s.jpg";
|
||||
|
||||
|
||||
@@ -375,6 +375,8 @@ public class GameAliPortraitActivity extends BaseActivity<MainViewModel, Activit
|
||||
public void convert(ViewHolder holder, ChatMessageBean s, int index) {
|
||||
CircleImageView circleImageView = holder.getView(R.id.user_iv);
|
||||
circleImageView.setVisibility(View.VISIBLE);
|
||||
ImageView noti_tv = holder.getView(R.id.noti_tv);
|
||||
noti_tv.setVisibility(View.GONE);
|
||||
if (TextUtils.isEmpty(s.getType())) {
|
||||
holder.setText(R.id.user_name_tv, s.getSenderName());
|
||||
holder.setText(R.id.user_txt_tv, s.getContent());
|
||||
@@ -391,6 +393,8 @@ public class GameAliPortraitActivity extends BaseActivity<MainViewModel, Activit
|
||||
user_name_tv.setText(Html.fromHtml(s.getNoticeTitle() + ""));
|
||||
user_txt_tv.setText(Html.fromHtml(s.getNoticeContent() + ""));
|
||||
circleImageView.setVisibility(View.GONE);
|
||||
noti_tv.setVisibility(View.VISIBLE);
|
||||
|
||||
} else {
|
||||
holder.setText(R.id.user_name_tv, s.getSenderName());
|
||||
holder.setText(R.id.user_txt_tv, s.getContent());
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.lifecycle.Observer;
|
||||
@@ -358,6 +359,8 @@ public class ChatFragment extends BaseLazyFragment<MainViewModel, FragmentChatBi
|
||||
public void convert(ViewHolder holder, ChatMessageBean s, int index) {
|
||||
CircleImageView circleImageView = holder.getView(R.id.user_iv);
|
||||
circleImageView.setVisibility(View.VISIBLE);
|
||||
ImageView noti_tv = holder.getView(R.id.noti_tv);
|
||||
noti_tv.setVisibility(View.GONE);
|
||||
if (TextUtils.isEmpty(s.getType())) {
|
||||
holder.setText(R.id.user_name_tv, s.getSenderName());
|
||||
holder.setText(R.id.user_txt_tv, s.getContent());
|
||||
@@ -368,6 +371,8 @@ public class ChatFragment extends BaseLazyFragment<MainViewModel, FragmentChatBi
|
||||
.into(circleImageView);
|
||||
} else {
|
||||
if (s.getType().equals("SYS_ANNOUNCE")) {
|
||||
noti_tv.setVisibility(View.VISIBLE);
|
||||
|
||||
s = getSysMessage(s);
|
||||
TextView user_name_tv = holder.getView(R.id.user_name_tv);
|
||||
TextView user_txt_tv = holder.getView(R.id.user_txt_tv);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.xyz.babelive.ui.fragment.home;
|
||||
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.graphics.Color;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
@@ -14,6 +15,15 @@ import androidx.lifecycle.ViewModelProviders;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.aliyun.player.AliPlayer;
|
||||
import com.aliyun.player.AliPlayerFactory;
|
||||
import com.aliyun.player.IPlayer;
|
||||
import com.aliyun.player.bean.ErrorCode;
|
||||
import com.aliyun.player.bean.ErrorInfo;
|
||||
import com.aliyun.player.bean.InfoBean;
|
||||
import com.aliyun.player.bean.InfoCode;
|
||||
import com.aliyun.player.source.UrlSource;
|
||||
import com.aliyun.player.videoview.AliDisplayView;
|
||||
import com.azhon.basic.base.BaseLazyFragment;
|
||||
import com.bumptech.glide.Glide;
|
||||
|
||||
@@ -53,6 +63,7 @@ public class HomeFragment extends BaseLazyFragment<MainViewModel, FragmentHomeBi
|
||||
List<TodayMatchesBean> liveList = new ArrayList<>();
|
||||
List<AdvertisementBean> bannerList = new ArrayList<>();
|
||||
List<TodayMatchesBean> hotList = new ArrayList<>();
|
||||
AliPlayer mAliPlayer ;
|
||||
|
||||
CommonAdapter commonHotGameAdapter;
|
||||
CommonAdapter commonHotUserAdapter;
|
||||
@@ -73,7 +84,9 @@ public class HomeFragment extends BaseLazyFragment<MainViewModel, FragmentHomeBi
|
||||
initHotGame();
|
||||
initHotUser();
|
||||
initLive();
|
||||
|
||||
mAliPlayer = AliPlayerFactory.createAliPlayer(getActivity());
|
||||
dataBinding.alidisplayview.setPreferDisplayView(AliDisplayView.DisplayViewType.SurfaceView);
|
||||
mAliPlayer.setDisplayView(dataBinding.alidisplayview);
|
||||
viewModel.getTodayMatchesBeanListMutableLiveData().observe(this, new Observer<List<TodayMatchesBean>>() {
|
||||
@Override
|
||||
public void onChanged(List<TodayMatchesBean> todayMatchesBeans) {
|
||||
@@ -168,89 +181,14 @@ public class HomeFragment extends BaseLazyFragment<MainViewModel, FragmentHomeBi
|
||||
return;
|
||||
}
|
||||
homePagelistBean = homePagelistBeans.get(0);
|
||||
initPlayer();
|
||||
initPlayerBody();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
boolean isFirst = true;
|
||||
|
||||
private void initPlayer() {
|
||||
LogUtils.i("播放器数据:"+ GsonUtils.beanToJSONString(homePagelistBean));
|
||||
dataBinding.video.setVideoURI(Uri.parse(homePagelistBean.getFilePath()));
|
||||
|
||||
// 方案1: MediaPlayer原生循环
|
||||
dataBinding.video.setOnPreparedListener(mp -> {
|
||||
// mp.setLooping(true);
|
||||
mp.setOnInfoListener((mp1, what, extra) -> {
|
||||
if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){
|
||||
// mp1.setVolume(0f,0f);
|
||||
LogUtils.i("播放器:111111111");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
dataBinding.video.setOnErrorListener(new MediaPlayer.OnErrorListener() {
|
||||
@Override
|
||||
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||
// 发生错误重新播放
|
||||
LogUtils.i("播放器:播放出错,请重新播放...");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
dataBinding.video.setOnInfoListener(new MediaPlayer.OnInfoListener() {
|
||||
@Override
|
||||
public boolean onInfo(MediaPlayer mp, int what, int extra) {
|
||||
if(what==MediaPlayer.MEDIA_INFO_BUFFERING_START){
|
||||
// progressDialog[0] = ProgressDialog.show(LookActivity.this, null, "正在加载,请稍后...", true, false);
|
||||
//前面若没有对progressDialog[0]初始化,运行时这里将会报错,没有对象
|
||||
LogUtils.i("播放器:正在加载,请稍后...");
|
||||
}else if(what==MediaPlayer.MEDIA_INFO_BUFFERING_END){
|
||||
LogUtils.i("播放器:MEDIA_INFO_BUFFERING_END...");
|
||||
|
||||
if(mp.isPlaying()){
|
||||
// progressDialog[0].dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
dataBinding.coverTv.setOnClickListener(v -> {
|
||||
dataBinding.coverTv.setVisibility(View.GONE);
|
||||
dataBinding.coverIv.setVisibility(View.GONE);
|
||||
dataBinding.video.start();
|
||||
|
||||
});
|
||||
|
||||
dataBinding.video.setOnCompletionListener(mp -> {
|
||||
dataBinding.coverIv.setVisibility(View.VISIBLE);
|
||||
dataBinding.coverTv.setVisibility(View.VISIBLE);
|
||||
|
||||
});
|
||||
|
||||
// if(isFirst){
|
||||
// isFirst = false;
|
||||
// dataBinding.coverTv.setVisibility(View.GONE);
|
||||
// dataBinding.coverIv.setVisibility(View.GONE);
|
||||
// dataBinding.video.start();
|
||||
// dataBinding.video.requestFocus(); //让该控件获得屏幕焦点
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
Glide.with(getActivity())
|
||||
.load(homePagelistBean.getCoverPath())
|
||||
.placeholder(R.mipmap.zanwei)
|
||||
.error(R.mipmap.zanwei)
|
||||
.into(dataBinding.coverIv);
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
private void initLive() {
|
||||
|
||||
@@ -508,7 +446,129 @@ public class HomeFragment extends BaseLazyFragment<MainViewModel, FragmentHomeBi
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
// 停止播放
|
||||
mAliPlayer.stop();
|
||||
// 销毁播放器
|
||||
mAliPlayer.release();
|
||||
// 清空引用,避免内存泄漏
|
||||
mAliPlayer = null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void initPlayerBody() {
|
||||
mAliPlayer.setScaleMode(IPlayer.ScaleMode.SCALE_ASPECT_FILL);
|
||||
|
||||
// 创建播放源对象并设置播放地址
|
||||
UrlSource urlSource = new UrlSource();
|
||||
urlSource.setUri(homePagelistBean.getFilePath());
|
||||
mAliPlayer.setDataSource(urlSource);
|
||||
// 准备播放
|
||||
mAliPlayer.prepare();
|
||||
// 开始播放
|
||||
mAliPlayer.start();
|
||||
|
||||
mAliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
|
||||
//此回调会在使用播放器的过程中,出现了任何错误,都会回调此接口。
|
||||
|
||||
@Override
|
||||
public void onError(ErrorInfo errorInfo) {
|
||||
ErrorCode errorCode = errorInfo.getCode(); //错误码。
|
||||
String errorMsg = errorInfo.getMsg(); //错误描述。
|
||||
//errorExtra为额外错误信息,形式为json字符串,示例如下,需要注意ModuleCode并不完全等同于errorCode
|
||||
//{ "Url": "xxx",
|
||||
// "Module": "NetWork",
|
||||
// "ModuleCode": "-377",
|
||||
// "ModuleMessage": "Redirect to a url that is not a media"}
|
||||
String errorExtra= errorInfo.getExtra();
|
||||
//出错后需要停止掉播放器。
|
||||
mAliPlayer.stop();
|
||||
}
|
||||
});
|
||||
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
|
||||
// 调用aliPlayer.prepare()方法后,播放器开始读取并解析数据。成功后,会回调此接口。
|
||||
|
||||
@Override
|
||||
public void onPrepared() {
|
||||
// 准备完成
|
||||
dataBinding.coverTv.setVisibility(View.GONE);
|
||||
dataBinding.coverIv.setVisibility(View.GONE);
|
||||
// dataBinding.coverIv.setVisibility(View.GONE);
|
||||
// videoWidth = mAliPlayer.getVideoWidth();
|
||||
// videoHeight = mAliPlayer.getVideoHeight();
|
||||
// LogUtils.i("获取资源的宽高:"+mAliPlayer.getVideoWidth()+";"+mAliPlayer.getVideoHeight());
|
||||
|
||||
}
|
||||
});
|
||||
mAliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
|
||||
//播放完成之后,就会回调到此接口。
|
||||
@Override
|
||||
public void onCompletion() {
|
||||
//一般调用stop停止播放视频。
|
||||
mAliPlayer.stop();
|
||||
dataBinding.coverIv.setVisibility(View.VISIBLE);
|
||||
dataBinding.coverTv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
});
|
||||
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
|
||||
//播放器中的一些信息,包括:当前进度、缓冲位置等等。
|
||||
@Override
|
||||
public void onInfo(InfoBean infoBean) {
|
||||
InfoCode code = infoBean.getCode(); //信息码。
|
||||
String msg = infoBean.getExtraMsg();//信息内容。
|
||||
long value = infoBean.getExtraValue(); //信息值。
|
||||
|
||||
//当前进度:InfoCode.CurrentPosition
|
||||
//当前缓冲位置:InfoCode.BufferedPosition
|
||||
}
|
||||
});
|
||||
mAliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
|
||||
//播放器的加载状态, 网络不佳时,用于展示加载画面。
|
||||
|
||||
@Override
|
||||
public void onLoadingBegin() {
|
||||
//开始加载。画面和声音不足以播放。
|
||||
//一般在此处显示圆形加载。
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingProgress(int percent, float netSpeed) {
|
||||
//加载进度。百分比和网速。
|
||||
//网速为预留字段,暂时为0
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingEnd() {
|
||||
//结束加载。画面和声音可以播放。
|
||||
//一般在此处隐藏圆形加载。
|
||||
}
|
||||
});
|
||||
|
||||
//
|
||||
dataBinding.coverTv.setOnClickListener(v -> {
|
||||
dataBinding.coverTv.setVisibility(View.GONE);
|
||||
dataBinding.coverIv.setVisibility(View.GONE);
|
||||
// 准备播放
|
||||
mAliPlayer.prepare();
|
||||
// 开始播放
|
||||
mAliPlayer.start();
|
||||
|
||||
});
|
||||
|
||||
// dataBinding.video.setOnCompletionListener(mp -> {
|
||||
// dataBinding.coverIv.setVisibility(View.VISIBLE);
|
||||
// dataBinding.coverTv.setVisibility(View.VISIBLE);
|
||||
//
|
||||
// });
|
||||
|
||||
Glide.with(getActivity())
|
||||
.load(homePagelistBean.getCoverPath())
|
||||
.placeholder(R.mipmap.zanwei)
|
||||
.error(R.mipmap.zanwei)
|
||||
.into(dataBinding.coverIv);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<VideoView
|
||||
<com.aliyun.player.videoview.AliDisplayView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/video"
|
||||
android:id="@+id/alidisplayview"
|
||||
app:layout_constraintDimensionRatio="375:180"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
|
||||
@@ -14,28 +14,44 @@
|
||||
app:es_shape_type="round"
|
||||
android:layout_marginEnd="@dimen/dp10"
|
||||
android:src="@mipmap/player_img"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/card_bord_bantou_bg1"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/dp5"
|
||||
android:paddingStart="@dimen/dp10"
|
||||
android:paddingEnd="@dimen/dp10"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:paddingEnd="@dimen/dp10">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/user_name_tv"
|
||||
android:textColor="@color/chat_mssage_user_color"
|
||||
android:textSize="14sp"
|
||||
/>
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/noti_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/dp2"
|
||||
android:src="@mipmap/chat_mess"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/user_name_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/chat_mssage_user_color"
|
||||
android:textSize="14sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/user_txt_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/body_txt_color"
|
||||
android:textSize="14sp"
|
||||
/>
|
||||
android:autoLink="all"
|
||||
android:textSize="14sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -26,15 +26,24 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<VideoView
|
||||
<com.aliyun.player.videoview.AliDisplayView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/video"
|
||||
android:id="@+id/alidisplayview"
|
||||
app:layout_constraintDimensionRatio="375:180"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<!-- <com.aliyun.player.videoview.AliDisplayView-->
|
||||
<!-- android:id="@+id/video"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="0dp"-->
|
||||
<!-- android:background="@color/main_color"-->
|
||||
<!-- app:layout_constraintDimensionRatio="375:180"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent"/>-->
|
||||
<ImageView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
|
||||
BIN
app/src/main/res/mipmap-xxhdpi/chat_mess.png
Normal file
BIN
app/src/main/res/mipmap-xxhdpi/chat_mess.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user