基于qt,msvc2017-64bits,ffmpeg.opengl的播放器
chenshijun
2020-12-03 9e8804424408db79fcdb229a016ac87952e4e0f6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once
 
#include <stdint.h>
#include "Mutex/Cond.h"
extern "C"
{
    #include <libavcodec/avcodec.h>
}
 
enum av_type_t
{
    AV_VIDEO = 0,
    AV_AUDIO,
    AV_UNKOWN,
};
 
enum audio_codec_t
{
    AUDIO_UNKNOWN = 0,
    AUDIO_G711_A,
    AUDIO_G711_MU,
    AUDIO_G722,
    AUDIO_G723_1,
    AUDIO_G726,
    AUDIO_G729,
};
 
enum video_codec_t
{
    VIDEO_UNKNOWN = 0,
    VIDEO_H264,
    VIDEO_HEVC,
    VIDEO_MPEG4,
};
 
enum VIDEOTYPE {
    NORMALVIDEO = 0,
    RUNWEIVIDEO = 1,
    CDYDVIDEO = 2,
    CSHHVIDEO = 3,
    ZZCXVIDEO = 4,
    HKVIDEO = 5,
    NULLVIDEO
};
 
typedef struct packet_t {
    uint8_t* data;
    uint32_t length;
    int64_t pts;
    int64_t dts;
    av_type_t type;
}packet_t;
 
class DataCallback {
public:
    DataCallback():opaque(NULL){}
    virtual ~DataCallback() = default;
 
    virtual int push_packet(const packet_t* pkt, const av_type_t type) = 0;
    virtual int open_codec(const int codec_type, const av_type_t type) = 0;
    virtual int is_quit() = 0;
    virtual int quit() = 0;
    virtual int push_finish() = 0;
 
    void* opaque;
};