采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
你好! pcm播放器实现中: 主函数这里的判断条件是有问题的, //the main thread wait for a moment while(audio_pos < (audio_buf + buffer_len)) { SDL_Delay(1); } 回调函数会去更新buffer_len,因此这个实现不能播放完整的pcm文件,只能播放一部分。
非常棒,这里确实有问题,要加一把锁才ok, 或者通过无锁的特殊处理。为你点赞
不知道我理解的是否正确,这里看到说代码有问题,我又仔细梳理的代码逻辑,发现,回调函数同时改变audio_pos和buffer_len,这样的话,是不是会导致两个问题:1、while(audio_pos < (audio_buf + buffer_len))该循环提前结束,因为buffer_len再减少,audio_pos在增加,有可能audio_pos增加到audio_buf一半的时候,上述条件满足,就去读新数据;2、回调函数导致的buffer_len的减少,如果buffer_len整好减为零,导致主线程读取数据的循环提前结束。我认为就是这里的漏洞了。不知道理解的是否正确,希望老师确认一下
登录后可查看更多问答,登录/注册
学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师
4.9k 7
4.9k 3
1.8k 12
174 12
42 12