Commit 7489c304decdbf74a9fe4acfbf53ab354bbd0bab
1 parent
83bf6c73
更新demo
Showing
1 changed file
with
33 additions
and
55 deletions
src/decoder/gb28181/main.cpp.28181
@@ -26,8 +26,6 @@ | @@ -26,8 +26,6 @@ | ||
26 | using namespace std; | 26 | using namespace std; |
27 | 27 | ||
28 | 28 | ||
29 | -SipServer sipServer; | ||
30 | - | ||
31 | static void RTP_Stream_CallBack(void* userdata, int videoType, char* data, int len, int isKey, uint64_t pts, uint64_t localPts) | 29 | static void RTP_Stream_CallBack(void* userdata, int videoType, char* data, int len, int isKey, uint64_t pts, uint64_t localPts) |
32 | { | 30 | { |
33 | LOG_INFO("len: {}", len); | 31 | LOG_INFO("len: {}", len); |
@@ -47,23 +45,28 @@ bool RequestStream(const char* deviceId, int rtp_port); | @@ -47,23 +45,28 @@ bool RequestStream(const char* deviceId, int rtp_port); | ||
47 | // ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) | 45 | // ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) |
48 | int allocRtpPort() { | 46 | int allocRtpPort() { |
49 | 47 | ||
50 | - static int s_rtpPort = MIN_RTP_PORT; | ||
51 | - // if (MIN_RTP_PORT == s_rtpPort) | ||
52 | - // { | ||
53 | - // srand((unsigned int)time(NULL)); | ||
54 | - // s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); | ||
55 | - // } | 48 | + int s_rtpPort = MIN_RTP_PORT; |
49 | + | ||
50 | + srand((unsigned int)time(NULL)); | ||
51 | + s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); | ||
52 | + | ||
53 | + if (s_rtpPort % 2) | ||
54 | + ++s_rtpPort; | ||
56 | 55 | ||
57 | - // if (s_rtpPort % 2) | ||
58 | - // ++s_rtpPort; | 56 | + int count = 0; |
59 | 57 | ||
60 | while (true) | 58 | while (true) |
61 | { | 59 | { |
62 | - s_rtpPort = s_rtpPort >= MAX_RTP_PORT ? MIN_RTP_PORT : s_rtpPort; | 60 | + if (s_rtpPort >= MAX_RTP_PORT) { |
61 | + s_rtpPort = MIN_RTP_PORT; | ||
62 | + count ++; | ||
63 | + if (count > 1) { | ||
64 | + printf("10000 到 60000 没有可用的port"); | ||
65 | + } | ||
66 | + } | ||
63 | 67 | ||
64 | int i = 0; | 68 | int i = 0; |
65 | - for (; i < 2; i++) | ||
66 | - { | 69 | + for (; i < 2; i++) { |
67 | sockaddr_in sRecvAddr; | 70 | sockaddr_in sRecvAddr; |
68 | int s = socket(AF_INET, SOCK_DGRAM, 0); | 71 | int s = socket(AF_INET, SOCK_DGRAM, 0); |
69 | 72 | ||
@@ -72,15 +75,13 @@ int allocRtpPort() { | @@ -72,15 +75,13 @@ int allocRtpPort() { | ||
72 | sRecvAddr.sin_port = htons(s_rtpPort + i); | 75 | sRecvAddr.sin_port = htons(s_rtpPort + i); |
73 | 76 | ||
74 | int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); | 77 | int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); |
75 | - if (nResult != 0) | ||
76 | - { | 78 | + if (nResult != 0) { |
77 | break; | 79 | break; |
78 | } | 80 | } |
79 | 81 | ||
80 | nResult = close(s); | 82 | nResult = close(s); |
81 | - if (nResult != 0) | ||
82 | - { | ||
83 | - printf("closesocket failed:%d\n", nResult); | 83 | + if (nResult != 0) { |
84 | + printf("closesocket failed : {}", nResult); | ||
84 | break; | 85 | break; |
85 | } | 86 | } |
86 | } | 87 | } |
@@ -130,15 +131,8 @@ bool start_rtp(string deviceId, int m_port) { | @@ -130,15 +131,8 @@ bool start_rtp(string deviceId, int m_port) { | ||
130 | 131 | ||
131 | 132 | ||
132 | bool RequestStream(const char* deviceId, int rtp_port) { | 133 | bool RequestStream(const char* deviceId, int rtp_port) { |
133 | - | ||
134 | - std::vector< DeviceInfo > vec_device = sipServer.GetDeviceList(); | ||
135 | - if (vec_device.size() <= 0) | ||
136 | - { | ||
137 | - cout << "no device" << endl; | ||
138 | - return false; | ||
139 | - } | ||
140 | - | ||
141 | - int ret = sipServer.RequestInvite_TCP_a(vec_device[0].id.c_str(), rtp_port); | 134 | + SipServer* pServer = SipServer::getInstance(); |
135 | + int ret = pServer->RequestInvite_UDP(deviceId, rtp_port); | ||
142 | if (ret > 0) | 136 | if (ret > 0) |
143 | { | 137 | { |
144 | return true; | 138 | return true; |
@@ -149,46 +143,30 @@ bool RequestStream(const char* deviceId, int rtp_port) { | @@ -149,46 +143,30 @@ bool RequestStream(const char* deviceId, int rtp_port) { | ||
149 | 143 | ||
150 | int main(int argc, char *argv[]) { | 144 | int main(int argc, char *argv[]) { |
151 | 145 | ||
152 | - ServerInfo info( | ||
153 | - "SY_Sip_Server", | ||
154 | - "12345678", | ||
155 | - "192.168.60.179", | ||
156 | - 15060, | ||
157 | - "34020000002000000002", | ||
158 | - "3402000000", | ||
159 | - "sy123456", | ||
160 | - 1800, | ||
161 | - 3600); | ||
162 | - | ||
163 | - | ||
164 | - sipServer.Init(info); | ||
165 | - | ||
166 | - std::this_thread::sleep_for(std::chrono::seconds(5)); | 146 | + if (argc <= 1) |
147 | + { | ||
148 | + printf("请输入待获取的摄像头的视频通道编码ID。"); | ||
149 | + return -1; | ||
150 | + } | ||
167 | 151 | ||
168 | - sipServer.cacheCatalog(); | 152 | + SipServer* pServer = SipServer::getInstance(); |
153 | + pServer->Init(nullptr); | ||
169 | 154 | ||
170 | - std::vector< DeviceInfo > vec_device; | 155 | + // const char* sipid = "34020000001310000001"; |
156 | + const char* sipid = argv[1]; | ||
171 | char oper = 'g'; | 157 | char oper = 'g'; |
172 | while (oper != 'q') { | 158 | while (oper != 'q') { |
173 | oper = getchar(); | 159 | oper = getchar(); |
174 | switch (oper) | 160 | switch (oper) |
175 | { | 161 | { |
176 | case 'g': | 162 | case 'g': |
177 | - sipServer.cacheCatalog(); | ||
178 | break; | 163 | break; |
179 | case 'i': | 164 | case 'i': |
180 | - vec_device = sipServer.GetDeviceList(); | ||
181 | - if (vec_device.size() <= 0) | ||
182 | - { | ||
183 | - cout << "no device" << endl; | ||
184 | - break; | ||
185 | - } | ||
186 | - | ||
187 | { | 165 | { |
188 | - int rtp_port = 30026;//allocRtpPort(); | ||
189 | - start_rtp(vec_device[0].id, rtp_port); | 166 | + int rtp_port = allocRtpPort(); |
167 | + start_rtp(sipid, rtp_port); | ||
190 | 168 | ||
191 | - sipServer.RequestInvite_UDP(vec_device[0].id.c_str(), rtp_port); | 169 | + pServer->RequestInvite_UDP(sipid, rtp_port); |
192 | } | 170 | } |
193 | break; | 171 | break; |
194 | case 'b': | 172 | case 'b': |