【问题标题】:AVAssetReader with streamed H.264 samples带有流式 H.264 样本的 AVAssetReader
【发布时间】:2012-08-25 18:42:39
【问题描述】:

我正在编写一个 RTSP/H.264 客户端。解析 RTSP 的 Live555 很棒,但是使用 ffmpeg 进行软件解码太慢了。我想使用 AVFoundation 对样本进行硬件解码。我不知道该怎么做。我的问题是,有没有办法让 AVFoundation (AVAssetReader?) 在这些样本进入时对其进行解码并在屏幕上显示提要?

【问题讨论】:

    标签: ios stream decode h.264 rtsp


    【解决方案1】:

    从现在开始,使用H264编码的媒体样本来自内存不能使用硬件解码,因为iOS没有开放这些接口,你只能解码本地文件或通过HTTP Live Streaming。但是,有一种可能的解决方案是将每个样本写入一个单独的 mp4 文件,然后用 AVAssetReader 读取它,但我没有尝试过,可能速度是一个限制。

    【讨论】:

    • 谢谢,zhzhy。这是我正在考虑的一种方法,但我还没有尝试过。到时候我会回来的。
    • 写入 mp4 文件并进行硬件解码只是我们比 libav 慢(可能更慢)。我现在正在研究的一种方法是创建一个从内存读取和写入的 URL。
    • 哈哈,@Cthutu,如果你能像你说的那样得到一种方法,那就太好了!
    • 我尝试使用自定义 URL 并确认我可以通过 dataWithContentsOfURL: 使用它,但尽管将它传递给 AVFoundation,但它并没有使用它。看来 AVFoundation 没有使用 URL 加载系统,而只是支持本地文件和 http。
    • 我们最近发现您可以使用标准的 c 文件 io 在文件系统中创建一个 url,并将该 url 提供给assetwriter。普遍的共识是大多数读取都会失败,但只要继续忽略错误,您最终会获得良好的读取。
    【解决方案2】:

    【讨论】:

    • 在 iOS 应用程序中使用 ffmpeg 代码有许多模糊的法律问题,请参阅此问题的公认答案以获得更好的 iOS 8 方法:stackoverflow.com/questions/25197169/…
    • 不是真的,我不知道你们有没有得到这个。使用任何开源代码都是有风险的。 FFMPEG 是 LGPL,翻译后你可以将它编译为静态库。静音点真的,用IOS 8软件解码正式死了。
    • 如果您想了解有关该问题的更多信息,请查看这篇文章:multinc.com/2009/08/24/…
    • 2009 真的,我建议您阅读 ffmpeg.org 在该网站上所说的内容。再次对您使用的任何开源软件进行更改。但是这表明应用程序中有很多应用程序使用 ffmpeg 的商店。从 iOS 8 开始,这将不是因为许可而减少,而是因为软件解码在 IOS 上占主导地位的 ffmpeg 不再是唯一的游戏。
    • 是的,它们都违反了 ffmpeg 提供的 LGPL 许可证。如果您真的想了解更多关于它的信息,ffmpeg 作者在这里解决了这个问题:trac.ffmpeg.org/ticket/1229 但底线是 GPL 和 LGPL 代码在静态链接到 iOS 应用程序时是一个真正的灰色区域。不能根据个人意见简单地忽略这一法律问题。
    猜你喜欢
    • 2012-06-22
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多