代码逻辑问题

来源:7-11 实现PCM播放器-3

weixin_慕虎2107474

2018-12-29

你好!
pcm播放器实现中:
主函数这里的判断条件是有问题的,
//the main thread wait for a moment
while(audio_pos < (audio_buf + buffer_len)) {
SDL_Delay(1);
}
回调函数会去更新buffer_len,因此这个实现不能播放完整的pcm文件,只能播放一部分。

写回答

1回答

李超

2018-12-29

非常棒,这里确实有问题,要加一把锁才ok, 或者通过无锁的特殊处理。为你点赞

0
1
音视频雪兔
不知道我理解的是否正确,这里看到说代码有问题,我又仔细梳理的代码逻辑,发现,回调函数同时改变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整好减为零,导致主线程读取数据的循环提前结束。我认为就是这里的漏洞了。不知道理解的是否正确,希望老师确认一下
2021-02-07
共1条回复

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2726 学习 · 814 问题

查看课程