7

我有构建 iOS 应用程序的经验,但没有视频经验。我想构建一个将实时视频流式传输到服务器的 iPhone 应用程序。一旦在服务器上,我会将该视频实时传送给消费者。

我已经阅读了相当多的材料。有人可以告诉我以下是否正确并为我填空。

  1. 要在 iPhone 上录制视频,我应该使用 AVFoundation 类。使用 AVCaptureSession 委托方法 captureOutput:didOutputSampleBuffer::fromConnection 时,我可以访问每一帧视频。现在我有了视频帧,我需要对帧进行编码
    • 我知道 Foundation 类仅通过 AVAssetWriter 提供 H264 编码,而不是通过轻松支持流式传输到 Web 服务器的类。因此,我只能将视频写入文件。
    • 我读过其他帖子说他们可以使用两个 AssetWritter 写入 10 秒块,然后 NSStream 将这 10 秒块写入服务器。有人可以解释如何编码使用两个 AVAssetWriters 一起工作来实现这一点。如果有人有代码,请分享。
4

1 回答 1

6

您是正确的,在 iPhone 上使用硬件编码器的唯一方法是使用 AVAssetWriter 类将编码的视频写入文件。不幸的是,在文件关闭之前, AVAssetWriter 不会将 moov 原子写入文件(解码编码的视频所必需的)。

因此,将编码视频流式传输到服务器的一种方法是将 10 秒的视频块写入文件,关闭它,然后将该文件发送到服务器。我已经读过这种方法可以在没有文件关闭和打开造成的播放间隙的情况下使用,尽管我自己没有尝试过。

我在这里找到了另一种流式传输视频的方法。

此示例打开 2 个 AVAssetWriter。然后在第一帧它写入两个文件,但立即关闭其中一个文件,以便写入 moov atom。然后使用 moov atom 数据,第二个文件可以用作管道来获取编码的视频数据流。此示例仅适用于发送视频数据,但它的代码非常简洁易懂,帮助我弄清楚如何处理 iPhone 上的许多视频问题。

于 2013-05-29T19:17:07.313 回答