小编Rya*_*van的帖子

如何使用AVAssetWriter在ios中写出AAC音频?

我正在使用AVCaptureSession从设备麦克风和摄像头捕获音频和视频样本.

然后我尝试编写通过AVCaptureSessions委托方法返回的CMSampleBuffers(使用AVAssetWriter和AVAssetWriterInputs)

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:    (CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
Run Code Online (Sandbox Code Playgroud)

当我的音频AVAssetWriterInput配置为以Apple Lossless格式(kAudioFormatAppleLossless)写出数据时,这可以正常工作但是如果我尝试配置音频AVAssetWriterInput以使用AAC(kAudioFormatMPEG4AAC)它成功写入视频和音频样本大约500ms然后失败跟随错误

writer has failed with Error Domain=AVFoundationErrorDomain Code=-11821 "Cannot Decode" UserInfo=0x4b2630 {NSLocalizedFailureReason=The media data could not be decoded. It may be damaged., NSUnderlyingError=0x4ad0f0 "The operation couldn’t be completed. (OSStatus error 560226676.)", NSLocalizedDescription=Cannot Decode}
Run Code Online (Sandbox Code Playgroud)

这是我用来创建AVAssetWriter和AVAssetWriterInputs的代码

NSError *error = nil;
m_VideoCaputurePath = [[NSString stringWithFormat:@"%@/%@.mp4",[UserData getSavePath],[UserData getUniqueFilename]] retain];

if( USE_AAC_AUDIO )
{
    m_audioAndVideoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:m_VideoCaputurePath] fileType:AVFileTypeMPEG4 error:&error];
}
else
{
    m_audioAndVideoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:m_VideoCaputurePath] fileType:AVFileTypeQuickTimeMovie error:&error];
}

//\Configure …
Run Code Online (Sandbox Code Playgroud)

iphone audio ios avassetwriter

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

audio ×1

avassetwriter ×1

ios ×1

iphone ×1