65 lines
1.2 KiB
C
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);
|