Android上的LibVLC不更新SurfaceTexture

时间:2016-03-18 10:45:43

标签: android opengl-es java-native-interface libvlc

我们希望在我们的项目中集成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在内部不起作用。

任何人都有同样的问题吗?

先谢谢

0 个答案:

没有答案