147 lines
4.5 KiB
C
147 lines
4.5 KiB
C
|
|
/***************************************************************************************
|
||
|
|
*
|
||
|
|
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||
|
|
*
|
||
|
|
* By downloading, copying, installing or using the software you agree to this license.
|
||
|
|
* If you do not agree to this license, do not download, install,
|
||
|
|
* copy or use the software.
|
||
|
|
*
|
||
|
|
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
|
||
|
|
*
|
||
|
|
* Redistribution and use in binary forms, with or without modification, are permitted.
|
||
|
|
*
|
||
|
|
* Unless required by applicable law or agreed to in writing, software distributed
|
||
|
|
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||
|
|
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
||
|
|
* language governing permissions and limitations under the License.
|
||
|
|
*
|
||
|
|
****************************************************************************************/
|
||
|
|
|
||
|
|
#ifndef SRT_CLN_H
|
||
|
|
#define SRT_CLN_H
|
||
|
|
|
||
|
|
#include "srt/srt.h"
|
||
|
|
#include "h264.h"
|
||
|
|
#include "ts_parser.h"
|
||
|
|
|
||
|
|
|
||
|
|
#define SRT_EVE_STOPPED 60
|
||
|
|
#define SRT_EVE_CONNECTING 61
|
||
|
|
#define SRT_EVE_CONNFAIL 62
|
||
|
|
#define SRT_EVE_NOSIGNAL 63
|
||
|
|
#define SRT_EVE_RESUME 64
|
||
|
|
#define SRT_EVE_AUTHFAILED 65
|
||
|
|
#define SRT_EVE_NODATA 66
|
||
|
|
#define SRT_EVE_VIDEOREADY 67
|
||
|
|
#define SRT_EVE_AUDIOREADY 68
|
||
|
|
|
||
|
|
|
||
|
|
#define DEF_BUFTIME (10 * 60 * 60 * 1000) /* 10 hours default */
|
||
|
|
|
||
|
|
typedef int (*srt_notify_cb)(int, void *);
|
||
|
|
typedef int (*srt_video_cb)(uint8 *, int, uint32, void *);
|
||
|
|
typedef int (*srt_audio_cb)(uint8 *, int, uint32, void *);
|
||
|
|
|
||
|
|
|
||
|
|
class CSrtClient
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
CSrtClient(void);
|
||
|
|
~CSrtClient(void);
|
||
|
|
|
||
|
|
public:
|
||
|
|
BOOL srt_start(const char * url, const char * user, const char * pass);
|
||
|
|
BOOL srt_play();
|
||
|
|
BOOL srt_stop();
|
||
|
|
BOOL srt_pause();
|
||
|
|
BOOL srt_close();
|
||
|
|
|
||
|
|
char * get_url() {return m_url;}
|
||
|
|
char * get_user() {return m_user;}
|
||
|
|
char * get_pass() {return m_pass;}
|
||
|
|
int audio_codec() {return m_nAudioCodec;}
|
||
|
|
int video_codec() {return m_nVideoCodec;}
|
||
|
|
void get_h264_params();
|
||
|
|
BOOL get_h264_params(uint8 * p_sps, int * sps_len, uint8 * p_pps, int * pps_len);
|
||
|
|
void get_h265_params();
|
||
|
|
BOOL get_h265_params(uint8 * p_sps, int * sps_len, uint8 * p_pps, int * pps_len, uint8 * p_vps, int * vps_len);
|
||
|
|
int get_video_width() {return m_nWidth;}
|
||
|
|
int get_video_height() {return m_nHeight;}
|
||
|
|
double get_video_framerate() {return m_nFrameRate;}
|
||
|
|
int get_audio_samplerate() {return m_nSamplerate;}
|
||
|
|
int get_audio_channels() {return m_nChannels;}
|
||
|
|
uint8 * get_audio_config() {return m_pAudioConfig;}
|
||
|
|
int get_audio_config_len() {return m_nAudioConfigLen;}
|
||
|
|
uint32 get_video_init_ts() {return m_nVideoInitTS;}
|
||
|
|
uint32 get_audio_init_ts() {return m_nAudioInitTS;}
|
||
|
|
|
||
|
|
void set_notify_cb(srt_notify_cb notify, void * userdata);
|
||
|
|
void set_video_cb(srt_video_cb cb);
|
||
|
|
void set_audio_cb(srt_audio_cb cb);
|
||
|
|
void set_rx_timeout(int timeout);
|
||
|
|
|
||
|
|
void rx_thread();
|
||
|
|
void srt_payload_cb(uint8 * p_data, uint32 len, uint32 type, uint64 pts);
|
||
|
|
void video_data_cb(uint8 * p_data, int len, uint32 ts);
|
||
|
|
void audio_data_cb(uint8 * p_data, int len, uint32 ts);
|
||
|
|
|
||
|
|
private:
|
||
|
|
BOOL srt_connect();
|
||
|
|
void srt_send_notify(int event);
|
||
|
|
void srt_h264_rx(uint8 * p_data, uint32 len, uint64 pts);
|
||
|
|
void srt_h265_rx(uint8 * p_data, uint32 len, uint64 pts);
|
||
|
|
BOOL srt_parse_adts(uint8 * p_data, uint32 len);
|
||
|
|
|
||
|
|
private:
|
||
|
|
char m_url[512];
|
||
|
|
char m_user[64];
|
||
|
|
char m_pass[64];
|
||
|
|
char m_ip[128];
|
||
|
|
char m_streamid[256];
|
||
|
|
int m_nport;
|
||
|
|
|
||
|
|
int m_fd;
|
||
|
|
int m_eid;
|
||
|
|
|
||
|
|
BOOL m_bRunning;
|
||
|
|
BOOL m_bVideoReady;
|
||
|
|
BOOL m_bAudioReady;
|
||
|
|
pthread_t m_tidRx;
|
||
|
|
|
||
|
|
uint8 m_pVps[256];
|
||
|
|
int m_nVpsLen;
|
||
|
|
uint8 m_pSps[256];
|
||
|
|
int m_nSpsLen;
|
||
|
|
uint8 m_pPps[256];
|
||
|
|
int m_nPpsLen;
|
||
|
|
|
||
|
|
TSParser m_tsParser;
|
||
|
|
|
||
|
|
uint8 m_pAudioConfig[32];
|
||
|
|
uint32 m_nAudioConfigLen;
|
||
|
|
|
||
|
|
int m_nVideoCodec;
|
||
|
|
int m_nWidth;
|
||
|
|
int m_nHeight;
|
||
|
|
double m_nFrameRate;
|
||
|
|
int m_nAudioCodec;
|
||
|
|
int m_nSamplerate;
|
||
|
|
int m_nChannels;
|
||
|
|
|
||
|
|
uint32 m_nVideoInitTS;
|
||
|
|
uint32 m_nAudioInitTS;
|
||
|
|
|
||
|
|
srt_notify_cb m_pNotify;
|
||
|
|
void * m_pUserdata;
|
||
|
|
srt_video_cb m_pVideoCB;
|
||
|
|
srt_audio_cb m_pAudioCB;
|
||
|
|
void * m_pMutex;
|
||
|
|
int m_nRxTimeout;
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|