Как воспроизвести необработанный звук в Iphone? (используя ffmpeg) - PullRequest
1 голос
/ 10 августа 2011

Я студент, который пытается создать приложение mms stream.
Я получил поток mms, используя libmms, и декодировал аудио wma, используя ffmpeg.
Но, однако, я не знаю, что делать дальше.

Я недавно видел похожий вопрос на сайте stackoverflow. (Писатель c4r1o5 )
Но он использовал cfwritestreamwrite после avcodec_decode_audio2.
Это правильно? Я думаю, что это не является необходимым, потому что проблема с сетью закончилась после mms_connect, ffmpeg decode.

Это необходимо использовать?
Я пытался поместить сырое аудио в аудио буфер. и когда играешь, он идет только с белым шумом.

Пожалуйста, помогите мне.
Буду очень признателен за любую подсказку или комментарий.
Заранее спасибо.

enter image description here

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Пожалуйста, отправьте необходимый код.
И вы не обязательно используете CFWriteStreamWrite.
Несмотря на то, что у меня нет опыта работы с CFWriteStreamWrite, нет необходимости в потоковой передаче ммс.
Все, что вам нужно, это подключить MMS, декодировать аудиофайл wma, аудио-буфер очереди для воспроизведения на iphone.
Я думаю, вы должны знать о iphone Audio Queue Service
И обязательно используйте нить, когда получите аудио кадр.
Основная информация лежит на этом сайте.

Наконец, причина только в белом шуме в том, что вы неправильно указали mAudioData.
Используйте memcpy для копирования аудиопамяти.

0 голосов
/ 20 ноября 2011

Вы должны реализовать AudioQueueOutputCallback для передачи декодированных аудиоданных в AudioQueue.

- (void)handlePlayCallback:(AudioQueueRef) inAudioQueue buffer:(AudioQueueBufferRef) inBuffer {
    // copy decoded audio data to inBuffer->mAudioData
    // and set the size of the copied data like this
    // inBuffer->mAudioDataByteSize = data_written

    if(inBuffer->mAudioDataByteSize > 0) {
        AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
    }
}
...