Использование audioqueue для потоковой передачи звука. Как получить длину аудиофайла до окончания воспроизведения?

Уже закончил реализацию плеера. Я хочу реализовать индикатор выполнения. Но мне интересно, возможно ли это сделать, поскольку мы транслируем музыку. Если только нам не предоставили длину песни заранее.

Пожалуйста, мне нужен ваш совет по этому поводу.


person RoundOutTooSoon    schedule 24.08.2009    source источник


Ответы (2)


Если вам заранее не указан размер (или продолжительность) аудиофайла, вы не сможете установить диапазон индикатора выполнения (у вас не будет максимума).

person fbrereto    schedule 24.08.2009

На самом деле, я нашел способ сделать это, и мне это удалось. Что вы вычисляете количество кадров в пакете песни и средний размер пакета (в байтах). Используйте NSHTTPConnection, чтобы получить размер файла и использовать эту формулу:

totalFrames = (размер файла * количество кадров на пакет / средний размер пакета)

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

person RoundOutTooSoon    schedule 28.08.2009
comment
Это немного неточно, потому что не учитывает пространство, используемое метаданными, заголовками файлов и т. д. Расхождение должно быть небольшим, но в идеале должен быть способ полностью его устранить. К сожалению, API, который должен давать полезные результаты (AudioFileStreamGetProperty (stream, kAudioFileStreamProperty_AudioDataPacketCount, ...)), кажется, никогда не дает полезных результатов, поэтому, если нет другого способа, который я еще не нашел, это выглядит как лучший доступный вариант. - person Jules; 19.07.2018
comment
Конечно, всегда есть kAudioFileStreamProperty_AudioDataByteCount, что, если оно присутствует, должно быть точным... - person Jules; 20.07.2018