我需要将实时视频流从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];
}
}
我不需要向服务器发送音频,我只想发送视频。
答案 0 :(得分:1)
2017年更新:
您现在可以使用VideoToolbox
API来播放视频和音频。
请阅读此处的文档:VTCompressionSession
原始答案(自2013年起):
目前这是不可能的,您必须使用软件编码器写入文件或压缩视频流(尽管如此,您将无法获得高清和非常糟糕的电池时间)。掌握硬件编码器的所有可能性都必须写入磁盘。我认为这是因为设备内存不足。
获得硬件加速h264压缩的方法:
正如您所看到的那样,写入文件时,写入管道不起作用,因为编码器在完全写入帧或GOP后更新标题信息。因此,当编码器写入文件时,最好不要触摸文件,因为它会随机重写标题信息。如果没有此标头信息,视频文件将无法播放(它会更新大小字段,因此写入的第一个标头表示文件为0字节)。
然而,您可以录制5秒然后切换输出文件,传输现在的“旧”5秒片段并在之后删除它。您必须对* .mov或* .mp4容器进行解复用,以获取要发送的h264视频数据。
如果您需要音频:如果您切换文件,您将丢失一些音频样本,因此您必须为此滚动自己的缓冲区管理(或者只是单独录制音频)。