【问题标题】:Raw H264 NALU hardware decode on iOSiOS 上的原始 H264 NALU 硬件解码
【发布时间】:2013-01-26 21:41:12
【问题描述】:

我从 IP 摄像头(通过 Live555)接收原始 H.264 NALU,我想使用硬件对其进行解码,因为 FFmpeg 很棒,但速度太慢(摄像头传感器很大)。

我看到的唯一解决方案是将 NALU 写入某些电影容器文件,例如 MPEG-4,然后使用 AVAssetReader 读取和解码该文件。

我在杂草丛中吗?是否有人成功从流中解码 H.264 NALU?有没有人有任何将 NALU 写入 MPEG-4 文件的提示?其他想法?

【问题讨论】:

    标签: iphone ios ipad h.264


    【解决方案1】:

    就像 Matt 提到的那样,没有直接访问 Apple 的 H264 解码器的权限。

    但是,我在 ffmpeg 和 h264 解码方面取得了成功。就像你提到的,我已经用 LGPL 构建了 ffmpeg,我能够将 H264 流一直解码为实时高清流,在 ipad 和 iphone 上都没有延迟。 ffmpeg 不需要什么花哨的东西,你可以找到一堆标准的解码 c++ 代码,它们在 iOS 上运行得很好。此外,在我的例子中,H264 NALU 是通过 RTP/RTSP 实时交付的。

    另外,如果我是你,我会通过 xcode 工具运行你的应用程序,以真正了解你的瓶颈在哪里,但我会非常惊讶它是在 ffmpeg 解码步骤中。希望这些信息对你有所帮助。

    【讨论】:

    • 感谢您确认您已成功使用 ffmpeg 解码实时高清。我的设置是一样的——RTSP/RTP + ffmpeg。阅读您的帖子后,我仔细查看,发现我的服务器正在以 1,500,000 bps 的比特率发送 2144 x 1944 视频。如果我将比特率降低到 350,000 bps,nonIDR 帧解码 (avcodec_decode_video2) 将在大约 80 毫秒内运行,Yuv -> RGB 颜色对话 (sws_scale) 在大约 65 毫秒内运行。这些是来自 iPad 3 的数字。我很高兴听到您是否认为我可以从 iPad 中榨取更多。谢谢!
    • 你的解码步骤是最快的。但是,我强烈建议不要使用 ffmpeg 执行 yuv-rgb 转换,而是使用 opengl 着色器,它将该过程卸载到 GPU。
    • @Aki:你有没有在 Apple 批准进入 App Store 的应用中使用这个?
    • @JakobAlminde - 是的,我做到了。该应用程序仍在应用程序商店中。只需确保您遵守ffmpeg.org/legal.html 上发布的 LGPL 要求即可
    • 谢谢,阿基!我主要担心他们可能会因为使用 RTP 而不是 HTTP Live Streaming 而拒绝它。
    【解决方案2】:

    很遗憾,您目前无法执行此操作。随意向 Apple 提交一份关于想要这种对硬件解码器的访问的雷达。它肯定会被解决为重复的:-)。我认为这是出于许可原因,他们无法授予对硬件编解码器的这种访问权限。

    因此,您将不得不使用软件解码器。请注意,如果您要发布到 App Store,那么您需要具有非 GPL 许可证的东西(除非您也想开源您的应用程序)。

    【讨论】:

    • 哪一部分不能做?无论数据是在内存中还是在电影文件中,H.264 硬件解码是否完全不可行? WRT GPL、FFmpeg 可以构建用于在 iTMS 中可管理的 LGPL 许可。谢谢!
    • 对不起,我只是说流式硬件解码。如果它在一个文件中,那么您可以播放它并且可以使用硬件解码器。当然可以使用 LGPL,但仍然不理想,因为您必须提供可链接的目标文件。
    猜你喜欢
    • 2014-01-26
    • 2012-05-09
    • 2014-02-06
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多