如何从iPhone摄像头获取h.264字节?

如何从iPhone摄像头获取h.264字节?,iphone,ios,video-streaming,h.264,Iphone,Ios,Video Streaming,H.264,我需要发布实时视频流从iPhone摄像头到RTMP服务器(Wowza服务器)。视频流必须为h.264格式。我知道AVFoundation将视频存储到h.264压缩的文件中,但我不知道;不需要将视频存储到文件中。我只想捕获并将其发送到服务器。我使用以下委托方法: - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromCo

我需要发布实时视频流从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];
        }

}

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

2017年更新:

您现在可以使用
VideoToolbox
API进行流式视频和音频处理。 请阅读此处的文档:

原始答案(2013年起):

这在目前是不可能的,你将不得不写入一个文件或用软件编码器压缩视频流(虽然你不会得到高清和非常糟糕的电池时间)。所有可能的硬件编码器都必须写入磁盘。我认为这是因为设备内存不足

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

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

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


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

谢谢。好的,我将把音频和视频写入同一个MP4文件。现在,您能建议我如何提取seprate h264视频(NSData)和AAC(音频)吗使用objective c…是否存在用于它的库。