使用流式H.264样本的AVAssetReader

4

我正在编写一个RTSP/H.264客户端。Live555用于解析RTSP非常棒,但是使用ffmpeg进行软件解码太慢了。我想使用AVFoundation来进行硬件解码。但我不确定该如何操作。我的问题是,是否有办法让AVFoundation(AVAssetReader?)在样本到达时对其进行解码并在屏幕上显示视频流?

2个回答

3

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


谢谢,zhzhy。那是我考虑的一种方法,不过我还没有尝试过。等我尝试之后再与你联系。 - mdavis
将数据写入mp4文件并硬件解码它,速度可能比libav慢(甚至更慢)。我现在正在考虑的一种方法是创建一个从内存中读取和写入的URL。 - Cthutu
哈,@Cthutu,如果你能像你说的那样得到一个方法,那就太棒了! - zhzhy
我尝试使用自定义URL并确认可以通过dataWithContentsOfURL使用它,但是尽管将其传递给AVFoundation,它仍然不使用它。似乎AVFoundation不使用URL加载系统,而只支持本地文件和HTTP。 - Cthutu
1
我们最近发现,您可以使用标准的C文件IO在文件系统中创建URL,并将该URL提供给AssetWriter。普遍的共识是大多数读取将失败,但只需继续忽略错误,最终您将获得良好的读取结果。 - Michelle Cannon

0

在iOS应用程序中使用ffmpeg代码存在许多不明确的法律问题,有关更好的iOS 8方法,请参阅此问题的已接受答案:https://dev59.com/ql8e5IYBdhLWcg3w7-Jz - MoDJ
不是很准确,我不知道你们这些人从哪里得到的。使用任何开源代码都存在风险。FFMPEG是LGPL许可证,翻译可以将其编译为静态库使用。但现在随着iOS 8软件解码正式死亡,这已经成为了无意义的话题。 - Michelle Cannon
如果您想了解更多有关此问题的信息,请查看此文章:http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/ - MoDJ
2009年,我建议您阅读ffmpeg.org网站上的内容。使用任何开源软件都存在风险。然而,话虽如此,在应用商店中有很多应用程序使用ffmpeg。从iOS 8开始,这种情况将会减少,不是因为许可证问题,而是因为在IOS上,软件解码不再是ffmpeg的主要用途。 - Michelle Cannon
是的,它们都违反了ffmpeg附带的LGPL许可证。如果您真的想了解更多信息,ffmpeg作者在这里解决了这个问题:https://trac.ffmpeg.org/ticket/1229 但归根结底,当静态链接到iOS应用程序时,GPL和LGPL代码是一个真正的灰色地带。不能仅基于个人观点忽略这个法律问题。 - MoDJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接