gpt4 book ai didi

iOs 为 VOIP 应用程序播放音频

转载 作者:行者123 更新时间:2023-11-29 03:47:59 25 4
gpt4 key购买 nike

这是我在 stackoverflow 上发表的第一篇文章。目前我正在为ios开发一个voip应用程序。我想做这样的事情。

//in  a thread
while(callIsOnGoing){
data = getDataFromNetwork()
playData()
sleep(10ms)
}

但问题是ios中的音频以“拉”模型工作(使用回调来获取数据)。但我需要推送数据才能播放。我尝试过 AudioQueue,但在 audioQueue 中,尽管调用了回调,但我在回调之外插入缓冲区的数据并未播放。

我再次看到了苹果(http://developer.apple.com/library/ios/#samplecode/AVCaptureToAudioUnit/Introduction/Intro.html)的 AVCaptureToAudioUnit 示例,其中他们在延迟音频单元的情况下同步调用 AudioUnitRender。我尝试了类似的 RemoteI/O 音频单元。但每次都会返回OSStatus -50。代码如下

    //in a separate thread

do { // 5
int data_length = [NativeLibraryHelper GetData:(playBuff)];
if(data_length == 0){

}else{
double numberOfFrameCount = data_length / player->audioStreamDesc->mBytesPerFrame;
currentSampleTime += numberOfFrameCount;

//AudioUnitRenderActionFlags flags = 0;

AudioTimeStamp timeStamp;
memset(&timeStamp, 0, sizeof(AudioTimeStamp));
timeStamp.mSampleTime = currentSampleTime;
timeStamp.mFlags |= kAudioTimeStampSampleTimeValid;

AudioUnitRenderActionFlags flags = 0;
AudioBuffer buffer;
buffer.mNumberChannels = player->audioStreamDesc->mChannelsPerFrame;
buffer.mDataByteSize = data_length;
buffer.mData = malloc(data_length);
memcpy(buffer.mData, playBuff, data_length);

AudioBufferList audBuffList;
audBuffList.mBuffers[0] = buffer;
audBuffList.mNumberBuffers = 1;

printf("Audio REnder call back funciotn called with data size %d\n", data_length);

status = AudioUnitRender(audioUnitInstance, &flags, &timeStamp, 0, numberOfFrameCount, &audBuffList);
printf("osstatus %d\n", status);
}//end if else
CFRunLoopRunInMode ( // 6
kCFRunLoopDefaultMode, // 7
0.25, // 8
false // 9
);
//} while (aqData.mIsRunning);
[NSThread sleepForTimeInterval:.05];
}while (player->isRunning == YES);

我在音频播放部分苦苦挣扎了一个多月。请帮忙。提前致谢。

最佳答案

一个通用的解决方案是使用异步网络 getdata/read 函数将数据推送到中间缓冲区或队列,然后从该中间缓冲区读取音频回调(如果中间缓冲区/队列为空,则读取静音)。

关于iOs 为 VOIP 应用程序播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com