我们希望在我们的项目中集成libvlc,取代Android MediaPlayer。
项目编译,libvlc初始化为输出错误但没有任何反应。
我们不得不在一个Android小部件上将视频渲染为SurfaceView,GLSurfaceView或TextureView,我们必须渲染一个在JNI部分中创建GL纹理的SurfaceTexture。我们正在使用这种纹理在我们的游戏中渲染天空圆顶。
现在我们正在使用Android MediaPlayer将视频解码为纹理并运行完美。因此问题与libVLC集成有关。没有写入跟踪日志,所以很难找到问题所在。
总结我们的代码:
1 - 设置libvlc库
ArrayList<String> options = new ArrayList<String>();
options.add("-vvv"); // verbosity
libVLC = new LibVLC(options);
libVLC.setOnNativeCrashListener(this);
mediaPlayer = new MediaPlayer(libVLC);
mediaPlayer.setEventListener(this);
2 - 加载电影源
if (mediaPath.startsWith("http")) {
media = new Media(libVLC, mediaUri);
this.isLoaded = (media.parse(Media.Parse.FetchNetwork) && getMediaInformation()) ||
(media.parse(Media.Parse.ParseNetwork) && getMediaInformation());
} else if (mediaPath.startsWith("android.resource://")) {
media = new Media(libVLC, mediaUri);
} else {
media = new Media(libVLC, mediaPath);
this.isLoaded = (media.parse(Media.Parse.FetchLocal) && getMediaInformation()) ||
(media.parse(Media.Parse.ParseLocal) && getMediaInformation());
}
3 - 在渲染循环中更新纹理
synchronized(this) {
if(isFrameNew) {
if(surfaceTexture != null) surfaceTexture.updateTexImage();
isFrameNew = false;
isMoviedone = false;
return true;
}
return false;
}
但没有。纹理是空的,似乎libvlc在内部不起作用。
任何人都有同样的问题吗?
先谢谢