29

我想将视频从 iPhone 相机流式传输到 Mac 上运行的应用程序。想想有点像视频聊天,但只有一种方式,从设备到接收器应用程序(而且它不是视频聊天)。

到目前为止我的基本理解:

  1. 您可以使用 AVFoundation 获取“实时”摄像机数据而不保存到文件,但它是未压缩的数据,因此我必须自己处理压缩。
  2. 没有内置的 AVCaptureOutput 支持发送到网络位置,我必须自己解决这个问题。

我对上述内容是正确的还是我已经偏离了轨道?

Apple Tech Q&A 1702提供了一些有关将单个帧保存为图像的信息 - 这是解决此问题的最佳方法吗?只是节省 30fps,然后像 ffmpeg 之类的东西来压缩它们?

有很多关于 iPhone 直播的讨论,但关于发送直播视频的人的信息却少得多。我希望有一些广泛的笔触可以让我指出正确的方向。

4

2 回答 2

24

您可以使用AVCaptureVideoDataOutput和 asampleBufferDelegate来捕获原始压缩帧,然后您只需通过网络将它们流式传输。 AVFoundation提供将帧编码为本地视频文件的 API,但不提供任何用于流式传输到网络的 API。最好的办法是找到一个通过网络流式传输原始帧的库。我将从 ffmpeg 开始;我相信libavformat支持RTSP,看ffserver代码。

请注意,您应该配置AVCaptureVideoDataOutput为提供压缩帧,这样您就可以避免在没有硬件编码优势的情况下压缩原始视频帧。

于 2010-11-10T09:11:36.143 回答
20

这在很大程度上取决于您的目标分辨率以及您所针对的帧速率性能类型。

从抽象的角度来看,我可能会有一个捕获线程直接从 AVCaptureOutput 填充缓冲区,以及一个通信线程每隔x毫秒将缓冲区(如果需要填充)发送和重新归零到先前指定的主机。

在您完成初始数据传输后,我将努力以最低分辨率实现 15fps,并一直努力直到缓冲区溢出,然后通信线程才能传输,这需要平衡图像分辨率、缓冲区大小(可能取决于 GSM,很快是 CDMA 帧大小),最后是您可以传输该缓冲区的最大速率。

于 2010-11-10T03:24:54.727 回答