diff --git a/trunk/configure b/trunk/configure index caf05e429..99ddef49d 100755 --- a/trunk/configure +++ b/trunk/configure @@ -42,19 +42,21 @@ echo "" >> $SRS_AUTO_HEADERS_H echo "generate Makefile" SRS_MAKEFILE="Makefile" cat << END > ${SRS_MAKEFILE} -.PHONY: default help clean server bandwidth librtmp _prepare_dir -default: server bandwidth librtmp +.PHONY: default help clean server bandwidth librtmp librtmp-sample _prepare_dir +default: server bandwidth librtmp librtmp-sample help: - @echo "Usage: make ||||" - @echo " help display this help menu" - @echo " clean cleanup project" - @echo " server build the srs(simple rtmp server) over st(state-threads)" - @echo " bandwidth build the bandwidth test client tool." - @echo " librtmp build the client publish/play library." + @echo "Usage: make |||||" + @echo " help display this help menu" + @echo " clean cleanup project" + @echo " server build the srs(simple rtmp server) over st(state-threads)" + @echo " bandwidth build the bandwidth test client tool." + @echo " librtmp build the client publish/play library." + @echo " librtmp-sample build the srs-librtmp sample" clean: (rm -f Makefile; cd ${SRS_OBJS}; rm -rf srs bandwidth Makefile *.hpp src st_*_load research include lib) + (cd research/librtmp; make clean) server: _prepare_dir @echo "build the srs(simple rtmp server) over st(state-threads)" @@ -68,6 +70,11 @@ librtmp: _prepare_dir @echo "build the client publish/play library." \$(MAKE) -f ${SRS_OBJS}/${SRS_MAKEFILE} librtmp +librtmp-sample: + @echo "build the srs-librtmp sample" + (cd research/librtmp; make) + @echo "srs-librtmp sample build success" + # the ./configure will generate it. _prepare_dir: @mkdir -p ${SRS_OBJS} @@ -140,8 +147,7 @@ CORE_OBJS="${MODULE_OBJS[@]}" MODULE_ID="KERNEL" MODULE_DEPENDS=("CORE") ModuleLibIncs=(${SRS_OBJS}) -MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_stream" - "srs_kernel_buffer") +MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer") MODULE_DIR="src/kernel" . auto/modules.sh KERNEL_OBJS="${MODULE_OBJS[@]}" # @@ -161,7 +167,7 @@ ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS}) MODULE_FILES=("srs_core_server" "srs_core_conn" "srs_core_client" "srs_core_socket" "srs_core_source" "srs_core_codec" "srs_core_refer" "srs_core_hls" "srs_core_forward" "srs_core_encoder" "srs_core_http" "srs_core_thread" "srs_core_bandwidth" "srs_core_st" "srs_core_log" - "srs_core_config" "srs_core_pithy_print") + "srs_core_config" "srs_core_pithy_print" "srs_core_reload") MODULE_DIR="src/app" . auto/modules.sh APP_OBJS="${MODULE_OBJS[@]}" # diff --git a/trunk/research/librtmp/srs_play.c b/trunk/research/librtmp/srs_play.c index b67e54ab1..1e57f01d3 100644 --- a/trunk/research/librtmp/srs_play.c +++ b/trunk/research/librtmp/srs_play.c @@ -29,9 +29,33 @@ gcc srs_play.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_play int main(int argc, char** argv) { + srs_rtmp_t rtmp; + printf("suck rtmp stream like rtmpdump\n"); printf("srs(simple-rtmp-server) client librtmp library.\n"); printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision()); + rtmp = srs_rtmp_create("rtmp://127.0.0.1/live/livestream"); + + if (srs_simple_handshake(rtmp) != 0) { + printf("simple handshake failed.\n"); + return -1; + } + printf("simple handshake success\n"); + + if (srs_connect_app(rtmp) != 0) { + printf("connect vhost/app failed.\n"); + return -1; + } + printf("connect vhost/app success\n"); + + if (srs_play_stream(rtmp) != 0) { + printf("play stream failed.\n"); + return -1; + } + printf("play stream success\n"); + + srs_rtmp_destroy(rtmp); + return 0; } diff --git a/trunk/research/librtmp/srs_publish.c b/trunk/research/librtmp/srs_publish.c index e458e6a40..d805f6cf3 100644 --- a/trunk/research/librtmp/srs_publish.c +++ b/trunk/research/librtmp/srs_publish.c @@ -29,9 +29,33 @@ gcc srs_publish.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_publish int main(int argc, char** argv) { + srs_rtmp_t rtmp; + printf("publish rtmp stream to server like FMLE/FFMPEG/Encoder\n"); printf("srs(simple-rtmp-server) client librtmp library.\n"); printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision()); + rtmp = srs_rtmp_create("rtmp://127.0.0.1/live/livestream"); + + if (srs_simple_handshake(rtmp) != 0) { + printf("simple handshake failed.\n"); + return -1; + } + printf("simple handshake success\n"); + + if (srs_connect_app(rtmp) != 0) { + printf("connect vhost/app failed.\n"); + return -1; + } + printf("connect vhost/app success\n"); + + if (srs_publish_stream(rtmp) != 0) { + printf("publish stream failed.\n"); + return -1; + } + printf("publish stream success\n"); + + srs_rtmp_destroy(rtmp); + return 0; } diff --git a/trunk/src/app/srs_core_client.hpp b/trunk/src/app/srs_core_client.hpp index d72f59f2a..4d65ceb6a 100644 --- a/trunk/src/app/srs_core_client.hpp +++ b/trunk/src/app/srs_core_client.hpp @@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include +#include class SrsRtmp; class SrsRequest; diff --git a/trunk/src/app/srs_core_config.hpp b/trunk/src/app/srs_core_config.hpp index 39a28f2e0..5629354cc 100644 --- a/trunk/src/app/srs_core_config.hpp +++ b/trunk/src/app/srs_core_config.hpp @@ -32,7 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include +#include // default vhost for rtmp #define RTMP_VHOST_DEFAULT "__defaultVhost__" diff --git a/trunk/src/app/srs_core_pithy_print.cpp b/trunk/src/app/srs_core_pithy_print.cpp index ea2a76404..0081782d2 100644 --- a/trunk/src/app/srs_core_pithy_print.cpp +++ b/trunk/src/app/srs_core_pithy_print.cpp @@ -28,7 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include +#include #include #define SRS_STAGE_DEFAULT_INTERVAL_MS 1200 diff --git a/trunk/src/kernel/srs_kernel_reload.cpp b/trunk/src/app/srs_core_reload.cpp similarity index 98% rename from trunk/src/kernel/srs_kernel_reload.cpp rename to trunk/src/app/srs_core_reload.cpp index 7698ac7b3..e2da1f2bb 100644 --- a/trunk/src/kernel/srs_kernel_reload.cpp +++ b/trunk/src/app/srs_core_reload.cpp @@ -21,7 +21,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include +#include using namespace std; diff --git a/trunk/src/kernel/srs_kernel_reload.hpp b/trunk/src/app/srs_core_reload.hpp similarity index 97% rename from trunk/src/kernel/srs_kernel_reload.hpp rename to trunk/src/app/srs_core_reload.hpp index 5c13a7b67..62bedb76c 100644 --- a/trunk/src/kernel/srs_kernel_reload.hpp +++ b/trunk/src/app/srs_core_reload.hpp @@ -25,7 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define SRS_KERNEL_RELOAD_HPP /* -#include +#include */ #include diff --git a/trunk/src/app/srs_core_server.hpp b/trunk/src/app/srs_core_server.hpp index 2eb38fada..41f4bc664 100644 --- a/trunk/src/app/srs_core_server.hpp +++ b/trunk/src/app/srs_core_server.hpp @@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include +#include #include class SrsServer; diff --git a/trunk/src/app/srs_core_source.hpp b/trunk/src/app/srs_core_source.hpp index 4eec947cf..e280af9ee 100644 --- a/trunk/src/app/srs_core_source.hpp +++ b/trunk/src/app/srs_core_source.hpp @@ -35,7 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include +#include class SrsSource; class SrsCommonMessage; diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index 156b799f2..4231ec79d 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -25,6 +25,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include +#include +using namespace std; + +#include #include /** @@ -49,6 +53,7 @@ public: */ struct Context { + std::string url; SrsRtmpClient* rtmp; SimpleSocketStream* stream; int stream_id; @@ -68,8 +73,9 @@ struct Context extern "C"{ #endif -srs_rtmp_t srs_rtmp_create(){ +srs_rtmp_t srs_rtmp_create(const char* url){ Context* context = new Context(); + context->url = url; return context; } @@ -79,6 +85,31 @@ void srs_rtmp_destroy(srs_rtmp_t rtmp){ srs_freep(context); } +int srs_simple_handshake(srs_rtmp_t rtmp) +{ + return ERROR_SUCCESS; +} + +int srs_complex_handshake(srs_rtmp_t rtmp) +{ + return ERROR_SUCCESS; +} + +int srs_connect_app(srs_rtmp_t rtmp) +{ + return ERROR_SUCCESS; +} + +int srs_play_stream(srs_rtmp_t rtmp) +{ + return ERROR_SUCCESS; +} + +int srs_publish_stream(srs_rtmp_t rtmp) +{ + return ERROR_SUCCESS; +} + int srs_version_major() { return ::atoi(VERSION_MAJOR); diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index 0e429289d..5a03d4de0 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -36,15 +36,58 @@ extern "C"{ typedef void* srs_rtmp_t; /** -* create a rtmp protocol stack. +* create/destroy a rtmp protocol stack. +* @url rtmp url, for example: +* rtmp://127.0.0.1/live/livestream * @return a rtmp handler, or NULL if error occured. */ -srs_rtmp_t srs_rtmp_create(); +srs_rtmp_t srs_rtmp_create(const char* url); +void srs_rtmp_destroy(srs_rtmp_t rtmp); /** -* close a rtmp protocl stack. +* handshake with server +* category: publish/play +* previous: rtmp-create +* next: connect-app +* @return 0, success; otherwise, failed. */ -void srs_rtmp_destroy(srs_rtmp_t rtmp); +/** +* simple handshake specifies in rtmp 1.0, +* not depends on ssl. +*/ +int srs_simple_handshake(srs_rtmp_t rtmp); +/** +* complex handshake is specified by adobe Flash player, +* depends on ssl, user must link libssl.a and libcrypt.a +*/ +int srs_complex_handshake(srs_rtmp_t rtmp); + +/** +* connect to rtmp vhost/app +* category: publish/play +* previous: handshake +* next: publish or play +* @return 0, success; otherwise, failed. +*/ +int srs_connect_app(srs_rtmp_t rtmp); + +/** +* play a live/vod stream. +* category: play +* previous: connect-app +* next: destroy +* @return 0, success; otherwise, failed. +*/ +int srs_play_stream(srs_rtmp_t rtmp); + +/** +* publish a live stream. +* category: publish +* previous: connect-app +* next: destroy +* @return 0, success; otherwise, failed. +*/ +int srs_publish_stream(srs_rtmp_t rtmp); /** * get protocol stack version diff --git a/trunk/src/srs/srs.upp b/trunk/src/srs/srs.upp index 984cbb46d..0ef3fced5 100644 --- a/trunk/src/srs/srs.upp +++ b/trunk/src/srs/srs.upp @@ -19,8 +19,6 @@ file ..\kernel\srs_kernel_error.cpp, ..\kernel\srs_kernel_log.hpp, ..\kernel\srs_kernel_log.cpp, - ..\kernel\srs_kernel_reload.hpp, - ..\kernel\srs_kernel_reload.cpp, ..\kernel\srs_kernel_stream.hpp, ..\kernel\srs_kernel_stream.cpp, rtmp-protocol readonly separator, @@ -59,6 +57,8 @@ file ..\app\srs_core_log.cpp, ..\app\srs_core_refer.hpp, ..\app\srs_core_refer.cpp, + ..\app\srs_core_reload.hpp, + ..\app\srs_core_reload.cpp, ..\app\srs_core_pithy_print.hpp, ..\app\srs_core_pithy_print.cpp, ..\app\srs_core_thread.hpp,