Используя AvassetWriter для написания AAC Raw Stream Audio, сгенерированный файл MP4 имеет аномальные каналы и не может IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Используя AvassetWriter для написания AAC Raw Stream Audio, сгенерированный файл MP4 имеет аномальные каналы и не может

Сообщение Anonymous »

Я разрабатываю модуль для написания необработанных аудио и видеопотоков для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как кодировать аудио AAC в HE-AAC V1 в новом Android API 33
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как кодировать аудио AAC в HE-AAC V1 в новом Android API 33
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как написать H264 Raw Stream в MP4 с помощью FFMPEG напрямую
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • AVAssetWriter: предварительный просмотр записанного файла .mp4 перед вызовом FinishWriting?
    Anonymous » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как играть .AAC Format Audio File в Android
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»