(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) printf("There is something wrong with your SDL Libs. Couldn't run"); //打开音频驱动 #ifdef _WIN32 SDL_AudioInit("directsound"); #endif //打开媒体文件,获取流信息 if (avformat_open_input(&pFormatCtx, argv[1], NULL, ...
使用ffmpeg播放音频和视频都很简单,有多种播放方式,甚至一个类就能实现音视频播放,但是音视频同步的逻辑就比较复杂了。 当前音视频同步逻辑:首先ffmpeg中音频比视频解码慢,如果没有延迟的情况下,视频比音频快很多。所以我们需要在视频解码中来处理同步逻辑。我这个地方开了三个线程,音频线程没有延迟,所有会在视频播放...
播放pcm 数据目前比较流行的有两种方式,一种是通过 Android 的 AudioTrack 来播放,另一种是采用跨平台的 OpenSLES 来播放,个人比较倾向于用更加高效的 OpenSLES 来播放音频,大家可以先看看 Google 官方的native-audio事例,后面我们写音乐播放器时,会采用 OpenSLES 来播放音频。但这里我们还是采用 AudioTrack 来播放 j...
就是这样。我们利用主的读取队列循环从文件得到音频并送到队列中,然后被audio_callback函数从队列中读取并处理,最后把数据送给SDL,于是SDL就相当于我们的声卡。让我们继续并且编译: gcc -o tutorial03 tutorial03.c -lavutil -lavformat -lavcodec -lz -lm \ `sdl-config --cflags --libs` 啊哈!视频虽然还是...
原始数据就是 ffmpeg 解码后的数据,通俗理解,对于音频就是 .pcm 数据,对于视频就是 .yuv 数据。 FFmpeg 提取 YUV 数据: 示例:ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv -an:所要输出的结果不包含音频 -c:v:指定视频编码格式 ...
{cout<<"音频"<<endl; cc = pACodecCtx; }// 解码视频// 发送packet到解码线程 send传NULL后调用多次receive取出所有缓冲帧nRet = avcodec_send_packet(cc, pkt);// 释放,引用计数-1 为0释放空间av_packet_unref(pkt);if(nRet !=0) {charbuf[1024] = {0}; ...
if(avformat_find_stream_info(pFormatCtx,NULL)<0){LOGE("%s","获取音频信息失败");return;}int audio_stream_idx=-1;int i=0;for(int i=0;inb_streams;++i){if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){LOGE(" 找到音频id %d",pFormatCtx->streams[i]->codec->cod...
FFmpeg结合SDL可以播放音频文件,也能播放视频文件中的音频流,《FFmpeg开发实战:从零基础到短视频上线》一书第10章的示例程序playaudio.c支持播放mp3和aac两种格式的音频,却不支持播放其他格式的音频。 因为mp3和aac两个格式拥有标准的规范定义,比如mp3规定每帧音频固定包含1152个样本,而aac规定每帧音频固定包含1024...
接下来就是 ffplayer.c 文件,封装了整个播放器,包含了三个子模块,分别是解复用、视频解码和音频解码模块,三个模块分别位于三个子线程中: 代码语言:c 复制 // 函数实现void*player_open(char*file,void*win,PLAYER_INIT_PARAMS*params){PLAYER*player=NULL;//...代码省略pthread_create(&player->avdemux_thread...
输入Ctrl+C结束程序运行 4、源码清单 源码在上篇的内容基础上,主要增加音频缓存队列处理,音频解码,音频播放等几个部分,源码几乎每行都有注释,方便大家调试理解 // tutorial03.c// A pedagogical video player that will stream through every video frame as fast as it can// and play audio (out of sync)....