【问题标题】:How do I create a custom media player to play a custom codec in Android?如何创建自定义媒体播放器以在 Android 中播放自定义编解码器?
【发布时间】:2011-04-07 09:03:58
【问题描述】:

n00b 在这里(第一个 Android 项目)。我获得了一个与 Android 固件版本集成的自定义视频编解码器。它是一个 .so 文件,其中包含一个继承自 MediaPlayerInterface 的类,以及一个自定义 MediaPlayerService 实现,用于从适当的文件类型的 create() 工厂函数返回自定义编解码器类的实例。

我想将此编解码器用作视频播放器应用程序的一部分,该应用程序可以安装在固件中不包含编解码器的手机上,方法是将 .so 文件放在我的 libs/armeabi 文件夹中并通过 JNI 调用它。

this question 的回答中我了解到,在 MediaPlayer 框架内不可能做到这一点,我必须从头开始创建一个新的媒体播放器。首先,我用 Java 实现了一个 UI,并将其设置为使用自定义视图(而不是 VideoView),它扩展了 SurfaceView 并使用 MediaPlayer 类的实例来播放视频。然后我用自定义媒体播放器 Java 类替换了这个 MediaPlayer 实例。我已经设置了 JNI 接口,模仿了 android_media_MediaPlayer.cpp 的做法,并在 JNI 代码中调用了 MediaPlayer C++ 类。现在我需要用自定义 C++ 媒体播放器类替换 that

这是我开始遇到问题的地方。实现自定义播放器的推荐方法是什么?有吗?除了浏览源代码之外,是否有任何这些东西的在线文档?我可以使用多少框架,我必须自己重新实现多少?我是否必须实现自己的 MediaPlayerService 等价物?

非常感谢任何提示。

【问题讨论】:

    标签: android video media-player codec mediaplayerservices


    【解决方案1】:

    您可以查看 Android 的源代码以了解如何使用 Android 已经用 Java 实现了 MediaPlayer 接口。你可以 遵循类似的路线。

    MediaPlayer Class Reference

    【讨论】:

    • 感谢您的回复。在发布最初的问题之前,我通读了 MediaPlayer 界面的 Android 源代码。遵循类似的路线似乎是不可能的。具体来说,内置的 MediaPlayer 使用了 ACCESS_SURFACE_FLINGER 权限,这似乎被非内置的应用程序拒绝。我希望用户能够下载和安装我的播放器,而不是收到预装在手机上的播放器。
    • 您好,请分享您关于如何为 android 实现自定义编解码器的最新发现。 @samgak
    【解决方案2】:

    我希望您的编解码器不会占用过多 CPU。 Android 仅支持 H.264 的主要原因是(我猜)大多数设备都支持此编解码器的硬件。其他编解码器需要由 CPU 处理,这可能不够强大。

    【讨论】:

      【解决方案3】:

      你为什么不使用 VLC 来代替?你可以得到源代码,支持各种格式。为你的目的修剪它,剥皮,瞧,c'est fini。我知道他们现在实际上正在破解代码,你可以跳过它并帮助他们。

      http://gigaom.com/video/vlc-for-android-demo-beta/

      【讨论】:

      • VLC 在 GPLv2 许可下发布。您不能在自己的商业项目中使用该代码。
      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多