您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
9. IAudioPlay的Update将音频压入缓冲队列并测试~1
发布时间:2021-06-12 10:33:48编辑:雪饮阅读()
為實現緩衝我們需要有緩衝隊列和互斥量,於是乎在cpp/IAudioPlay.h:
#define XPLAY_IAUDIOPLAY_H
#include <list>
#include "IObserver.h"
#include "XParameter.h"
class IAudioPlay: public IObserver
{
public:
//缓冲满后阻塞
virtual void Update(XData data);
virtual bool StartPlay(XParameter out) = 0;
//最大缓冲
int maxFrame = 100;
protected:
std::list <XData> frames;
std::mutex framesMutex;
};
#endif //XPLAY_IAUDIOPLAY_H
爲了便於調試,我們可以在cpp/IResample.cpp重采樣中打印下相關日志:
如果沒有什麽問題,這裏還是可以正常播放的,當然還是以老師的v1080.mp4爲例的
#include "XLog.h"
void IAudioPlay::Update(XData data)
{
XLOGE("IAudioPlay::Update %d",data.size);
//压入缓冲队列
if(data.size<=0|| !data.data) return;
while(!isExit)
{
framesMutex.lock();
if(frames.size() > maxFrame)
{
framesMutex.unlock();
XSleep(1);
continue;
}
frames.push_back(data);
framesMutex.unlock();
break;
}
}
#include "XLog.h"
void IResample::Update(XData data)
{
XData d = this->Resample(data);
XLOGE("his->Resample(data) %d",d.size);
if(d.size > 0)
{
this->Notify(d);
}
}
关键字词:IAudioPlay,Update