GSYVideoPlayer 是一个比较火的开源框架。其支持Android 系统中的MediaPlayer内核,ExoPlayer 内核, ijkPlayer 内核。 在我使用的过程中发现不支持h265格式的avi 文件播放,所以我实现了一个VLC内核。
1.继承AbstractMediaPlayer,VLCMediaPlayer.java
public class VLCMediaPlayer extends AbstractMediaPlayer {
private final LibVLC mLibVLC ;
private final MediaPlayer mInternalMediaPlayer;
private String mDataSource;
private final VLCMediaPlayerListenerHolder mInternalListenerAdapter;
private final Object mInitLock = new Object();
private static MediaInfo sMediaInfo;
private Media mCurrentMedia = null;
//默认设为1,等开始播放后才能获取到正确的视频宽高
private int videoWidth=1,videoHeight=1;
public VLCMediaPlayer() {
synchronized (mInitLock) {
ArrayList<String> options = new ArrayList<String>();
options.add("--avcodec-codec=h265,h264");
options.add("--rtsp-tcp");
options.add("--aout=opensles");
options.add("--audio-time-stretch");
options.add("-vvv");
mLibVLC = new LibVLC(SYunApplication.getInstance(),options);
mInternalMediaPlayer = new MediaPlayer(mLibVLC);
}
mInternalListenerAdapter= new VLCMediaPlayerListenerHolder(this);
attachInternalListeners();
}
private void attachInternalListeners() {
mInternalMediaPlayer.setEventListener(mInternalListenerAdapter);
}
@Override
public void setDisplay(SurfaceHolder sh) {
Timber.e("call setDisplay ");
}
@Override
public void setDataSource(Context context, Uri uri) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
mCurrentMedia = new Media(mLibVLC, uri);
mInternalMediaPlayer.setMedia(mCurrentMedia);
}
@Override
public void setDataSource(Context context, Uri uri, Map<String, String> headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
mCurrentMedia = new Media(mLibVLC, uri);
mInternalMediaPlayer.setMedia(mCurrentMedia);
}
@Override
public void setDataSource(FileDescriptor fd) throws IOException, IllegalArgumentException, IllegalStateException {
mCurrentMedia = new Media(mLibVLC, fd);
mInternalMediaPlayer.setMedia(mCurrentMedia);
}
@Override
public void setDataSource(String path) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
mDataSource=path;
Timber.e(path);
if(path.startsWith("http")||path.startsWith("rtsp")){
mCurrentMedia = new Media(mLibVLC, Uri.parse(mDataSource));
}else {
mCurrentMedia = new Media(mLibVLC, path);
}
mInternalMediaPlayer.setMedia(mCurrentMedia);
}
@Override
public String getDataSource() {
return mDataSource;
}
@Override
public void prepareAsync() throws IllegalStateException {
mCurrentMedia.addOption(":video-paused");
mInternalMediaPlayer.play();
}
@Override
public void start() throws IllegalStateException {
Timber.e("start");
mInternalMediaPlayer.play();
}
@Override
public void stop() throws IllegalStateExc

本文介绍如何为GSYVideoPlayer添加VLC内核支持,以解决不支持h265格式的avi文件播放的问题。通过继承AbstractMediaPlayer创建VLCMediaPlayer,并实现了BasePlayerManager接口。

2118

被折叠的 条评论
为什么被折叠?



