|
- #ifndef _rtsp_server_h_
- #define _rtsp_server_h_
-
- #include "rtsp-header-transport.h"
- #include <stdint.h>
- #include <stddef.h>
-
- #if defined(__cplusplus)
- extern "C" {
- #endif
-
- typedef struct rtsp_server_t rtsp_server_t;
-
- struct rtsp_handler_t
- {
- /// rtsp_server_destroy will call this function
- /// @param[in] ptr2 user-defined parameter
- int (*close)(void* ptr2);
-
- /// Network send
- /// @param[in] ptr2 user-defined parameter
- /// @param[in] data send data
- /// @param[in] bytes data length in byte
- /// @return 0-ok, other-error
- int (*send)(void* ptr2, const void* data, size_t bytes);
-
- /// RTSP DESCRIBE request(call rtsp_server_reply_describe)
- /// @param[in] ptr user-defined parameter
- /// @param[in] uri request uri
- /// @return 0-ok, other-error
- int (*ondescribe)(void* ptr, rtsp_server_t* rtsp, const char* uri);
-
- /// RTSP SETUP request(call rtsp_server_reply_setup)
- /// @param[in] ptr user-defined parameter
- /// @param[in] uri request uri
- /// @param[in] session RTSP Session
- /// @param[in] transport RTSP Transport header
- /// @return 0-ok, other-error
- int (*onsetup)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const struct rtsp_header_transport_t transports[], size_t num);
-
- /// RTSP PLAY request(call rtsp_server_reply_play)
- /// @param[in] ptr user-defined parameter
- /// @param[in] session RTSP Session
- /// @param[in] npt request begin time, NULL if don't have Range parameter, 0 represent now
- /// @param[in] scale request scale, NULL if don't have Scale parameter
- /// @return 0-ok, other-error code
- int (*onplay)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const int64_t *npt, const double *scale);
-
- /// RTSP PAUSE request(call rtsp_server_reply_pause)
- /// @param[in] ptr user-defined parameter
- /// @param[in] session RTSP Session
- /// @param[in] npt request pause time, NULL if don't have Range parameter
- /// @return 0-ok, other-error code
- int (*onpause)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const int64_t *npt);
-
- /// RTSP TEARDOWN request(call rtsp_server_reply_teardown)
- /// @param[in] ptr user-defined parameter
- /// @param[in] session RTSP Session
- /// @param[in] uri request uri
- /// @return 0-ok, other-error code
- int (*onteardown)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session);
-
- /// RTSP ANNOUNCE request(call rtsp_server_reply_announce)
- /// @param[in] ptr user-defined parameter
- /// @param[in] uri request uri
- /// @param[in] sdp RTSP SDP
- /// @return 0-ok, other-error
- int (*onannounce)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* sdp, int len);
-
- /// RTSP RECORD request(call rtsp_server_reply_record)
- /// @param[in] ptr user-defined parameter
- /// @param[in] session RTSP Session
- /// @param[in] npt request begin time, NULL if don't have Range parameter, 0 represent now
- /// @param[in] scale request scale, NULL if don't have Scale parameter
- /// @return 0-ok, other-error code
- int (*onrecord)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const int64_t *npt, const double *scale);
-
- /// RTSP OPTIONS request
- /// @param[in] uri default is '*'
- /// @return 0-ok, other-error code
- int (*onoptions)(void* ptr, rtsp_server_t* rtsp, const char* uri);
-
- /// RTSP GET_PARAMETER/SET_PARAMETER request
- /// use rtsp_server_get_header("content-type") to if need
- /// @param[in] uri the presentation/stream uri
- /// @param[in] session RTSP session
- /// @param[in] content paramter(s), NULL for test client or server liveness ("ping")
- /// @return 0-ok, other-error code
- int (*ongetparameter)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const void* content, int bytes);
- int (*onsetparameter)(void* ptr, rtsp_server_t* rtsp, const char* uri, const char* session, const void* content, int bytes);
- };
-
- /// create (reuse-able) rtsp server
- /// param[in] ip peer(client) ip(IPv4/IPv6)
- /// param[in] port peer(client) port
- /// param[in] handler callbacks
- /// param[in] ptr callback(except send) parameter
- /// param[in] ptr2 send callback parameter
- /// @return NULL-error, other-rtsp server instance
- rtsp_server_t* rtsp_server_create(const char ip[65], unsigned short port, struct rtsp_handler_t* handler, void* ptr, void* ptr2);
-
- /// destroy rtsp server
- /// @param[in] server rtsp server instance
- /// @return 0-ok, other-error code
- int rtsp_server_destroy(rtsp_server_t* server);
-
- /// client request
- /// @param[in] data rtsp request
- /// @param[in,out] bytes input data length, output remain length
- /// @return 0-ok, 1-need more data, other-error
- int rtsp_server_input(rtsp_server_t* rtsp, const void* data, size_t* bytes);
-
- /// RTSP DESCRIBE reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @param[in] sdp RTSP SDP
- /// @return 0-ok, other-error code
- int rtsp_server_reply_describe(rtsp_server_t* rtsp, int code, const char* sdp);
-
- /// RTSP SETUP reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @param[in] session RTSP Session parameter
- /// @param[in] transport RTSP Transport parameter
- /// @return 0-ok, other-error code
- int rtsp_server_reply_setup(rtsp_server_t* rtsp, int code, const char* session, const char* transport);
-
- /// RTSP PLAY reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @param[in] nptstart Range start time(ms) [optional]
- /// @param[in] nptend Range end time(ms) [optional]
- /// @param[in] rtpinfo RTP-info [optional] e.g. url=rtsp://foo.com/bar.avi/streamid=0;seq=45102,url=rtsp://foo.com/bar.avi/streamid=1;seq=30211
- /// @return 0-ok, other-error code
- int rtsp_server_reply_play(rtsp_server_t* rtsp, int code, const int64_t *nptstart, const int64_t *nptend, const char* rtpinfo);
-
- /// RTSP PAUSE reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @return 0-ok, other-error code
- int rtsp_server_reply_pause(rtsp_server_t* rtsp, int code);
-
- /// RTSP PAUSE reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @return 0-ok, other-error code
- int rtsp_server_reply_teardown(rtsp_server_t* rtsp, int code);
-
- /// RTSP ANNOUNCE reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @return 0-ok, other-error code
- int rtsp_server_reply_announce(rtsp_server_t* rtsp, int code);
-
- /// RTSP RECORD reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK, 301-Move Permanently, ...)
- /// @param[in] nptstart Range start time(ms) [optional]
- /// @param[in] nptend Range end time(ms) [optional]
- /// @return 0-ok, other-error code
- int rtsp_server_reply_record(rtsp_server_t* rtsp, int code, const int64_t *nptstart, const int64_t *nptend);
-
- /// RTSP OPTIONS reply
- /// @return 0-ok, other-error code
- int rtsp_server_reply_options(rtsp_server_t* rtsp, int code);
-
- /// RTSP GET_PARAMETER reply(content-type/content-encoding/content-language copy from request header)
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK...)
- /// @return 0-ok, other-error code
- int rtsp_server_reply_get_parameter(rtsp_server_t* rtsp, int code, const void* content, int bytes);
-
- /// RTSP SET_PARAMETER reply
- /// @param[in] rtsp request handle
- /// @param[in] code RTSP status-code(200-OK...)
- /// @return 0-ok, other-error code
- int rtsp_server_reply_set_parameter(rtsp_server_t* rtsp, int code);
-
- /// RTSP send Embedded (Interleaved) Binary Data
- /// @param[in] rtsp request handle
- /// @param[in] data interleaved binary data, start with 1-byte $ + 1-byte CHANNEL + 2-bytes LEN + RTP/RTCP HEADER + PAYLOAD
- /// @param[in] bytes data length in bytes
- /// @return 0-ok, other-error code
- int rtsp_server_send_interleaved_data(rtsp_server_t* rtsp, const void* data, size_t bytes);
-
- /// find RTSP header
- /// @param[in] rtsp request handle
- /// @param[in] name header name
- /// @return header value, NULL if not found.
- /// NOTICE: call in rtsp_handler_t callback only
- const char* rtsp_server_get_header(rtsp_server_t* rtsp, const char* name);
-
- /// get client ip/port
- const char* rtsp_server_get_client(rtsp_server_t* rtsp, unsigned short* port);
- /// @timeout set session timeout in seconds, valid only in setup response(set before rtsp_server_reply_setup)
- void rtsp_server_set_session_timeout(rtsp_server_t* rtsp, int timeout);
-
- #if defined(__cplusplus)
- }
- #endif
- #endif /* !_rtsp_server_h_ */
|