关于音视频同步
我现在在用SDL做一个播放YUV视频和PCM音频的播放器,都是直接播放原始数据,现在分别播放没问题了,只是音视频同步这块我没有什么思路,有没有谁能提供个思路。
第一次做这方面的,目前有点混乱。查资料我感觉视频的时间可以用video_clock+=40(默认25fps)
但是音频这边采样率什么的搞不太懂,我调试查看,当采样率为44100,缓存为1024时,SDL调用回调函数的间隔是20,20,31这样一直循环下去,我不明白的就是每次传入的数据大小都一样为什么会有一个间隔不同呢?
主要是音视频同步的思路,谢谢!
下面是我播放音频的代码
第一次做这方面的,目前有点混乱。查资料我感觉视频的时间可以用video_clock+=40(默认25fps)
但是音频这边采样率什么的搞不太懂,我调试查看,当采样率为44100,缓存为1024时,SDL调用回调函数的间隔是20,20,31这样一直循环下去,我不明白的就是每次传入的数据大小都一样为什么会有一个间隔不同呢?
主要是音视频同步的思路,谢谢!
下面是我播放音频的代码
static Uint8 *audio_chunk;
static Uint32 audio_len;
static Uint8 *audio_pos;
void fill_audio(void *udata,Uint8 *stream,int len){
//SDL
long diff=time.elapsed();
qDebug("time is:%ld the len %d",diff,len);
SDL_memset(stream, 0, len);
if(audio_len==0) /* Only play if we have data left */
return;
len=(len>audio_len?audio_len:len); /* Mix as much data as possible */
SDL_MixAudio(stream,audio_pos,len,SDL_MIX_MAXVOLUME);
audio_pos += len;
audio_len -= len;
}
int main_loop_pcmfile(void *window)
{
SDL_AudioSpec wanted_spec;
wanted_spec.freq = 44100;
wanted_spec.format = AUDIO_S16SYS;
wanted_spec.channels = 2;
wanted_spec.silence = 0;
wanted_spec.samples = 1024;
wanted_spec.callback = fill_audio;
if (SDL_OpenAudio(&wanted_spec, NULL)<0){
qDebug("can't open audio");
return -1;
}
FILE *fp=fopen("out.pcm","rb+");
if(fp==NULL){
printf("cannot open this file\n");
return -1;
}
int pcm_buffer_size=4096;
char *pcm_buffer=(char *)malloc(pcm_buffer_size);
int data_count=0;
time.start();
while(1){
if (fread(pcm_buffer, 1, pcm_buffer_size, fp) != pcm_buffer_size){
// Loop
fseek(fp, 0, SEEK_SET);
fread(pcm_buffer, 1, pcm_buffer_size, fp);
data_count=0;
}
audio_len =pcm_buffer_size;
audio_pos = (Uint8 *) pcm_buffer;
//Play
SDL_PauseAudio(0);
while(audio_len>0)//Wait until finish
SDL_Delay(1);
}
}
...全文
相关推荐
ffmpeg 音视频同步
ffmepg 实现录制音视频数据,保证音视频同步,希望对大家有用
ffmpeg音视频同步Demo
Windows平台上的音视频同步Demo,原作者博客链接:http://www.cnblogs.com/wangguchangqing/p/5900426.html,下载的工程文件不能编译通过,这个问题新手会很头疼,我修改并重新配置了工程,下载即可编译通过,使用VS2012等IDE打开
音视频同步算法
音视频同步算法, 使用pts同步 音频流、视频流 流程图
qt ffmpeg播放音视频,且支持音视频同步
qt ffmpeg播放音视频,且支持音视频同步。
ffplayer,ffmpeg音视频同步
ffmpeg音视频同步,sdl2环境下,实现ffmpeg音视频同步,fplayer,vs2017编译


多媒体/流媒体开发
