iOS ijkplayer 音频数据的播放
来源:互联网 发布:js options的用法 编辑:程序博客网 时间:2024/06/05 11:52
音频信息 SDL_AudioSpec 的产生read_thread ->stream_component_open(ffp, st_index[AVMEDIA_TYPE_AUDIO]);->/* prepare audio output */ if ((ret = audio_open(ffp, channel_layout, nb_channels, sample_rate, &is->audio_tgt)) < 0)->while (SDL_AoutOpenAudio(ffp->aout, &wanted_spec, &spec) < 0) ->static int aout_open_audio(SDL_Aout *aout, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained)->opaque->aoutController = [[IJKSDLAudioQueueController alloc] initWithAudioSpec:desired];->SDL_CalculateAudioSpec(&_spec);->{ spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8; spec->size *= spec->channels; spec->size *= spec->samples;//计算size大小}->aout_open_audio 里面-> if (obtained) *obtained = opaque->aoutController.spec;//将上一步计算的spec 赋给 obtained ->static int aout_open_audio(SDL_Aout *aout, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained)->while (SDL_AoutOpenAudio(ffp->aout, &wanted_spec, &spec) < 0) 既在这个函数执行完spec 就计算出来了。
static void IJKSDLAudioQueueOuptutCallback(void * inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) { @autoreleasepool { JFSDLAudioQueueController* aqController = (__bridge JFSDLAudioQueueController *) inUserData; if (!aqController) { // do nothing; } else if (aqController->_isPaused || aqController->_isStopped) { memset(inBuffer->mAudioData, aqController.spec.silence, inBuffer->mAudioDataByteSize); } else { (*aqController.spec.callback)(aqController.spec.userdata, inBuffer->mAudioData, inBuffer->mAudioDataByteSize); } AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL); }} (*aqController.spec.callback)(aqController.spec.userdata, inBuffer->mAudioData, inBuffer->mAudioDataByteSize); }/* prepare a new audio buffer */static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
//此处选择输出是用AudioUnit还是用AudioQueue
/* * ijksdl_aout_ios_audiounit.m *#define SDL_IOS_AUDIO_MAX_CALLBACKS_PER_SEC 15struct SDL_Aout_Opaque {// IJKSDLAudioQueueController *aoutController; IJKSDLAudioUnitController *aoutController;};static int aout_open_audio(SDL_Aout *aout, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained){ assert(desired); SDLTRACE("aout_open_audio()\n"); SDL_Aout_Opaque *opaque = aout->opaque; // opaque->aoutController = [[IJKSDLAudioQueueController alloc] initWithAudioSpec:desired]; opaque->aoutController = [[IJKSDLAudioUnitController alloc] initWithAudioSpec:desired]; if (!opaque->aoutController) { ALOGE("aout_open_audio_n: failed to new AudioTrcak()\n"); return -1; } if (obtained) *obtained = opaque->aoutController.spec; return 0;}
阅读全文
0 0
- iOS ijkplayer 音频数据的播放
- iOS ijkplayer Audio Unit 播放音频
- IOS IJKPlayer播放RTSP
- ijkplayer播放器的read_thread数据接受线程在处理音频的时候如果首个数据包没有发现audio stream 以后就不会有音频数据
- iOS音频的后台播放
- IOS音频的流媒体播放
- iOS开发 -- 音频的播放
- iOS 长短音频的播放
- 需求:IOS播放PCM音频流数据
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- iOS音频播放 (六):简单的音频播放器实现
- ios处理播放音频时的中断
- iOS AvPlayer AvAudioPlayer音频的后台播放
- iOS 播放音频的几种方法
- iOS 播放音频的几种方法
- Thinkphp输出多个,号隔开的数据
- 记录自已学习之面试题2
- 基于ES6测试一个字符由两个字节还是由四个字节组成的最简单方法
- MxCAD手机版6.0 2017.5.10更新
- 欢迎使用CSDN-markdown编辑器
- iOS ijkplayer 音频数据的播放
- px和dp的转换
- Qt检测U盘插入拔出Demo
- C# .net 利用QRCode生成二维码图片
- Android中的Drawable资源
- 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录
- 29、最小的k个数
- HTML5的Video标签的属性,方法和事件汇总及Video填充满父div的大小
- linux rar解压缩 zip压缩