winlin

srs-librtmp define interfaces

@@ -42,19 +42,21 @@ echo "" >> $SRS_AUTO_HEADERS_H @@ -42,19 +42,21 @@ echo "" >> $SRS_AUTO_HEADERS_H
42 echo "generate Makefile" 42 echo "generate Makefile"
43 SRS_MAKEFILE="Makefile" 43 SRS_MAKEFILE="Makefile"
44 cat << END > ${SRS_MAKEFILE} 44 cat << END > ${SRS_MAKEFILE}
45 -.PHONY: default help clean server bandwidth librtmp _prepare_dir  
46 -default: server bandwidth librtmp 45 +.PHONY: default help clean server bandwidth librtmp librtmp-sample _prepare_dir
  46 +default: server bandwidth librtmp librtmp-sample
47 47
48 help: 48 help:
49 - @echo "Usage: make <help>|<clean>|<server>|<bandwidth>|<librtmp>"  
50 - @echo " help display this help menu"  
51 - @echo " clean cleanup project"  
52 - @echo " server build the srs(simple rtmp server) over st(state-threads)"  
53 - @echo " bandwidth build the bandwidth test client tool."  
54 - @echo " librtmp build the client publish/play library." 49 + @echo "Usage: make <help>|<clean>|<server>|<bandwidth>|<librtmp>|<librtmp-sample>"
  50 + @echo " help display this help menu"
  51 + @echo " clean cleanup project"
  52 + @echo " server build the srs(simple rtmp server) over st(state-threads)"
  53 + @echo " bandwidth build the bandwidth test client tool."
  54 + @echo " librtmp build the client publish/play library."
  55 + @echo " librtmp-sample build the srs-librtmp sample"
55 56
56 clean: 57 clean:
57 (rm -f Makefile; cd ${SRS_OBJS}; rm -rf srs bandwidth Makefile *.hpp src st_*_load research include lib) 58 (rm -f Makefile; cd ${SRS_OBJS}; rm -rf srs bandwidth Makefile *.hpp src st_*_load research include lib)
  59 + (cd research/librtmp; make clean)
58 60
59 server: _prepare_dir 61 server: _prepare_dir
60 @echo "build the srs(simple rtmp server) over st(state-threads)" 62 @echo "build the srs(simple rtmp server) over st(state-threads)"
@@ -68,6 +70,11 @@ librtmp: _prepare_dir @@ -68,6 +70,11 @@ librtmp: _prepare_dir
68 @echo "build the client publish/play library." 70 @echo "build the client publish/play library."
69 \$(MAKE) -f ${SRS_OBJS}/${SRS_MAKEFILE} librtmp 71 \$(MAKE) -f ${SRS_OBJS}/${SRS_MAKEFILE} librtmp
70 72
  73 +librtmp-sample:
  74 + @echo "build the srs-librtmp sample"
  75 + (cd research/librtmp; make)
  76 + @echo "srs-librtmp sample build success"
  77 +
71 # the ./configure will generate it. 78 # the ./configure will generate it.
72 _prepare_dir: 79 _prepare_dir:
73 @mkdir -p ${SRS_OBJS} 80 @mkdir -p ${SRS_OBJS}
@@ -140,8 +147,7 @@ CORE_OBJS="${MODULE_OBJS[@]}" @@ -140,8 +147,7 @@ CORE_OBJS="${MODULE_OBJS[@]}"
140 MODULE_ID="KERNEL" 147 MODULE_ID="KERNEL"
141 MODULE_DEPENDS=("CORE") 148 MODULE_DEPENDS=("CORE")
142 ModuleLibIncs=(${SRS_OBJS}) 149 ModuleLibIncs=(${SRS_OBJS})
143 -MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_stream"  
144 - "srs_kernel_buffer") 150 +MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer")
145 MODULE_DIR="src/kernel" . auto/modules.sh 151 MODULE_DIR="src/kernel" . auto/modules.sh
146 KERNEL_OBJS="${MODULE_OBJS[@]}" 152 KERNEL_OBJS="${MODULE_OBJS[@]}"
147 # 153 #
@@ -161,7 +167,7 @@ ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS}) @@ -161,7 +167,7 @@ ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS})
161 MODULE_FILES=("srs_core_server" "srs_core_conn" "srs_core_client" "srs_core_socket" "srs_core_source" 167 MODULE_FILES=("srs_core_server" "srs_core_conn" "srs_core_client" "srs_core_socket" "srs_core_source"
162 "srs_core_codec" "srs_core_refer" "srs_core_hls" "srs_core_forward" "srs_core_encoder" 168 "srs_core_codec" "srs_core_refer" "srs_core_hls" "srs_core_forward" "srs_core_encoder"
163 "srs_core_http" "srs_core_thread" "srs_core_bandwidth" "srs_core_st" "srs_core_log" 169 "srs_core_http" "srs_core_thread" "srs_core_bandwidth" "srs_core_st" "srs_core_log"
164 - "srs_core_config" "srs_core_pithy_print") 170 + "srs_core_config" "srs_core_pithy_print" "srs_core_reload")
165 MODULE_DIR="src/app" . auto/modules.sh 171 MODULE_DIR="src/app" . auto/modules.sh
166 APP_OBJS="${MODULE_OBJS[@]}" 172 APP_OBJS="${MODULE_OBJS[@]}"
167 # 173 #
@@ -29,9 +29,33 @@ gcc srs_play.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_play @@ -29,9 +29,33 @@ gcc srs_play.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_play
29 29
30 int main(int argc, char** argv) 30 int main(int argc, char** argv)
31 { 31 {
  32 + srs_rtmp_t rtmp;
  33 +
32 printf("suck rtmp stream like rtmpdump\n"); 34 printf("suck rtmp stream like rtmpdump\n");
33 printf("srs(simple-rtmp-server) client librtmp library.\n"); 35 printf("srs(simple-rtmp-server) client librtmp library.\n");
34 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision()); 36 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
35 37
  38 + rtmp = srs_rtmp_create("rtmp://127.0.0.1/live/livestream");
  39 +
  40 + if (srs_simple_handshake(rtmp) != 0) {
  41 + printf("simple handshake failed.\n");
  42 + return -1;
  43 + }
  44 + printf("simple handshake success\n");
  45 +
  46 + if (srs_connect_app(rtmp) != 0) {
  47 + printf("connect vhost/app failed.\n");
  48 + return -1;
  49 + }
  50 + printf("connect vhost/app success\n");
  51 +
  52 + if (srs_play_stream(rtmp) != 0) {
  53 + printf("play stream failed.\n");
  54 + return -1;
  55 + }
  56 + printf("play stream success\n");
  57 +
  58 + srs_rtmp_destroy(rtmp);
  59 +
36 return 0; 60 return 0;
37 } 61 }
@@ -29,9 +29,33 @@ gcc srs_publish.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_publish @@ -29,9 +29,33 @@ gcc srs_publish.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_publish
29 29
30 int main(int argc, char** argv) 30 int main(int argc, char** argv)
31 { 31 {
  32 + srs_rtmp_t rtmp;
  33 +
32 printf("publish rtmp stream to server like FMLE/FFMPEG/Encoder\n"); 34 printf("publish rtmp stream to server like FMLE/FFMPEG/Encoder\n");
33 printf("srs(simple-rtmp-server) client librtmp library.\n"); 35 printf("srs(simple-rtmp-server) client librtmp library.\n");
34 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision()); 36 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
35 37
  38 + rtmp = srs_rtmp_create("rtmp://127.0.0.1/live/livestream");
  39 +
  40 + if (srs_simple_handshake(rtmp) != 0) {
  41 + printf("simple handshake failed.\n");
  42 + return -1;
  43 + }
  44 + printf("simple handshake success\n");
  45 +
  46 + if (srs_connect_app(rtmp) != 0) {
  47 + printf("connect vhost/app failed.\n");
  48 + return -1;
  49 + }
  50 + printf("connect vhost/app success\n");
  51 +
  52 + if (srs_publish_stream(rtmp) != 0) {
  53 + printf("publish stream failed.\n");
  54 + return -1;
  55 + }
  56 + printf("publish stream success\n");
  57 +
  58 + srs_rtmp_destroy(rtmp);
  59 +
36 return 0; 60 return 0;
37 } 61 }
@@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 32
33 #include <srs_core_st.hpp> 33 #include <srs_core_st.hpp>
34 #include <srs_core_conn.hpp> 34 #include <srs_core_conn.hpp>
35 -#include <srs_kernel_reload.hpp> 35 +#include <srs_core_reload.hpp>
36 36
37 class SrsRtmp; 37 class SrsRtmp;
38 class SrsRequest; 38 class SrsRequest;
@@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 #include <vector> 32 #include <vector>
33 #include <string> 33 #include <string>
34 34
35 -#include <srs_kernel_reload.hpp> 35 +#include <srs_core_reload.hpp>
36 36
37 // default vhost for rtmp 37 // default vhost for rtmp
38 #define RTMP_VHOST_DEFAULT "__defaultVhost__" 38 #define RTMP_VHOST_DEFAULT "__defaultVhost__"
@@ -28,7 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -28,7 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 28
29 #include <srs_kernel_log.hpp> 29 #include <srs_kernel_log.hpp>
30 #include <srs_core_config.hpp> 30 #include <srs_core_config.hpp>
31 -#include <srs_kernel_reload.hpp> 31 +#include <srs_core_reload.hpp>
32 #include <srs_kernel_error.hpp> 32 #include <srs_kernel_error.hpp>
33 33
34 #define SRS_STAGE_DEFAULT_INTERVAL_MS 1200 34 #define SRS_STAGE_DEFAULT_INTERVAL_MS 1200
@@ -21,7 +21,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -21,7 +21,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */ 22 */
23 23
24 -#include <srs_kernel_reload.hpp> 24 +#include <srs_core_reload.hpp>
25 25
26 using namespace std; 26 using namespace std;
27 27
@@ -25,7 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -25,7 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #define SRS_KERNEL_RELOAD_HPP 25 #define SRS_KERNEL_RELOAD_HPP
26 26
27 /* 27 /*
28 -#include <srs_kernel_reload.hpp> 28 +#include <srs_core_reload.hpp>
29 */ 29 */
30 #include <srs_core.hpp> 30 #include <srs_core.hpp>
31 31
@@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 #include <vector> 33 #include <vector>
34 34
35 #include <srs_core_st.hpp> 35 #include <srs_core_st.hpp>
36 -#include <srs_kernel_reload.hpp> 36 +#include <srs_core_reload.hpp>
37 #include <srs_core_thread.hpp> 37 #include <srs_core_thread.hpp>
38 38
39 class SrsServer; 39 class SrsServer;
@@ -35,7 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -35,7 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 #include <string> 35 #include <string>
36 36
37 #include <srs_core_st.hpp> 37 #include <srs_core_st.hpp>
38 -#include <srs_kernel_reload.hpp> 38 +#include <srs_core_reload.hpp>
39 39
40 class SrsSource; 40 class SrsSource;
41 class SrsCommonMessage; 41 class SrsCommonMessage;
@@ -25,6 +25,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -25,6 +25,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 25
26 #include <stdlib.h> 26 #include <stdlib.h>
27 27
  28 +#include <string>
  29 +using namespace std;
  30 +
  31 +#include <srs_kernel_error.hpp>
28 #include <srs_protocol_rtmp.hpp> 32 #include <srs_protocol_rtmp.hpp>
29 33
30 /** 34 /**
@@ -49,6 +53,7 @@ public: @@ -49,6 +53,7 @@ public:
49 */ 53 */
50 struct Context 54 struct Context
51 { 55 {
  56 + std::string url;
52 SrsRtmpClient* rtmp; 57 SrsRtmpClient* rtmp;
53 SimpleSocketStream* stream; 58 SimpleSocketStream* stream;
54 int stream_id; 59 int stream_id;
@@ -68,8 +73,9 @@ struct Context @@ -68,8 +73,9 @@ struct Context
68 extern "C"{ 73 extern "C"{
69 #endif 74 #endif
70 75
71 -srs_rtmp_t srs_rtmp_create(){ 76 +srs_rtmp_t srs_rtmp_create(const char* url){
72 Context* context = new Context(); 77 Context* context = new Context();
  78 + context->url = url;
73 return context; 79 return context;
74 } 80 }
75 81
@@ -79,6 +85,31 @@ void srs_rtmp_destroy(srs_rtmp_t rtmp){ @@ -79,6 +85,31 @@ void srs_rtmp_destroy(srs_rtmp_t rtmp){
79 srs_freep(context); 85 srs_freep(context);
80 } 86 }
81 87
  88 +int srs_simple_handshake(srs_rtmp_t rtmp)
  89 +{
  90 + return ERROR_SUCCESS;
  91 +}
  92 +
  93 +int srs_complex_handshake(srs_rtmp_t rtmp)
  94 +{
  95 + return ERROR_SUCCESS;
  96 +}
  97 +
  98 +int srs_connect_app(srs_rtmp_t rtmp)
  99 +{
  100 + return ERROR_SUCCESS;
  101 +}
  102 +
  103 +int srs_play_stream(srs_rtmp_t rtmp)
  104 +{
  105 + return ERROR_SUCCESS;
  106 +}
  107 +
  108 +int srs_publish_stream(srs_rtmp_t rtmp)
  109 +{
  110 + return ERROR_SUCCESS;
  111 +}
  112 +
82 int srs_version_major() 113 int srs_version_major()
83 { 114 {
84 return ::atoi(VERSION_MAJOR); 115 return ::atoi(VERSION_MAJOR);
@@ -36,15 +36,58 @@ extern "C"{ @@ -36,15 +36,58 @@ extern "C"{
36 typedef void* srs_rtmp_t; 36 typedef void* srs_rtmp_t;
37 37
38 /** 38 /**
39 -* create a rtmp protocol stack. 39 +* create/destroy a rtmp protocol stack.
  40 +* @url rtmp url, for example:
  41 +* rtmp://127.0.0.1/live/livestream
40 * @return a rtmp handler, or NULL if error occured. 42 * @return a rtmp handler, or NULL if error occured.
41 */ 43 */
42 -srs_rtmp_t srs_rtmp_create(); 44 +srs_rtmp_t srs_rtmp_create(const char* url);
  45 +void srs_rtmp_destroy(srs_rtmp_t rtmp);
43 46
44 /** 47 /**
45 -* close a rtmp protocl stack. 48 +* handshake with server
  49 +* category: publish/play
  50 +* previous: rtmp-create
  51 +* next: connect-app
  52 +* @return 0, success; otherwise, failed.
46 */ 53 */
47 -void srs_rtmp_destroy(srs_rtmp_t rtmp); 54 +/**
  55 +* simple handshake specifies in rtmp 1.0,
  56 +* not depends on ssl.
  57 +*/
  58 +int srs_simple_handshake(srs_rtmp_t rtmp);
  59 +/**
  60 +* complex handshake is specified by adobe Flash player,
  61 +* depends on ssl, user must link libssl.a and libcrypt.a
  62 +*/
  63 +int srs_complex_handshake(srs_rtmp_t rtmp);
  64 +
  65 +/**
  66 +* connect to rtmp vhost/app
  67 +* category: publish/play
  68 +* previous: handshake
  69 +* next: publish or play
  70 +* @return 0, success; otherwise, failed.
  71 +*/
  72 +int srs_connect_app(srs_rtmp_t rtmp);
  73 +
  74 +/**
  75 +* play a live/vod stream.
  76 +* category: play
  77 +* previous: connect-app
  78 +* next: destroy
  79 +* @return 0, success; otherwise, failed.
  80 +*/
  81 +int srs_play_stream(srs_rtmp_t rtmp);
  82 +
  83 +/**
  84 +* publish a live stream.
  85 +* category: publish
  86 +* previous: connect-app
  87 +* next: destroy
  88 +* @return 0, success; otherwise, failed.
  89 +*/
  90 +int srs_publish_stream(srs_rtmp_t rtmp);
48 91
49 /** 92 /**
50 * get protocol stack version 93 * get protocol stack version
@@ -19,8 +19,6 @@ file @@ -19,8 +19,6 @@ file
19 ..\kernel\srs_kernel_error.cpp, 19 ..\kernel\srs_kernel_error.cpp,
20 ..\kernel\srs_kernel_log.hpp, 20 ..\kernel\srs_kernel_log.hpp,
21 ..\kernel\srs_kernel_log.cpp, 21 ..\kernel\srs_kernel_log.cpp,
22 - ..\kernel\srs_kernel_reload.hpp,  
23 - ..\kernel\srs_kernel_reload.cpp,  
24 ..\kernel\srs_kernel_stream.hpp, 22 ..\kernel\srs_kernel_stream.hpp,
25 ..\kernel\srs_kernel_stream.cpp, 23 ..\kernel\srs_kernel_stream.cpp,
26 rtmp-protocol readonly separator, 24 rtmp-protocol readonly separator,
@@ -59,6 +57,8 @@ file @@ -59,6 +57,8 @@ file
59 ..\app\srs_core_log.cpp, 57 ..\app\srs_core_log.cpp,
60 ..\app\srs_core_refer.hpp, 58 ..\app\srs_core_refer.hpp,
61 ..\app\srs_core_refer.cpp, 59 ..\app\srs_core_refer.cpp,
  60 + ..\app\srs_core_reload.hpp,
  61 + ..\app\srs_core_reload.cpp,
62 ..\app\srs_core_pithy_print.hpp, 62 ..\app\srs_core_pithy_print.hpp,
63 ..\app\srs_core_pithy_print.cpp, 63 ..\app\srs_core_pithy_print.cpp,
64 ..\app\srs_core_thread.hpp, 64 ..\app\srs_core_thread.hpp,