背景
该直播播放器的背景是来源于 《拉流推流服务器设计》的一个分支,它的重点是把拉下来的流进行解码显示播放。
设计点
- 要实现跨平台, 目前支持的平台linux和windows
- 要模块化和结构化
- 可以拉各个平台的直播流
- 要音视频同步
基于上面的设计点大体的一个结构图
- 这里的音频播放是一个抽象类,windows版本实现是libao,linux版本实现是alsa
- 视频显示用的SDL
class AudioOutAbstract
{
public:
AudioOutAbstract() {}
virtual ~AudioOutAbstract()
{
deinit();
}
// name of output plugin
//virtual const char *name() const = 0;
// set setting
virtual int setSetting(const int samplerate, const int channels, const int nsamples)
{
return 0;
}
// called before playing
virtual void start() {}
// called after playing
virtual void stop() {}
// play samples
virtual void play(char *data, int bytes) = 0;
// called at startup
virtual bool init(const std::string &settings)
{
return true;
}
// called at shutdown
virtual void deinit() {}
};
视频显示
class SDLDisp {
public:
SDLDisp(int _screen_w,int _screen_h);
virtual ~SDLDisp();
int initSDL(char *winName);
int closeSDL();
void DisplayYUV420(AVFrame *pFrameYUV);
private:
int screen_w;
int screen_h;
bool isquit;
};
联系
点击链接加入群【rtmp直播交流学习合作】:https://jq.qq.com/?_wv=1027&k=4Aqm21F
qq群号:559425694
email:zhanchonglongba@126.com/690759587