ijkplayerDEMO浅析

Android · 2022-06-01 · 1677 人浏览

播放视频时序图

sequenceDiagram VideoActivity->>VideoActivity: onCreate() called VideoActivity->>VideoActivity: parseIntent:获取视频路径 VideoActivity ->> RecentMediaStorage:saveUrlAsync(videoPath) RecentMediaStorage ->> RecentMediaStorage :saveToDB VideoActivity ->> IjkMediaPlayer: loadLibrariesOnce(null):加载so库,只会触发1次 IjkMediaPlayer ->>IjkMediaPlayer:System.loadLibrary:ijkffmpeg,ijksdl,ijkplayer IjkMediaPlayer ->>IjkMediaPlayer:native_profileBegin("libijkplayer.so") jni初始化so VideoActivity ->> IjkVideoView:init Note right of IjkVideoView: 封装的view IjkVideoView ->> IjkVideoView:setController 底部控制器和播放界面绑定 IjkVideoView ->> IjkVideoView:setHudView,setPath Note right of IjkVideoView: 兼容新版Android,支持设置path或uri IjkVideoView ->> IjkVideoView:start() 开始播放

设置视频路径的流程

flowchart TD A[加载视频] --> B{是path或者uri} B -- path --> C1[setVideoPath] B -- uri --> C2[setVideoURI] C1 --> D1{包含adaptationSet字串} D1 -- 包含 -->E1[路径存为全局变量] E1-->F1["Uri.parse(#quot;ijklas:#quot;)"] F1 --> C2 D1 -- 不包含 -->E2["Uri.parse(path)"] E2 --> C2 C2 --> CA[openVideo] CA --> CB[根据设置的播放器构建mediaplayer] CB -->CC[设置监听] CC --> CD[URI解析成mediaplayer可以识别的] CD -->CE[MediaPlayer绑定surfaceView] CE -->CF[其余属性设置] CF --> CG["mMediaPlayer.start()播放视频"]

IjkMediaPlayer

方法 用处
setDisplay(SurfaceHolder sh) 设置显示区域
setSurface(Surface surface) 设置显示区域,基本等同于传入SurfaceHolder,但是不支持setScreenOnWhilePlaying
setDataSource(Context context, Uri uri)
setDataSource(Context context, Uri uri, Map<String, String> headers)
设置播放数据源
setDataSource(String path) 设置数据源,支持网络流格式(不支持https)
setDataSource(FileDescriptor fd)
setDataSource(FileDescriptor fd, long offset, long length)
文件流的格式播放
start() 开始播放
stop() 停止播放
pause() 暂停播放
setScreenOnWhilePlaying(boolean screenOn) 允许后台或者灭屏时播放
getVideoWidth()
getVideoHeight()
getVideoSarNum()
getVideoSarDen()
prepare接口回调时可以获取到视频信息
isPlaying() 是否在播放
seekTo() 返回上次时间点(类似于定位?)
getCurrentPosition() 获取当前时间点
getDuration() 获取视频时长
release() 释放资源,demo里是播放前释放
setLooping(boolean looping) 设置循环
setSpeed(float speed) 设置倍速,百度上查最大支持2.0速度
setVolume(float leftVolume, float rightVolume) 设置音量
getMediaInfo() 获取视频信息
bilibili 视频 学习笔记
Theme Jasmine by Kent Liao