Что означает это свойство очереди (аудио-очереди iOS)? - PullRequest
0 голосов
/ 19 марта 2012

Я хочу написать плеер для воспроизведения музыки.Я вижу код, подобный приведенному ниже:

AudioFileGetPropertyInfo(audioFile,
                         kAudioFilePropertyMagicCookieData, &size, nil);

if (size > 0) {
    cookie = malloc(sizeof(char) * size);
    AudioFileGetProperty(audioFile,
                         kAudioFilePropertyMagicCookieData, &size, cookie);
    AudioQueueSetProperty(aduioQueue,
                          kAudioQueueProperty_MagicCookie, cookie, size);
    free(cookie);
}

Я не знаю, зачем устанавливать AudioQueueProperty, и что означает kAudioQueueProperty_MagicCookie?Я не могу найти помощь в документации.кто может дать указание решить проблему.

Ответы [ 2 ]

2 голосов
/ 11 октября 2013

На самом деле волшебный файл cookie - это не просто подпись, он содержит некоторую информацию о кодировщике, наиболее полезными элементами являются «Максимальная скорость передачи данных» и «Средняя скорость передачи данных», особенно для сжатого формата, такого как AudioFileMPEG4Type.Для этого конкретного типа магический файл cookie аналогичен полю «esds» в файле данных MPEG-4.Точные настройки битов можно найти по адресу:

http://xhelmboyx.tripod.com/formats/mp4-layout.txt


8 + байт.2 Поле дескриптора ES = длинное смещение без знака + длинная текстовая строка ASCII 'esds' - если кодируется в соответствии со стандартами ISO / IEC 14496-10 AVC, при необходимости можно использовать: = длинное смещение без знака + длинная текстовая строка ASCII 'm4ds'

                -> 4 bytes version/flags = 8-bit hex version + 24-bit hex flags
                    (current = 0)

                -> 1 byte ES descriptor type tag = 8-bit hex value 0x03
                -> 3 bytes extended descriptor type tag string = 3 * 8-bit hex value
                  - types are Start = 0x80 ; End = 0xFE
                  - NOTE: the extended start tags may be left out
                -> 1 byte descriptor type length = 8-bit unsigned length

                  -> 2 bytes ES ID = 16-bit unsigned value
                  -> 1 byte stream priority = 8-bit unsigned value
                    - Defaults to 16 and ranges from 0 through to 31

                    -> 1 byte decoder config descriptor type tag = 8-bit hex value 0x04
                    -> 3 bytes extended descriptor type tag string = 3 * 8-bit hex value
                      - types are Start = 0x80 ; End = 0xFE
                      - NOTE: the extended start tags may be left out
                    -> 1 byte descriptor type length = 8-bit unsigned length

                      -> 1 byte object type ID = 8-bit unsigned value
                        - type IDs are system v1 = 1 ; system v2 = 2
                        - type IDs are MPEG-4 video = 32 ; MPEG-4 AVC SPS = 33
                        - type IDs are MPEG-4 AVC PPS = 34 ; MPEG-4 audio = 64
                        - type IDs are MPEG-2 simple video = 96
                        - type IDs are MPEG-2 main video = 97
                        - type IDs are MPEG-2 SNR video = 98
                        - type IDs are MPEG-2 spatial video = 99
                        - type IDs are MPEG-2 high video = 100
                        - type IDs are MPEG-2 4:2:2 video = 101
                        - type IDs are MPEG-4 ADTS main = 102
                        - type IDs are MPEG-4 ADTS Low Complexity = 103
                        - type IDs are MPEG-4 ADTS Scalable Sampling Rate = 104
                        - type IDs are MPEG-2 ADTS = 105 ; MPEG-1 video = 106
                        - type IDs are MPEG-1 ADTS = 107 ; JPEG video = 108
                        - type IDs are private audio = 192 ; private video = 208
                        - type IDs are 16-bit PCM LE audio = 224 ; vorbis audio = 225
                        - type IDs are dolby v3 (AC3) audio = 226 ; alaw audio = 227
                        - type IDs are mulaw audio = 228 ; G723 ADPCM audio = 229
                        - type IDs are 16-bit PCM Big Endian audio = 230
                        - type IDs are Y'CbCr 4:2:0 (YV12) video = 240 ; H264 video = 241
                        - type IDs are H263 video = 242 ; H261 video = 243
                      -> 6 bits stream type = 3/4 byte hex value
                        - type IDs are object descript. = 1 ; clock ref. = 2
                        - type IDs are scene descript. = 4 ; visual = 4
                        - type IDs are audio = 5 ; MPEG-7 = 6 ; IPMP = 7
                        - type IDs are OCI = 8 ; MPEG Java = 9
                        - type IDs are user private = 32
                      -> 1 bit upstream flag = 1/8 byte hex value
                      -> 1 bit reserved flag = 1/8 byte hex value set to 1
                      -> 3 bytes buffer size = 24-bit unsigned value
                      -> 4 bytes maximum bit rate = 32-bit unsigned value
                      -> 4 bytes average bit rate = 32-bit unsigned value

                        -> 1 byte decoder specific descriptor type tag
                            = 8-bit hex value 0x05
                        -> 3 bytes extended descriptor type tag string
                            = 3 * 8-bit hex value
                          - types are Start = 0x80 ; End = 0xFE
                          - NOTE: the extended start tags may be left out
                        -> 1 byte descriptor type length
                            = 8-bit unsigned length

                          -> ES header start codes = hex dump

                    -> 1 byte SL config descriptor type tag = 8-bit hex value 0x06
                    -> 3 bytes extended descriptor type tag string = 3 * 8-bit hex value
                      - types are Start = 0x80 ; End = 0xFE
                      - NOTE: the extended start tags may be left out
                    -> 1 byte descriptor type length = 8-bit unsigned length

                      -> 1 byte SL value = 8-bit hex value set to 0x02

"

Волшебное печенье, полученное из kAudioFilePropertyMagicCookieData, начинается с дескриптора ES (просто игнорируйте первые 4 байта, описанные на карте, а остальные будут точно соответствовать магии cookie).

AПример магического файла cookie будет выглядеть следующим образом:

03 80 80 80 22 00 00 00 04 80 80 80 14 40 15 00 18 00 00 00 FA 00 00 00 FA 00 05 80 80 80 02 12 08 06 80 80 80 01 02

Максимальная скорость передачи данных по смещению 18 -> 0XFA00 (или 64 000) Средняя скорость передачи данных по смещению 22 -> 0XFA00 (или 64 000)

Несмотря на то, что согласно документации Apple, «волшебный cookie» предназначен для чтения / записи, но у меня не было шансов изменить скорость передачи данных перед созданием или преобразованием файлов.

Надеюсь, это кому-нибудь поможет.

1 голос
/ 19 марта 2012

«Волшебное печенье» - это сигнатура типа файла, состоящая из уникальной последовательности байтов в начале файла, указывающей формат файла. Инфраструктура аудио-очереди использует эту информацию, чтобы определить, как декодировать или извлекать аудиоинформацию из потока файлов (вместо того, чтобы использовать или доверять расширению имени файла). Размещенный вами код считывает этот набор байтов из файла и передает его в аудио-очередь в виде файла cookie. (Например, было бы ошибкой допускать, чтобы они интерпретировались как образцы PCM).

...