修改首页的播放为 aliplayer

This commit is contained in:
xuhuixiang
2026-02-11 16:54:59 +08:00
parent f43a810bb1
commit d77c742ad5
8 changed files with 189 additions and 95 deletions

View File

@@ -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";

View File

@@ -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());

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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"

View File

@@ -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>

View File

@@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB