播放器SDK接入文档
1. 接入前准备
1.1. 注册
- 注册应用 https://cosmos.immomo.com/
- 开通短视频服务
1.2. 工程配置
- 权限配置
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 最小支持版本
Android4.2 API17
- 添加工程依赖
implementation 'com.cosmos.mediax:playersdk:1.2.9'
- so架构
SDK 提供了armeabi-v7a 、 armeabi 、arm64-v8a 架构,请在app/build.gradle文件中配置合适的代码。(在android/defaultConfig/结构下添加)
ndk {
abiFilters "armeabi-v7a","armeabi","arm64-v8a"
}
- 混淆配置
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class tv.danmaku.ijk.media.** {*;}
-keep class com.mm.mmfile.** {*;}
-keep class com.momo.proxy.**{*;}
-keep class com.cosmos.mdlog.** {*;}
- 视频格式与协议
格式:mp4(h264/h265)、flv
协议:http/https 本地视频(文件绝对路径/文件协议路径)
2. 功能接入
2.1. 基础设置
- 初始化
PlayerManager.init(this, "your app id");
//设置视频缓存路径,如果不设置,默认在/sdcard/ijkCache目录下
File file = new File(Environment.getExternalStorageDirectory(), "ijkCache");
PlayerManager.initCachePath(file.getAbsolutePath());
- 预加载操作(其他接口参考接口文档 IMediaPreloader)
//判断视频是否已经预加载
PlayerManager.getMediaPreLoader().isTakCachedByUrl(videoUrl);
//添加预加载任务
PlayerManager.getMediaPreLoader().addTask(videoUrl);
//取消预加载任务
PlayerManager.getMediaPreLoader().clearTaskByUrl(videoUrl);
2.2. 使用VideoView播放视频
- 构建VideoView
//布局添加,或直接构建
<com.mm.player.VideoView
android:id="@+id/player_videoview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
videoView = findViewById(R.id.player_videoview);
//videoView = new VideoView(getContext());
- 设置
//设置裁切模式
videoView.setScaleType(ScalableType.FIT_CENTER);
//设置状态监听
videoView.setOnStateChangedListener(new ICosPlayer.OnStateChangedListener() {
@Override
public void onStateChanged(final int state) {
if (state == ICosPlayer.STATE_BUFFERING) {
//do something,eg 显示loading
} else if (state == ICosPlayer.STATE_READY) {
//do something
}
}
});
- 播放控制
//开始播放
videoView.playVideo(videoUrl);
//跳转
videoView.seekTo(3000);
playPauseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (videoView.isPlaying()) {
videoView.pause();
playPauseBtn.setImageResource(android.R.drawable.ic_media_play);
} else {
videoView.resume();
playPauseBtn.setImageResource(android.R.drawable.ic_media_pause);
}
}
});
//记录当前播放位置
lastPos = videoView.getCurrentPosition();
//释放
videoView.releaseVideo();
3. 播放器错误码
- -1001
404,资源不存在,属于服务器错误
- -1002
io错误,属于网络超时或者代理出现错误
- -2001
创建音频解码器错误,属于视频文件损坏或不支持
- -2003
协议不支持,属于网络或文件错误
- -2004
文件格式不支持,属于视频文件损坏或不支持,一般由代理模块下载文件错误导致
- -2005
硬解码错误,属于一般由于文件损坏或者解码器内部状态错误导致
- -541478725
无网络或文件错误,属于文件不存在或损坏,一般由于代理模块下载文件失败导致