开发实现C++ RTMP直播拉流播放器

背景

该直播播放器的背景是来源于 《拉流推流服务器设计》的一个分支,它的重点是把拉下来的流进行解码显示播放。

设计点

  • 要实现跨平台, 目前支持的平台linux和windows
  • 要模块化和结构化
  • 可以拉各个平台的直播流
  • 要音视频同步

基于上面的设计点大体的一个结构图

开发实现C++ RTMP直播拉流播放器_第1张图片

  • 这里的音频播放是一个抽象类,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:[email protected]/690759587

你可能感兴趣的:(直播技术)