Технические вопросы и ответы QA1676

AudioFileOpenWithCallbacks - Предотвращение ошибки полномочий с MPEG 4 типов файлов

Q: Мы используем AudioFileOpenWithCallbacks для воспроизведения аудиоданных, сохраненных в памяти и, обеспечивают соответствующие процедуры по чтению, пишущий и т.д. Однако мы встречаемся с a kAudioFilePermissionsError при работе с контейнерами MPEG 4 файла. Что случилось?

A: Мы используем AudioFileOpenWithCallbacks для воспроизведения аудиоданных, сохраненных в памяти и, обеспечивают соответствующие процедуры по чтению, пишущий и т.д. Однако мы встречаемся с a kAudioFilePermissionsError при работе с контейнерами MPEG 4 файла. Что случилось?

AudioFileOpenWithCallbacks откроет аудиофайл (представленный AudioFileID непрозрачный тип данных), использование обратных вызовов Вы предусматриваете чтение данных, запись данных и получение/установку информации о размере. Эти обратные вызовы могут использоваться для предоставления данных аудиофайла из источника кроме физического файла (например, память) и позволяют Вам использовать в своих интересах стандартный AudioFile APIs такой как AudioFileReadPackets работать с этими аудиоданными.

Перечисление 1  AudioFileOpenWithCallbacks

OSStatus AudioFileOpenWithCallbacks(void *inClientData,
                                    AudioFile_ReadProc inReadFunc,
                                    AudioFile_WriteProc inWriteFunc,
                                    AudioFile_GetSizeProc inGetSizeFunc,
                                    AudioFile_SetSizeProc inSetSizeFunc,
                                    AudioFileTypeID inFileTypeHint,
                                    AudioFileID *outAudioFile);
Parameters:

inClientData - A pointer to a constant passed to your callbacks. The constant should contain any information you use to manage the state for reading data from the file.

inReadFunc - A callback function invoked when the audio file object wants to read data.

inWriteFunc - A callback function called when the audio file object wants to write data.

inGetSizeFunc - A callback function called when the audio file object wants to know the file size.

inSetSizeFunc - A callback function called when the audio file object wants to set the file size.

inFileTypeHint - A hint about the type of the designated file. For example, kAudioFileAAC_ADTSType, kAudioFileMP3Type and so on.

outAudioFile - On output, a pointer to the newly opened file ID.

Фиксация ошибки полномочий

Существует, однако, ограничение при работе с MPEG 4 включающих типов файлов; .mp4 (kAudioFileMPEG4Type), .m4a (kAudioFileM4AType).3g2 (kAudioFile3GP2Type) и.3gp (kAudioFile3GPType).

AudioFile в настоящее время не поддерживает запись в существующие файлы этих типов.

Поэтому, если Вы обеспечиваете inWriteFunc процедура это - индикация AudioFileOpenWithCallbacks то, что файл открывается для записи, поочередно приводящей к kAudioFilePermissionsError быть возвращенным.

Так как Вы не можете записать в эти файлы, AudioFile_WriteProc не требуется и не должен использоваться. Установка inWriteFunc к NULL решает проблему.

Перечисление 2  AudioFileOpenWithCallbacks с a NULL inWriteFunc и inSetSizeFunc

static OSStatus MyAudioFile_ReadProc(void *inClientData, SInt64   inPosition, UInt32 requestCount,
                                     void *buffer, UInt32 *actualCount)
{
    // this is my read proc.
    ...
}

{
    ...

    AudioFileID myAudioFileID = 0;
    OSStatus result;

    result = AudioFileOpenWithCallbacks(self, MyAudioFile_ReadProc, NULL, MyAudioFile_GetSizeProc, NULL,
                                        kAudioFileMPEG4Type, &myAudioFileID);

    ...
}


История версии документа


ДатаПримечания
27.10.2009

Новый документ, описывающий, как избежать kAudioFilePermissionsError ошибки с MPEG 4 файла при использовании AudioFileOpenWithCallbacks.