使用 AVFoundation 在 iOS 上播放套接字流式传输的 h.264 电影
Posted
技术标签:
【中文标题】使用 AVFoundation 在 iOS 上播放套接字流式传输的 h.264 电影【英文标题】:Play socket-streamed h.264 movie on iOS using AVFoundation 【发布时间】:2012-04-05 23:25:47 【问题描述】:我正在开发一个小型 iPhone 应用程序,该应用程序使用常规套接字通过网络连接流式传输电影内容。视频采用H.264
格式。但是,我在播放/解码数据时遇到了困难。我一直在考虑使用FFMPEG
,但是许可证使它不适合该项目。我一直在研究 Apple 的 AVFoundation
框架(尤其是 AVPlayer
),它似乎能够处理 h264 内容,但是我只能找到使用 url 启动电影的方法——而不是通过证明从网络流式传输的内存缓冲区。
我一直在做一些测试以实现这一点,使用以下方法:
-
使用普通的
AVPlayer
播放电影。每次在网络上接收到数据时,都会使用带有附加模式的 fopen 将其写入文件。然后使用更新的数据重新加载/重新创建 AVPlayer
的资产。这种方法似乎有两个问题:首先,在卸载第一个资产并加载新资产时,屏幕会短暂黑屏。其次,我不知道播放停止的确切位置,因此我不确定如何找到开始播放新资产的正确位置。
第二种方法是像第一种方法一样将数据写入文件,但不同之处在于将数据加载到第二个资产中。然后使用AVQueuedPlayer
在播放器中插入/排队第二个资产并在缓冲完成后调用。然后可以在没有黑屏的情况下卸载第一个资产。然而,使用这种方法(比第一种方法)更麻烦的是找出从哪里开始播放新资产。
有没有人做过这样的事情并让它发挥作用?有没有使用AVFoundation
的正确方法?
【问题讨论】:
您找到答案了吗?我也正在尝试播放包含单个帧的 h264 文件(.264 文件扩展名)并尝试对其进行解码。 AVAssetReader 不接受这种文件格式,我唯一的计划是每帧创建一个 mp4 文件(这听起来很疯狂)。 来源必须推送视频而不是让应用程序拉取视频是否有特殊原因? HLS 通常以相反的方式工作。如果您的源计算机可以运行 OSX,则有 Apple 工具可以为您从 UDP rtsp 输入流中进行分段。如果没有,您可能会假冒 AVPlayer 认为它正在处理正常的 HLS,方法是在电话上运行代理 - 在文件到达时将文件分块,并编写一些代码来生成适当的假 .m3u8 播放列表来表示这些块。 【参考方案1】:执行此操作的官方方法是 HTTP Live Streaming 格式,它支持多个质量级别(除其他外)并在它们之间自动切换(例如:如果用户从 WiFi 移动到蜂窝网络)。
您可以在此处找到文档:Apple Http Streaming Docs
【讨论】:
有没有办法通过 AVPlayer 流式传输 Web 套接字数据来播放视频。以上是关于使用 AVFoundation 在 iOS 上播放套接字流式传输的 h.264 电影的主要内容,如果未能解决你的问题,请参考以下文章