Я разрабатываю модуль для написания необработанных аудио и видеопотоков для MP4. < /p>
Цель:
Используйте официальный AppaSetWriter, чтобы инкапсулировать потоки H.265 и AAC RAW в файлы MP4, которые в конечном итоге можно сохранить в системном альбоме и воспроизводится системным игроком (такие как фотографии, AvPlayer). /> Я пытаюсь использовать AvassetWriter для реализации функции. Сравнение, что количество аудиоканалов в файле MP4, написанном AvassetWriter, стало 2 (стерео), в то время как мои фактические данные - Mono AAC LC с частотой выборки 16000 Гц. Заголовок). < /p>
Используйте заголовок ADTS для Parse audiopecificconfig и Construct CmformatdescriptionRef. < /p>
Используйте cmasmlebuffercreate для конструкции cmasamplebufferref.
- (void)appendAudioFrame:(LMLKAudioFrame *)audioFrame{
dispatch_async(self.writeQueue, ^{
[self _appendAudioFrame:audioFrame];
});
}
- (void)writeAudioInner {
NSMutableIndexSet* removeList = [NSMutableIndexSet indexSet];
LMLogInfo(@"_audioQueue start:");
for (NSUInteger i = 0; i < _audioQueue.count; i++) {
CMSampleBufferRef sampleBuffer = (__bridge CMSampleBufferRef)_audioQueue;
CMTime apts = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
LMLogInfo(@"audio:%.3f秒-video:%.3f秒",CMTimeGetSeconds(apts),CMTimeGetSeconds(_currentVideoPts));
if (CMTimeCompare(apts, _currentVideoPts) >= 0) break;
[removeList addIndex:i];
if (_audioInput.readyForMoreMediaData) {
if (![_audioInput appendSampleBuffer:sampleBuffer]) {
LMLogInfo(@"写入音频失败: %@", self.assetWriter.error.userInfo);
} else {
LMLogInfo(@" write audio success");
}
}else{
LMLogInfo(@"写入音频失败: %@", self.assetWriter.error.userInfo);
}
}
if (removeList.count) {
[_audioQueue removeObjectsAtIndexes:removeList];
LMLogInfo(@"-----count:%ld",removeList.count);
}
}
- (CMSampleBufferRef)createSampleBufferWithAudioFrame:(LMLKAudioFrame *)audioFrame {
if (!audioFrame.audioBuffer || audioFrame.audioBuffer.length
Подробнее здесь: https://stackoverflow.com/questions/797 ... ile-has-ab
Используя AvassetWriter для написания AAC Raw Stream Audio, сгенерированный файл MP4 имеет аномальные каналы и не может ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
AVAssetWriter: предварительный просмотр записанного файла .mp4 перед вызовом FinishWriting?
Anonymous » » в форуме IOS - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-