SDL_Init 函数原型如下 , 传入的 flags 参数用于设置要使用 SDL 中的哪个子系统 , 本篇博客中设置 SDL_INIT_AUDIO 音频子系统 , 用于 PCM 音频播放 ; int SDL_Init(Uint32 flags); 1. 具体的函数原型参考 【FFmpeg】SDL 音视频开发 ① ( SDL 窗口绘制 | SDL 视频显示函数 | SDL_Window 窗口 | SDL_R...
block) { ret = 0; break; } else { SDL_CondWait(q->cond, q->mutex); } } SDL_UnlockMutex(q->mutex); return ret; } //从音频流中解析数据包 int audio_decode_frame(AVCodecContext* aCodecCtx, uint8_t* audio_buf, int buf_size) { static AVPacket pkt; static uint8_t* audio_pkt...
stream += fill_len;if(audio_len ==0) {// 这里要延迟一会儿,避免一直占据IO资源SDL_Delay(1); } } } 上述修改后的代码已经附在了《FFmpeg开发实战:从零基础到短视频上线》一书第10章的源码chapter10/playaudio2.c,这个c代码是playaudio.c的改进版,除了支持原来mp3和aac格式的音频播放,还支持ogg、amr...
SDL_UpdateYUVTexture(m_sdlTexture, NULL, frameYUV->data[0], frameYUV->linesize[0], frameYUV->data[1], frameYUV->linesize[1], frameYUV->data[2], frameYUV->linesize[2]); SDL_RenderClear(m_sdlRender); SDL_RenderCopy(m_sdlRender, m_sdlTexture, NULL, &m_sdlRect); // Present pictu...
FFmpeg结合SDL可以播放音频文件,也能播放视频文件中的音频流,《FFmpeg开发实战:从零基础到短视频上线》一书第10章的示例程序playaudio.c支持播放mp3和aac两种格式的音频,却不支持播放其他格式的音频。 因为mp3和aac两个格式拥有标准的规范定义,比如mp3规定每帧音频固定包含1152个样本,而aac规定每帧音频固定包含1024...
SDL内部维护了一个buffer来存放解码后的数据,这个buffer中的数据来源是我们注册的回调函数(audio_callback),audio_callback调用audio_decode_frame来做具体的音频解码工作,需要引起注意的是:从流中读取出的一个音频包(avpacket)可能含有多个音频桢(avframe),所以需要多次调用avcodec_decode_audio4来完成整个包的解码,解...
关闭音频设备 void SDL_CloseAudio(void)播放与暂停 void SDL_PauseAudio(int pause_on)pause_on: 0,...
FFMPEG + SDL音频播放分析,目录[hide]1抽象流程:2关键实现:2.1main()函数2.2decode_thread()读取文件信息和音频包2.3stream_component_open():设置音频参数和打开设备2.4audio_callback():回调函数,向SDL缓冲区填充数据2.5audio_decode_...
解码音频后,时间间隔还是计算一下,主要是控制解码的间隔,避免解码过快导致缓存区溢出导致异常。 解码音频进行重采样之后可以得到指定采样率、声道、数据类型的固定参数,使用SDL用固定参数打开音频,将解码的数据扔向缓存区即可。因为解码的时候其数据量与采样率是对应的,播放的时候也是扔入对应的数据量,...
在此我把自己做项目过程中实现的一个非常简单的音频播放器(大约200行代码)源代码传上来,以作备忘,同时方便新手学习FFMPEG。 该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL输出解码出来的音频。 并且支持流媒体等多种音频输入。