201 lines
6.7 KiB
C
201 lines
6.7 KiB
C
/**
|
|
Live555 inquiry functions.
|
|
|
|
Sample module detailed description.
|
|
@file nvtlive555.h
|
|
@ingroup LIVE555
|
|
@note Nothing (or anything need to be mentioned).
|
|
Copyright Novatek Microelectronics Corp. 2014. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _NVTLIVE555_H
|
|
#define _NVTLIVE555_H
|
|
|
|
#define NVTLIVE555_INTERFACE_VER_VERSION 0x17022219
|
|
|
|
#if !defined(ENUM_DUMMY4WORD)
|
|
#define ENUM_DUMMY4WORD(name) E_##name = 0x10000000
|
|
#endif
|
|
|
|
#define NVTLIVE555_SVC_LEVEL_0 0 ///< all frames are sent
|
|
#define NVTLIVE555_SVC_LEVEL_1 1 ///< drop some frames smoothly
|
|
#define NVTLIVE555_SVC_LEVEL_2 2 ///< drop more frames smoothly
|
|
|
|
#define NVTLIVE555_EN_MASK_SVC_LEVEL 0x01
|
|
#define NVTLIVE555_EN_MASK_SVC_MAP 0x02
|
|
|
|
typedef enum _LIVE555_SERVER_EVENT {
|
|
LIVE555_SERVER_EVENT_OPTIONS,
|
|
LIVE555_SERVER_EVENT_DESCRIBE,
|
|
LIVE555_SERVER_EVENT_SETUP,
|
|
LIVE555_SERVER_EVENT_TEARDOWN,
|
|
LIVE555_SERVER_EVENT_PLAY,
|
|
LIVE555_SERVER_EVENT_PAUSE,
|
|
} LIVE555_SERVER_EVENT;
|
|
|
|
typedef struct _NVTLIVE555_CFG {
|
|
int support_rtcp; ///< 0: not support, 1: support
|
|
int support_meta; ///< 0: not support, 1: support (for onvif)
|
|
unsigned int port; ///< rtsp port number, normally is 554
|
|
unsigned int snd_size; ///< SO_SNDBUF size
|
|
int tos; ///< tos value
|
|
int max_clients; ///< accept max connections at the same time
|
|
} NVTLIVE555_CFG;
|
|
|
|
typedef struct _NVTLIVE555_URL_INFO {
|
|
unsigned int channel_id; ///< channel id
|
|
unsigned int svc_level; ///< must be NVTLIVE555_SVC_LEVEL_
|
|
unsigned int total_ms; ///< for liveview set it to 0;
|
|
} NVTLIVE555_URL_INFO;
|
|
|
|
typedef struct _NVTLIVE555_STATISTIC {
|
|
#if 0
|
|
unsigned int channel_id; ///< channel id, for ecos it is always 0
|
|
unsigned int is_svc_support; ///< 0: not support, 1: supported
|
|
unsigned int client_ip_addr; ///< in_addr //wifiteam
|
|
unsigned int skip_svc_frm[3]; //wifiteam skipped frame count
|
|
unsigned int skip_svc_byte[3]; //wifiteam skipped bytes
|
|
#else //for backward compatible
|
|
unsigned int channel_id; ///< channel id, for ecos it is always 0
|
|
unsigned int connect_id; ///< connection id, for ecos it is always 0
|
|
int ms_to_gop; ///< the time(ms) distance from last frame of previous GOP to current GOP's 1st frame
|
|
unsigned int is_svc_support; ///< 0: not support, 1: supported
|
|
unsigned int client_ip_addr; ///< in_addr //wifiteam
|
|
unsigned int skip_svc_frm[3]; ///< wifiteam skipped frame count
|
|
unsigned int skip_svc_byte[3]; ///< wifiteam skipped bytes
|
|
#endif
|
|
} NVTLIVE555_STATISTIC;
|
|
|
|
typedef struct _NVTLIVE555_STRATEGY {
|
|
int en_mask; ///< NVTLIVE555_EN_MASK
|
|
int svc_level; ///< svc strategy for NVTLIVE555_EN_MASK_SVC_LEVEL
|
|
int svc_sock_priority[3]; ///< set it [0, 0, 1] that is svc0,1 use socket[0], svc2 use socket[1] value cannot be larger than 1 for NVTLIVE555_EN_MASK_SVC_MAP
|
|
} NVTLIVE555_STRATEGY;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if defined(__WIN32__) || defined(_WIN32)
|
|
#define __WEAK
|
|
#else
|
|
#define __WEAK __attribute__ ((weak))
|
|
#endif
|
|
|
|
typedef int(*NVTLIVE555_GET_CFG)(NVTLIVE555_CFG *p_cfg); // given a default proffered config, user can modify it
|
|
typedef int(*NVTLIVE555_PARSE_URL)(const char *url, NVTLIVE555_URL_INFO *p_info);
|
|
typedef int(*NVTLIVE555_BRC)(const NVTLIVE555_STATISTIC *p_statistic, NVTLIVE555_STRATEGY *p_strategy);
|
|
typedef int(*NVTLIVE555_GET_META)(char *p_txt, unsigned int txt_buf_size, int first_meta);
|
|
typedef int(*NVTLIVE555_RTSP_EVENT)(LIVE555_SERVER_EVENT evt);
|
|
typedef int(*NVTLIVE555_REQUIRE_KEY_FRAME)(int channel);
|
|
typedef int(*NVTLIVE555_SEEK)(int channel, double request, double *response);
|
|
typedef int(*NVTLIVE555_PAUSE)(int channel);
|
|
typedef int(*NVTLIVE555_RESUME)(int channel);
|
|
|
|
typedef struct _NVTLIVE555_CB {
|
|
NVTLIVE555_GET_CFG get_cfg; //(Optional, could be NULL)
|
|
NVTLIVE555_PARSE_URL parse_url; //(Optional, could be NULL)
|
|
NVTLIVE555_BRC get_brc; //(Optional, could be NULL)
|
|
NVTLIVE555_GET_META get_meta; //(Optional, could be NULL)
|
|
NVTLIVE555_RTSP_EVENT notify_rtsp_event; //(Optional, could be NULL)
|
|
NVTLIVE555_REQUIRE_KEY_FRAME require_key_frame; //(Optional, could be NULL)
|
|
NVTLIVE555_SEEK seek; //for playback file, it have to.
|
|
NVTLIVE555_PAUSE pause; //for playback file, it have to.
|
|
NVTLIVE555_RESUME resume; //for playback file, it have to.
|
|
} NVTLIVE555_CB;
|
|
|
|
typedef enum _NVTLIVE555_CODEC {
|
|
NVTLIVE555_CODEC_UNKNOWN,
|
|
NVTLIVE555_CODEC_MJPG,
|
|
NVTLIVE555_CODEC_H264,
|
|
NVTLIVE555_CODEC_H265,
|
|
NVTLIVE555_CODEC_PCM,
|
|
NVTLIVE555_CODEC_AAC,
|
|
NVTLIVE555_CODEC_G711_ALAW,
|
|
NVTLIVE555_CODEC_G711_ULAW,
|
|
NVTLIVE555_CODEC_META,
|
|
NVTLIVE555_CODEC_COUNT,
|
|
ENUM_DUMMY4WORD(NVTLIVE555_CODEC),
|
|
} NVTLIVE555_CODEC;
|
|
|
|
typedef struct _NVTLIVE555_VIDEO_INFO {
|
|
NVTLIVE555_CODEC codec_type;
|
|
unsigned char vps[64];
|
|
int vps_size;
|
|
unsigned char sps[64];
|
|
int sps_size;
|
|
unsigned char pps[64];
|
|
int pps_size;
|
|
} NVTLIVE555_VIDEO_INFO;
|
|
|
|
typedef struct _NVTLIVE555_AUDIO_INFO {
|
|
NVTLIVE555_CODEC codec_type;
|
|
int sample_per_second;
|
|
int bit_per_sample;
|
|
int channel_cnt;
|
|
} NVTLIVE555_AUDIO_INFO;
|
|
|
|
typedef struct _NVTLIVE555_STRM_INFO {
|
|
unsigned int addr;
|
|
unsigned int size;
|
|
unsigned long long timestamp;
|
|
unsigned int svc_idx; //only h264 only
|
|
} NVTLIVE555_STRM_INFO;
|
|
|
|
#define NVTLIVE555_ER_OK 0
|
|
#define NVTLIVE555_ER_NG (-1)
|
|
#define NVTLIVE555_ER_RETRY (-2)
|
|
|
|
typedef int(*NVTLIVE555_OPEN_STRM)(int channel);
|
|
typedef int(*NVTLIVE555_CLOSE_STRM)(int handle);
|
|
typedef int(*NVTLIVE555_GET_VIDEO_INFO)(int handle, int timeout_ms, NVTLIVE555_VIDEO_INFO *p_info);
|
|
typedef int(*NVTLIVE555_GET_AUDIO_INFO)(int handle, int timeout_ms, NVTLIVE555_AUDIO_INFO *p_info);
|
|
typedef int(*NVTLIVE555_LOCK_STRM)(int handle, int timeout_ms, NVTLIVE555_STRM_INFO *p_strm);
|
|
typedef int(*NVTLIVE555_UNLOCK_STRM)(int handle);
|
|
|
|
typedef struct _NVTLIVE555_HDAL_CB {
|
|
// Video
|
|
NVTLIVE555_OPEN_STRM open_video;
|
|
NVTLIVE555_CLOSE_STRM close_video;
|
|
NVTLIVE555_GET_VIDEO_INFO get_video_info;
|
|
NVTLIVE555_LOCK_STRM lock_video;
|
|
NVTLIVE555_UNLOCK_STRM unlock_video;
|
|
// Audio
|
|
NVTLIVE555_OPEN_STRM open_audio;
|
|
NVTLIVE555_CLOSE_STRM close_audio;
|
|
NVTLIVE555_GET_AUDIO_INFO get_audio_info;
|
|
NVTLIVE555_LOCK_STRM lock_audio;
|
|
NVTLIVE555_UNLOCK_STRM unlock_audio;
|
|
} NVTLIVE555_HDAL_CB;
|
|
|
|
typedef struct _NVTLIVE555_INIT {
|
|
unsigned int version; // MUST BE LIVE555_INTERFACE_VER
|
|
NVTLIVE555_CB require_cb; // requirement callbacks
|
|
NVTLIVE555_HDAL_CB hdal_cb; // bitstream callbacks, for system has no stream sender
|
|
} NVTLIVE555_INIT;
|
|
|
|
/**
|
|
notify live555 initialized
|
|
|
|
user can initialize / create their own data by this function.
|
|
*/
|
|
extern int nvtlive555_open(NVTLIVE555_INIT *p_init);
|
|
|
|
/**
|
|
notify live555 exit
|
|
|
|
user can destroy their own dynamic data by this function.
|
|
*/
|
|
extern int nvtlive555_close(void);
|
|
|
|
/**
|
|
debug command for linux only
|
|
*/
|
|
extern int nvtlive555_dbgcmd(int argc, char* argv[]);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
/* ----------------------------------------------------------------- */
|
|
#endif /* nvtlive555.h */
|