如何从iPhone Camera获取h.264字节?

时间:2013-06-10 11:23:54

标签: iphone ios video-streaming h.264

我需要将实时视频流从iPhone Camera发布到RTMP Server(Wowza服务器)。视频流必须采用h.264格式。我知道AVFoundation将视频存储在h.264压缩文件中,但我不需要将视频存储到文件中。我只想捕获并将其发送到服务器。我正在使用以下委托方法:

    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
             if (connection == videoConnection) {
             //I want something like this
             NSData* h264VideoData=[self h264Data:sampleBuffer];
        }

}

我不需要向服务器发送音频,我只想发送视频。

1 个答案:

答案 0 :(得分:1)

2017年更新:

您现在可以使用VideoToolbox API来播放视频和音频。 请阅读此处的文档:VTCompressionSession

原始答案(自2013年起):

目前这是不可能的,您必须使用软件编码器写入文件或压缩视频流(尽管如此,您将无法获得高清和非常糟糕的电池时间)。掌握硬件编码器的所有可能性都必须写入磁盘。我认为这是因为设备内存不足。

获得硬件加速h264压缩的方法:

正如您所看到的那样,写入文件时,写入管道不起作用,因为编码器在完全写入帧或GOP后更新标题信息。因此,当编码器写入文件时,最好不要触摸文件,因为它会随机重写标题信息。如果没有此标头信息,视频文件将无法播放(它会更新大小字段,因此写入的第一个标头表示文件为0字节)。

然而,您可以录制5秒然后切换输出文件,传输现在的“旧”5秒片段并在之后删除它。您必须对* .mov或* .mp4容器进行解复用,以获取要发送的h264视频数据。

如果您需要音频:如果您切换文件,您将丢失一些音频样本,因此您必须为此滚动自己的缓冲区管理(或者只是单独录制音频)。