Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS上捕获视频/音频时,如何使用AVAssetWriter将音频写入第一帧?_Ios_Audio_Video_Avassetwriter - Fatal编程技术网

在iOS上捕获视频/音频时,如何使用AVAssetWriter将音频写入第一帧?

在iOS上捕获视频/音频时,如何使用AVAssetWriter将音频写入第一帧?,ios,audio,video,avassetwriter,Ios,Audio,Video,Avassetwriter,长话短说,我正在尝试实现一个简单的解决方案,将视频从iOS摄像头/麦克风传输到服务器 我正在对音频和视频使用AVCaptureSession,然后使用AVAssetWriter/AVAssetWriterInput在captureOutput:didOutputSampleBuffer:fromConnection方法中捕获视频和音频,并将生成的视频写入文件 为了使这成为一个流,我使用NSTimer将视频文件分成1秒的块(通过在不同的AVAssetWriter中热交换,该文件具有不同的outpu

长话短说,我正在尝试实现一个简单的解决方案,将视频从iOS摄像头/麦克风传输到服务器

我正在对音频和视频使用
AVCaptureSession
,然后使用
AVAssetWriter
/
AVAssetWriterInput
captureOutput:didOutputSampleBuffer:fromConnection
方法中捕获视频和音频,并将生成的视频写入文件

为了使这成为一个流,我使用
NSTimer
将视频文件分成1秒的块(通过在不同的
AVAssetWriter
中热交换,该文件具有不同的
outputURL
),并通过HTTP将其上传到服务器

这是可行的,但我遇到的问题是:
.mp4
文件的开头在第一帧中似乎总是缺少音频,因此当视频文件在服务器上串联(运行
ffmpeg
)时,这些文件的交叉处会出现明显的音频跳过。视频很好-没有跳过

我尝试了许多方法来确保没有丢弃
CMSampleBuffers
,并检查它们的时间戳,以确保它们指向正确的
AVAssetWriter
,但没有任何效果

使用
AVCaptureMovieFileOutput
检查和使用
AVAssetWriter
检查AVCaptureLocation示例,它们生成的文件似乎做了相同的事情


也许我对音频/视频文件的本质有一些基本的误解,因为我对视频/音频捕获还不熟悉——但我想在尝试解决这一问题之前,我会检查一下,学习使用
ffmpeg
,就像有些人似乎在分割流一样(如果你对此也有任何提示,请让我知道!)。提前谢谢

我也遇到了同样的问题,通过使用不同的API音频队列录制音频解决了这个问题。这似乎可以解决问题,只需注意时间安排,以避免声音延迟。

您发现问题了吗?@PabloMartinez对此回复太晚表示抱歉-不,我没有找到解决此特定问题的方法。最后,我让AvassetWriter重叠(因此写入两个AvassetWriter几帧),然后使用
AVAssetExportSession
从结果剪辑中修剪前几帧。