将新Surface连接到LibVLC的问题

时间:2015-04-13 18:44:20

标签: android vlc libvlc

我已经在Android应用中使用了libvlc 0.9.9一段时间了。它一直运行良好,除了4.4设备及以下在调用vlc.stop()时在某些情况下挂起。看起来问题与此处的链接有关:http://comments.gmane.org/gmane.comp.video.videolan.vlc.devel/96116

我尝试升级到最新版本并且一切正常,但在设备轮换期间除外。这是我正在使用的策略。

我在Activity中使用了retainFragment。我在retainFragment中创建了vlc播放器。在轮换时,我允许销毁活动,并重新附加retainFragment。我这样做的原因是因为肖像和风景的视图完全不同。我更倾向于使用这种方法,而不是不允许销毁活动,并且必须手动添加和删除纵向视图和横向视图。我也是这样做的,以便在等待新表面可用时让视频在后台播放。

在0.9.9中,我能够在SurfaceDesgeed中调用libvlc.detach(),在SurfaceChanged()中调用libvlc.attachSurface(mSurface,this)。通过这样做,libvlc会将自己附加到新创建的表面。但是,我试过的新版本的libvlc,包括最新版本,都不会重新附加到新创建的表面。以下是日志中显示内容的示例。

04-13 14:05:18.860 14767-15341 / com.sparc.stream E / Surface:dequeueBuffer失败(没有这样的设备) 04-13 14:05:18.860 14767-15341 / com.sparc.stream W / VLC:[7d8909cc] yuv_rgb_neon过滤器:无法获取输出图片

我不确定是否有其他人正在使用保留片段方法,但如果是这样,如果你已经使用了这个,你能分享吗?如果有帮助,我可以发布代码示例。

谢谢!

泰勒

1 个答案:

答案 0 :(得分:0)

我能够在VLC论坛上得到答案。如果其他人有这个问题,这就是答案......

最新版本的libvlc添加了一个setVideoTrack()方法。

为了将玩家设置为新的表面,您可以:

setVideoTrack(-1); setVideoTrack(0); //or 1 if your video track is 1