multimedia/client/qt_gl_/yuvgl/media/RtmpPuller.h

65 lines
1.2 KiB
C++

#pragma once
//Windows
#include <string>
#include <thread>
#include <vector>
#include <mutex>
using namespace std;
extern "C"
{
#include "libavformat/avformat.h"
#include "libavutil/mathematics.h"
#include "libavutil/time.h"
};
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "Secur32.lib")
#pragma comment (lib, "Bcrypt.lib")
class RtmpPuller {
public:
class RtmpPullObserver {
public :
enum ObserverType {
Observer_Video = 0,
Observer_Audio = 1,
};
virtual void OnRtmpFrame(void * dat, uint32_t size) {};
ObserverType mObserverType;
};
enum CAP_STATUS {
RUNNING = 1,
STOP = 2,
PAUSE = 3,
FAIL = 4,
NOSOURCE = 6,
};
RtmpPuller();
int ConnectServer(const char *);
int StartPull();
int PullData();
int SetObserver(RtmpPullObserver *);
CAP_STATUS Status();
AVStream *AudioStream();
private:
CAP_STATUS mStatus;
AVOutputFormat *mOutFormat = NULL;
//Input AVFormatContext and Output AVFormatContext
AVFormatContext *mIfmtCtx = NULL;
AVPacket pkt;
string mRtmpUrl;
int mVideoIndex;
int mAudioIndex;
int mFrameIndex;
AVBitStreamFilterContext* mH264bsfc;
std::thread *mThread;
vector<RtmpPullObserver*> mObserver;
AVStream *mAudioStream;
AVStream *mVideoStream;
mutex mMux;
};
int ThreadPull(RtmpPuller*p);