基于libvlc aar的android播放器(点播与本地播放)
点播与本地播放大部分流程差不多,只是一个网络一个是本地。今天介绍一下基于libvlc的android播放器,点播与本地播放部分流程。
参考文章:
VLC for Android编译出AAR文件(最新vlc代码)(https://blog.csdn.net/u010735007/article/details/108141213)
基于libvlc aar的android播放器实例(https://blog.csdn.net/u010735007/article/details/108168267)
基于libvlc aar的android播放器(点播与本地播放)(https://blog.csdn.net/u010735007/article/details/108424493)
基于libvlc aar的android截屏和录制视频功能(https://blog.csdn.net/u010735007/article/details/108517985)
android,ios,linux多平台libvlc api文档说明笔记(不断更新)(https://blog.csdn.net/u010735007/article/details/108198711)
一.本地播放与点播最大区别就是设置播放源方法,下面就是设置播放源的代码:
1.本地播放
try {
final Media media = new Media(mLibVLC, getAssets().openFd(ASSET_FILENAME));
mMediaPlayer.setMedia(media);
media.release();
mMediaPlayer.play();
} catch (IOException e) {
e.printStackTrace();
}
2.点播
Uri uri = Uri.parse("http://xxxx/xxx.mp4");//rtsp流地址或其他流地址
final Media media = new Media(mLibVLC, uri);
mMediaPlayer.setMedia(media);
media.release();
mMediaPlayer.play();
二.主要部分代码介绍
1.主要流程

里面还有状态的用处不知道什么意思,ESDeleted,ESSelected,ESAdded,到时候观察一下源代码在介绍一下
2.播放控制条
播放控制条一般包括播放,暂停,时间进度条,总时间,当前播放时间,加载框

//根据buffer显示加载框
else if (event.type == MediaPlayer.Event.Buffering){
Log.d(TAG, "VLC Buffering:" + event.getBuffering());
if (event.getBuffering() >= 100)
progressBar.setVisibility(View.GONE);
else
progressBar.setVisibility(View.VISIBLE);
}
//获取总时间
else if (event.type == MediaPlayer.Event.Playing){
time_total.setText(stringForTime((int)mMediaPlayer.getLength()));
}
//获取当前时间
else if (event.type == MediaPlayer.Event.TimeChanged){
time_current.setText(stringForTime((int) event.getTimeChanged()));
}
//获取当前时间占总时间的比率
else if (event.type == MediaPlayer.Event.PositionChanged){
mProgress.setProgress((int)(event.getPositionChanged()*100));
}
//设置播放还是停止
play_pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
play_pause.setImageResource(R.drawable.media_pause2);
}
else {
mMediaPlayer.play();
play_pause.setImageResource(R.drawable.media_play);
}
}
});
3.片源信息,音轨和子画面(字幕)等设置
使用ffprobe查看片源的信息(电影文件需要自己下载)

视频流:Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
音频流1:Stream #0:1(por): Audio: aac (LC), 48000 Hz, stereo, fltp (default) (forced)
音频流2:Stream #0:2(eng): Audio: aac (LC), 48000 Hz, stereo, fltp
字幕流1:Stream #0:3(por): Subtitle: subrip
字幕流2:Stream #0:4(por): Subtitle: subrip (default) (forced)
1)片源信息

//获取片源信息
Media.AudioTrack audioTrack = (Media.AudioTrack) media.getTrack(i);
info = info + "音频"+i+"\n" + "编码:" + audioTrack.codec + "\n"+ "声道:" + audioTrack.channels + "\n"
+ "采样率:" + audioTrack.rate + "Hz\n\n";
Media.VideoTrack videoTrack = (Media.VideoTrack) media.getTrack(i);
info = info + "视频"+i+"\n" + "编码:" + videoTrack.codec + "\n"+
"分辨率:" + videoTrack.width + "*" + videoTrack.height + "\n"
+ "帧率:" + videoTrack.frameRateNum + "\n\n";
2)音轨设置

//获取全部音轨
final MediaPlayer.TrackDescription[] audioTracks = mediaPlayer.getAudioTracks();
//设置当前使用哪个音轨
mediaPlayer.setAudioTrack(audioTracks[i].id);
3)字幕设置

//获取全部子画面(字幕)
final MediaPlayer.TrackDescription[] spuTracks = mediaPlayer.getSpuTracks();
//设置当前使用哪个子画面(字幕)
mediaPlayer.setSpuTrack(spuTracks[i].id);
子画面常用是字幕,也可能其他,暂时还没有发现其他类型子画面
具体的代码,大家可以下载,git地址:https://gitee.com/newpoyang/vlc-player,本人喜欢用码云,国内服务器比较快
如有用到此功能的朋友,可以留言交流和点赞
更多推荐


所有评论(0)