Я разрабатываю модуль для написания необработанных аудио и видеопотоков для 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
Программируем под IOS
1753256722
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[i];
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79709915/using-avassetwriter-to-write-aac-raw-stream-audio-the-generated-mp4-file-has-ab[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия