-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
120 lines (113 loc) · 3.53 KB
/
main.cpp
File metadata and controls
120 lines (113 loc) · 3.53 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "xplay2.h"
#include <QtWidgets/QApplication>
#include <iostream>
using namespace std;
#include "XDemux.h"
#include "XDecode.h"
//#include "XResample.h"
//#include "XAudioPlay.h"
extern "C" {
#include "libavcodec/avcodec.h"
}
#include <QThread>
#include "XAudioThread.h"
#include "XVideoThread.h"
class TestThread : public QThread
{
public:
XAudioThread at;
XVideoThread vt;
void Init()
{
const char* url = "rtmp://live.hkstv.hk.lxdns.com/hks";
//const char* url = "rtmp://58.200.131.2:1935/livetv/gxtv";
//cout << "demux.Open = " << demux.Open(url) << endl;
demux.Read();
demux.Clear();
demux.Close();
url = "v123.mp4";
cout << "demux.Open = " << demux.Open(url) << endl;
//cout << "demux.Seek = " << demux.Seek(0.9) << endl;
//cout << "demux.CopyVPara = " << demux.CopyVPara() << endl;
//cout << "demux.CopyAPara = " << demux.CopyAPara() << endl;
//vdecode.Open(demux.CopyVPara());
//adecode.Open(demux.CopyAPara());
//重采样
//cout << "resample.Open = " << resample.Open(demux.CopyAPara()) << endl;;
/* XAudioPlay::Get()->sampleRate = demux.sampleRate;
XAudioPlay::Get()->channels = demux.channels;
cout << "XAudioPlay::Get()->Open() = " << XAudioPlay::Get()->Open() << endl;;
XAudioPlay::Get()->Open();*/
cout << "at.Open = " << at.Open(demux.CopyAPara(),demux.sampleRate,demux.channels) << endl;
;
vt.Open(demux.CopyVPara(), video, demux.width, demux.height);
//音频的线程启动
at.start();
//启动视频线程
vt.start();
}
unsigned char* pcm = new unsigned char[1024 * 1024];
void run()
{
for (;;) {
AVPacket* pkt = demux.Read();
if (demux.IsAudio(pkt)) {
at.Push(pkt);
// //发送
// adecode.Send(pkt);
// //接收解码
// AVFrame* frame = adecode.Recv();
// cout << "Audio = " << frame << endl;
// //音频重采样
//int len = resample.Resample(frame,pcm);
//cout << "重采样大小Resample:" << len << " ";
//while (len > 0) {
// if (XAudioPlay::Get()->GetFree() >= len) {
// XAudioPlay::Get()->Write(pcm, len);
// break;
// }
// msleep(1);
//}
//av_frame_free(&frame);
}
else {
vt.Push(pkt);
/*vdecode.Send(pkt);
AVFrame* frame = vdecode.Recv();
video->Repaint(frame);
cout << "Video = " << frame << endl;
msleep(1);
av_frame_free(&frame);*/
}
if (!pkt) break;
}
}
// 测试XDemux
XDemux demux;
/*XDecode vdecode;
XDecode adecode;
XResample resample*/
XVideoWidget *video = 0;
};
#include "XDemuxThread.h"
//v123.mp4
int main(int argc, char *argv[])
{
/* vdecode.Clear();
vdecode.Close();*/
//TestThread tt;
QApplication a(argc, argv);
XPlay2 w;
w.show();
//初始化gl窗口
//w.ui.video->Init(tt.demux.width,tt.demux.height);
//tt.video = w.ui.video;
//tt.Init();
//tt.start();
//const char* url = "v123.mp4";
//url = "https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv";
//XDemuxThread dt;
//dt.Open(url,w.ui.video);
//dt.Start();
return a.exec();
}