捕获,编码然后将视频从iPhone流式传输到服务器

时间:2013-01-06 01:37:10

标签: ios video video-capture video-encoding video-recording

我有构建iOS应用程序的经验,但没有视频经验。我想构建一个将实时视频流式传输到服务器的iPhone应用程序。一旦进入服务器,我将实时向消费者提供该视频。

我读了很多材料。有人可以告诉我,如果以下是正确的,并为我填写空白。

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

1 个答案:

答案 0 :(得分:5)

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

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

我找到了另一种流视频here的方法。

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