【问题标题】:Issue with attaching a new Surface to LibVLC将新 Surface 附加到 LibVLC 的问题
【发布时间】:2015-04-13 18:44:19
【问题描述】:

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

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

我在 Activity 中使用了一个 reservedFragment。我正在retainedFragment 中创建vlc 播放器。在轮换时,我允许销毁活动,并重新附加retainedFragment。我这样做的原因是因为纵向和横向的视图完全不同。我更喜欢使用这种方法,而不是不允许破坏活动并且必须手动添加和删除纵向与横向视图。我也这样做是为了在等待新表面可用时保持视频在后台播放。

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

04-13 14:05:18.860 14767-15341/com.sparc.stream E/Surface: dequeueBuffer failed (No such device) 04-13 14:05:18.860 14767-15341/com.sparc.stream W/VLC: [7d8909cc] yuv_rgb_neon filter: can't get output picture

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

谢谢!

泰勒

【问题讨论】:

    标签: android vlc libvlc


    【解决方案1】:

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

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

    为了将播放器设置为新的表面,您可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多