Как искать в аудиотреке с помощью avassetreader? - PullRequest
3 голосов
/ 01 апреля 2011

Я знаком с тем, как передавать аудиоданные из библиотеки ipod с помощью AVAssetReader, но я не знаю, как искать в треке.например, начать воспроизведение с середины и т. д. Начать с начала, а затем последовательно получать последовательные сэмплы - это легко, но наверняка должен быть способ произвольного доступа?

Ответы [ 2 ]

5 голосов
/ 01 апреля 2011

AVAssetReader имеет свойство timeRange, которое определяет временной диапазон ресурса, из которого будут считываться медиаданные.

@property(nonatomic) CMTimeRange timeRange

Пересечение значения этого свойства и CMTimeRangeMake (kCMTimeZero, asset.duration) определяет диапазон времени актива, из которого будут считываться медиа-данные.

Значением по умолчанию является CMTimeRangeMake (kCMTimeZero, kCMTimePositiveInfinity). Вы не можете изменить значение этого свойства после начала чтения.

Итак, если вы хотите искать середину дорожки, вы должны создать CMTimeRange из asset.duration / 2 в asset.duration и установить его как timeRange в AVAssetReader.

3 голосов
/ 19 марта 2015

AVAssetReader удивительно медленен при поиске.Если вы попытаетесь воссоздать AVAssetReader для поиска, когда пользователь перетаскивает ползунок, ваше приложение поставит iOS на колени.

Вместо этого вам следует использовать AVAssetReader для быстрого доступа только к видеокадры, а затем также используйте AVPlayerItem и AVPlayerItemVideoOutput, когда пользователь хочет искать с помощью ползунка.

Было бы хорошо, если бы Apple объединила AVAssetReader и AVPlayerItem / AVPlayerItemVideoOutput вновый класс, который был производительным и мог быстро искать.

Имейте в виду, что AVPlayerItemVideoOutput не будет возвращать пиксельные буферы, если к AVPlayerItem не присоединен AVPlayer.Это, очевидно, странная деталь реализации, но это то, что есть.

Если вы используете AVPlayer и AVPlayerLayer, то вы можете просто использовать методы поиска для самого AVPlayer.Приведенные выше сведения важны только в том случае, если вы выполняете пользовательский рендеринг с пиксельными буферами и / или хотите отправить пиксельные буферы в AVAssetWriter.

...