-1

我需要将实时视频流从 iPhone 摄像头发布到 RTMP 服务器(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];
        }

}

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

4

1 回答 1

1

2017 年更新:

您现在可以使用VideoToolboxAPI 进行流式传输视频和音频。在此处阅读文档:VTCompressionSession

原始答案(从 2013 年开始):

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

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

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

但是,您可以记录 5 秒,然后切换输出文件,传输现在“旧”的 5 秒片段,然后将其删除。您必须解复用 *.mov 或 *.mp4 容器才能获取要发送的 h264 视频数据。

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

于 2013-06-10T13:37:08.540 回答