Слияние * .mp3 с файлом * .mov с использованием AVAssetReader и AVAssetWriter - PullRequest
3 голосов
/ 16 июня 2011

Мне удалось создать файл * .mov с помощью AVAssetWriter.Я использовал снимки экрана и аудио CMSampleBuffer, которые я получил от использования AVCaptureSession, и передал его на входы AVAssetWriter, и это сработало.

Теперь я хотел бы объединить файл * .mov с музыкой из ipod / iphoneмузыкальная библиотека (скорее всего * .mp3).Поэтому моя первоначальная идея - использовать AVAssetReader для получения образцов из файла * .mp3 и * .mov и передачи образцов в AVAssetWriter.Будет ли это работать?Просто прочитав документацию, я думаю, что это возможно.

Я немного поиграл с этой идеей, но не могу заставить ее работать.

Моя первая попытка - использовать 2 AVAssetReaders, один длякаждый файл.Я использовал AVAssetReaderAudioMixOutput в качестве выхода для 1-го считывателя и затем AVAssetReaderVideoCompositionOutput для 2-го.Проблема в том, что использование AVAssetReaderVideoCompositionOutput требует, чтобы вы передали ему AVVideoComposition.У меня были проблемы с созданием AVVideoComposition / AVMutableVideoComposition, поэтому я отказался от этого решения.Я не понимаю, почему мне нужно передать AVVideoComposition, я просто хочу получить образцы фильма.

Так что моя вторая попытка похожа, но вместо того, чтобы использовать AVAssetReaderVideoCompositionOutput в качестве вывода для второго считывателя, я использовал 2 AVAssetReaderTrackOutputвместо.Итак, теперь у меня есть 2 считывателя с 3 выходами, и я попытался использовать пример из выходов и передать его AVAssetWriter для создания файла * .mov.Я смог запустить его, без ошибок / сбоев.Но я не могу воспроизвести полученный файл * .mov.Продолжительность его воспроизведения равна 0. Итак, опять не повезло с идеей AVAssetReader + AVAssetWriter.

Так что мой вопрос / с: Можете ли вы использовать AVAssetReader и AVAssetWriter для объединения двух файлов?Кто-нибудь пытался сделать это и заставить его работать?Должен ли я просто использовать AVMutableVideoComposition вместо этого?

Я опубликую свой код, если необходимо.

1 Ответ

2 голосов
/ 17 июня 2011

Вы можете использовать AVAssetReader и AVAssetWriter для объединения двух файлов, но это, вероятно, дальше по кривой управления / мощности, чем вам нужно.

AVAssetExportSession, вероятно, лучше подходит, так как вы можете объединять аудио и видео дорожкив нескольких строках кода:

  1. создайте AVComposition, содержащий mp3 и mov как AVCompositionTracks
  2. , экспортируйте AVComposition с AVAssetExportSession.
...