播放视频时序图
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() | 获取视频信息 |
本文由 bt 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。