diff --git a/trunk/src/libs/srs_lib_simple_socket.cpp b/trunk/src/libs/srs_lib_simple_socket.cpp index 75c7cf39c..6a5b8cb72 100644 --- a/trunk/src/libs/srs_lib_simple_socket.cpp +++ b/trunk/src/libs/srs_lib_simple_socket.cpp @@ -290,6 +290,11 @@ SimpleSocketStream::~SimpleSocketStream() } } +srs_hijack_io_t SimpleSocketStream::hijack_io() +{ + return io; +} + int SimpleSocketStream::create_socket() { srs_assert(io); diff --git a/trunk/src/libs/srs_lib_simple_socket.hpp b/trunk/src/libs/srs_lib_simple_socket.hpp index a2f175788..2a76be19d 100644 --- a/trunk/src/libs/srs_lib_simple_socket.hpp +++ b/trunk/src/libs/srs_lib_simple_socket.hpp @@ -50,6 +50,7 @@ public: SimpleSocketStream(); virtual ~SimpleSocketStream(); public: + virtual srs_hijack_io_t hijack_io(); virtual int create_socket(); virtual int connect(const char* server, int port); // ISrsBufferReader diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index 015f91bd1..17fdb269c 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -534,7 +534,10 @@ srs_rtmp_t srs_rtmp_create2(const char* url) void srs_rtmp_destroy(srs_rtmp_t rtmp) { - srs_assert(rtmp != NULL); + if (!rtmp) { + return; + } + Context* context = (Context*)rtmp; srs_freep(context); @@ -2424,6 +2427,23 @@ const char* srs_human_format_time() return buf; } + +#ifdef SRS_HIJACK_IO +srs_hijack_io_t srs_hijack_io_get(srs_rtmp_t rtmp) +{ + if (!rtmp) { + return NULL; + } + + Context* context = (Context*)rtmp; + if (!context->skt) { + return NULL; + } + + return context->skt->hijack_io(); +} +#endif + #ifdef __cplusplus } #endif diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index 7e4d3806d..ca9c01872 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -107,7 +107,7 @@ extern srs_rtmp_t srs_rtmp_create(const char* url); extern srs_rtmp_t srs_rtmp_create2(const char* url); /** * close and destroy the rtmp stack. -* @remark, user should use the rtmp again. +* @remark, user should never use the rtmp again. */ extern void srs_rtmp_destroy(srs_rtmp_t rtmp); @@ -895,14 +895,21 @@ extern const char* srs_human_format_time(); *************************************************************/ // the void* will convert to your handler for io hijack. typedef void* srs_hijack_io_t; -// define the following macro and functions in your module to hijack the io. -// the example @see https://github.com/winlinvip/st-load -// which use librtmp but use its own io(use st also). #ifdef SRS_HIJACK_IO #ifndef _WIN32 // for iovec. #include #endif + /** + * get the hijack io object in rtmp protocol sdk. + * @remark, user should never provides this method, srs-librtmp provides it. + */ + extern srs_hijack_io_t srs_hijack_io_get(srs_rtmp_t rtmp); +#endif +// define the following macro and functions in your module to hijack the io. +// the example @see https://github.com/winlinvip/st-load +// which use librtmp but use its own io(use st also). +#ifdef SRS_HIJACK_IO /** * create hijack. * @return NULL for error; otherwise, ok.