Merge branch 'srs.master'

pull/133/head
winlin 10 years ago
commit 0e089e52ca

@ -228,7 +228,7 @@ Supported operating systems and hardware:
* 2013-10-17, Created.<br/> * 2013-10-17, Created.<br/>
## History ## History
* v2.0, 2014-11-08, fix [#191](https://github.com/winlinvip/simple-rtmp-server/issues/191), configure --export-librtmp. 2.0.10. * v2.0, 2014-11-08, fix [#191](https://github.com/winlinvip/simple-rtmp-server/issues/191), configure --export-librtmp-project and --export-librtmp-single. 2.0.11.
* v2.0, 2014-11-08, fix [#66](https://github.com/winlinvip/simple-rtmp-server/issues/66), srs-librtmp support write h264 raw packet. 2.0.9. * v2.0, 2014-11-08, fix [#66](https://github.com/winlinvip/simple-rtmp-server/issues/66), srs-librtmp support write h264 raw packet. 2.0.9.
* v2.0, 2014-10-25, fix [#185](https://github.com/winlinvip/simple-rtmp-server/issues/185), AMF0 support 0x0B the date type codec. 2.0.7. * v2.0, 2014-10-25, fix [#185](https://github.com/winlinvip/simple-rtmp-server/issues/185), AMF0 support 0x0B the date type codec. 2.0.7.
* v2.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 2.0.6. * v2.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 2.0.6.

@ -126,7 +126,7 @@ function Ubuntu_prepare()
return 0 return 0
} }
# donot prepare tools, for srs-librtmp depends only gcc and g++. # donot prepare tools, for srs-librtmp depends only gcc and g++.
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
Ubuntu_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "Ubuntu prepare failed, ret=$ret"; exit $ret; fi Ubuntu_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "Ubuntu prepare failed, ret=$ret"; exit $ret; fi
fi fi
##################################################################################### #####################################################################################
@ -217,14 +217,14 @@ function Centos_prepare()
return 0 return 0
} }
# donot prepare tools, for srs-librtmp depends only gcc and g++. # donot prepare tools, for srs-librtmp depends only gcc and g++.
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi
fi fi
##################################################################################### #####################################################################################
# st-1.9 # st-1.9
##################################################################################### #####################################################################################
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
# check the arm flag file, if flag changed, need to rebuild the st. # check the arm flag file, if flag changed, need to rebuild the st.
_ST_MAKE=linux-debug _ST_MAKE=linux-debug
if [ $SRS_EMBEDED_CPU = YES ]; then if [ $SRS_EMBEDED_CPU = YES ]; then
@ -343,7 +343,7 @@ function write_nginx_html5()
END END
} }
# create the nginx dir, for http-server if not build nginx # create the nginx dir, for http-server if not build nginx
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
mkdir -p ${SRS_OBJS}/nginx mkdir -p ${SRS_OBJS}/nginx
fi fi
# make nginx # make nginx
@ -372,7 +372,7 @@ if [ $__SRS_BUILD_NGINX = YES ]; then
fi fi
# the demo dir. # the demo dir.
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
# create forward dir # create forward dir
mkdir -p ${SRS_OBJS}/nginx/html/live && mkdir -p ${SRS_OBJS}/nginx/html/live &&
mkdir -p ${SRS_OBJS}/nginx/html/forward/live mkdir -p ${SRS_OBJS}/nginx/html/forward/live
@ -595,7 +595,7 @@ fi
##################################################################################### #####################################################################################
# build research code, librtmp # build research code, librtmp
##################################################################################### #####################################################################################
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
if [ $SRS_RESEARCH = YES ]; then if [ $SRS_RESEARCH = YES ]; then
mkdir -p ${SRS_OBJS}/research mkdir -p ${SRS_OBJS}/research

@ -0,0 +1,30 @@
#!/bin/bash
# when export srs-librtmp project
# set the SRS_WORKDIR and SRS_OBJS,
# then copy the srs-librtmp needed files.
#
# params:
# $SRS_WORKDIR the work dir. ie. .
# $SRS_OBJS the objs directory to store the Makefile. ie. ./objs
# $SRS_OBJS_DIR the objs directory for Makefile. ie. objs
# $SRS_EXPORT_LIBRTMP_PROJECT the export srs-librtmp project path. ie. srs-librtmp
#
if [ $SRS_EXPORT_LIBRTMP_PROJECT != NO ]; then
if [[ -d ${SRS_EXPORT_LIBRTMP_PROJECT} ]]; then
echo -e "${RED}srs-librtmp target dir exists: ${SRS_EXPORT_LIBRTMP_PROJECT}. ${BLACK}"
exit 1
fi
# create target
SRS_WORKDIR=${SRS_EXPORT_LIBRTMP_PROJECT} && SRS_OBJS=${SRS_WORKDIR}/${SRS_OBJS_DIR} && mkdir -p ${SRS_OBJS} &&
# copy src to target
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/research/librtmp && mkdir -p ${_CPT} && cp research/librtmp/*.c research/librtmp/Makefile ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/auto && mkdir -p ${_CPT} && cp auto/generate_header.sh auto/generate-srs-librtmp-single.sh ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/src/core && mkdir -p ${_CPT} && cp src/core/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/src/kernel && mkdir -p ${_CPT} && cp src/kernel/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/src/rtmp && mkdir -p ${_CPT} && cp src/rtmp/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP_PROJECT}/src/libs && mkdir -p ${_CPT} && cp src/libs/* ${_CPT}
# check ret
ret=$?; if [[ $ret -ne 0 ]]; then echo "export src failed, ret=$ret"; exit $ret; fi
fi

@ -0,0 +1,130 @@
#!/bin/bash
# when export srs-librtmp single files
# package the whole project to srs_librtmp.h and srs_librtmp.cpp
#
# params:
# $SRS_OBJS_DIR the objs directory for Makefile. ie. objs
# $SRS_EXPORT_LIBRTMP_SINGLE the export srs-librtmp single path. ie. srs-librtmp
#
# the target dir must created
if [[ ! -d $SRS_EXPORT_LIBRTMP_SINGLE ]]; then
echo -e "${RED}error, target dir not created: $SRS_EXPORT_LIBRTMP_SINGLE${BLACK}"
exit -1
fi
# generate the srs_librtmp.h
cp $SRS_EXPORT_LIBRTMP_SINGLE/src/libs/srs_librtmp.hpp $SRS_EXPORT_LIBRTMP_SINGLE/srs_librtmp.h
# create srs_librtmp.cpp
FILE=$SRS_EXPORT_LIBRTMP_SINGLE/srs_librtmp.cpp
cat << END >$FILE
/*
The MIT License (MIT)
Copyright (c) 2013-2014 winlin
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
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 "srs_librtmp.h"
END
# build objs auto files to cpp
cat $SRS_EXPORT_LIBRTMP_SINGLE/$SRS_OBJS_DIR/srs_auto_headers.hpp >>$FILE
ret=$?; if [[ $ret -ne 0 ]]; then
echo -e "${RED}failed to generate the srs_librtmp.cpp${BLACK}"
exit $ret
fi
# module to cpp files.
function build_module_hpp()
{
echo "build files ${SRS_LIBRTMP_OBJS} to $FILE"
for item in ${SRS_LIBRTMP_OBJS[*]}; do
FILE_NAME="${item%.*}"
echo "// following is generated by ${FILE_NAME}.hpp" >> $FILE &&
sed -i "s|#include <srs_|//#include <srs_|g" $SRS_EXPORT_LIBRTMP_SINGLE/${FILE_NAME}.hpp &&
cat $SRS_EXPORT_LIBRTMP_SINGLE/${FILE_NAME}.hpp >>$FILE
ret=$?; if [[ $ret -ne 0 ]]; then
echo -e "${RED}failed to generate the srs_librtmp.cpp by ${FILE_NAME}.hpp. {${BLACK}"
exit $ret
fi
done
}
SRS_LIBRTMP_OBJS="${CORE_OBJS[@]}" && build_module_hpp
SRS_LIBRTMP_OBJS="${KERNEL_OBJS[@]}" && build_module_hpp
SRS_LIBRTMP_OBJS="${RTMP_OBJS[@]}" && build_module_hpp
SRS_LIBRTMP_OBJS="${LIBS_OBJS[@]}" && build_module_hpp
# module to cpp files.
function build_module_cpp()
{
echo "build files ${SRS_LIBRTMP_OBJS} to $FILE"
for item in ${SRS_LIBRTMP_OBJS[*]}; do
FILE_NAME="${item%.*}"
echo "// following is generated by ${FILE_NAME}.cpp" >> $FILE &&
sed -i "s|#include <srs_|//#include <srs_|g" $SRS_EXPORT_LIBRTMP_SINGLE/${FILE_NAME}.cpp &&
cat $SRS_EXPORT_LIBRTMP_SINGLE/${FILE_NAME}.cpp >>$FILE
ret=$?; if [[ $ret -ne 0 ]]; then
echo -e "${RED}failed to generate the srs_librtmp.cpp by ${FILE_NAME}.cpp. {${BLACK}"
exit $ret
fi
done
}
SRS_LIBRTMP_OBJS="${CORE_OBJS[@]}" && build_module_cpp
SRS_LIBRTMP_OBJS="${KERNEL_OBJS[@]}" && build_module_cpp
SRS_LIBRTMP_OBJS="${RTMP_OBJS[@]}" && build_module_cpp
SRS_LIBRTMP_OBJS="${LIBS_OBJS[@]}" && build_module_cpp
# create example.cpp
FILE=$SRS_EXPORT_LIBRTMP_SINGLE/example.c
COMPILE='gcc example.c srs_librtmp.cpp -g -O0 -lstdc++ -o example'
cat << END >$FILE
/**
# Example to use srs-librtmp
# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v2_CN_SrsLibrtmp
${COMPILE}
*/
#include <stdio.h>
#include "srs_librtmp.h"
int main(int argc, char** argv)
{
printf("Example for srs-librtmp\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());
srs_rtmp_t rtmp = srs_rtmp_create("rtmp://ossrs.net/live/livestream");
srs_trace("create rtmp success");
srs_rtmp_destroy(rtmp);
return 0;
}
END
# compile the example
(cd $SRS_EXPORT_LIBRTMP_SINGLE && `${COMPILE}` && ./example && rm -f example)
ret=$?; if [[ $ret -ne 0 ]]; then
echo "(cd $SRS_EXPORT_LIBRTMP_SINGLE && ${COMPILE} && ./example && rm -f example)"
echo -e "${RED}failed to compile example.${BLACK}"
exit $ret
fi
# clear the files for srs-librtmp project, generated by generate-srs-librtmp-project.sh
(cd $SRS_EXPORT_LIBRTMP_SINGLE && rm -rf auto $SRS_OBJS_DIR research src Makefile)

@ -58,8 +58,10 @@ SRS_LOG_TRACE=RESERVED
# experts # experts
# donot compile ssl, use system ssl(-lssl) if required. # donot compile ssl, use system ssl(-lssl) if required.
SRS_USE_SYS_SSL=NO SRS_USE_SYS_SSL=NO
# export the srs-librtmp to specified path, NO to disable it. # export the srs-librtmp to specified project, NO to disable it.
SRS_EXPORT_LIBRTMP=NO SRS_EXPORT_LIBRTMP_PROJECT=NO
# export the srs-librtmp to a single .h and .c, NO to disable it.
SRS_EXPORT_LIBRTMP_SINGLE=NO
# #
################################################################ ################################################################
# presets # presets
@ -183,8 +185,9 @@ Conflicts:
the complex tools not available for arm. the complex tools not available for arm.
Experts: Experts:
--use-sys-ssl donot compile ssl, use system ssl(-lssl) if required. --use-sys-ssl donot compile ssl, use system ssl(-lssl) if required.
--export-librtmp=<path> export srs-librtmp to specified path. --export-librtmp-project=<path> export srs-librtmp to specified project in path.
--export-librtmp-single=<path> export srs-librtmp to a single file(.h+.cpp) in path.
Workflow: Workflow:
1. apply "Presets". if not specified, use default preset. 1. apply "Presets". if not specified, use default preset.
@ -266,7 +269,8 @@ function parse_user_option() {
--full) SRS_ENABLE_ALL=YES ;; --full) SRS_ENABLE_ALL=YES ;;
--use-sys-ssl) SRS_USE_SYS_SSL=YES ;; --use-sys-ssl) SRS_USE_SYS_SSL=YES ;;
--export-librtmp) SRS_EXPORT_LIBRTMP=${value} ;; --export-librtmp-project) SRS_EXPORT_LIBRTMP_PROJECT=${value} ;;
--export-librtmp-single) SRS_EXPORT_LIBRTMP_SINGLE=${value} ;;
*) *)
echo "$0: error: invalid option \"$option\"" echo "$0: error: invalid option \"$option\""
@ -701,8 +705,13 @@ function apply_user_detail_options() {
export SRS_JOBS="--jobs=${SRS_JOBS}" export SRS_JOBS="--jobs=${SRS_JOBS}"
fi fi
# if specified export single file, export project first.
if [ $SRS_EXPORT_LIBRTMP_SINGLE != NO ]; then
SRS_EXPORT_LIBRTMP_PROJECT=$SRS_EXPORT_LIBRTMP_SINGLE
fi
# disable almost all features for export srs-librtmp. # disable almost all features for export srs-librtmp.
if [ $SRS_EXPORT_LIBRTMP != NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT != NO ]; then
SRS_HLS=NO SRS_HLS=NO
SRS_DVR=NO SRS_DVR=NO
SRS_NGINX=NO SRS_NGINX=NO

@ -21,7 +21,7 @@ SrsGperfMPSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPERF_MP = YES ]; then
SrsGperfCPSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPERF_CP = YES ]; then SrsGperfCPSummaryColor="\${YELLOW}"; fi SrsGperfCPSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPERF_CP = YES ]; then SrsGperfCPSummaryColor="\${YELLOW}"; fi
SrsGprofSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPROF = YES ]; then SrsGprofSummaryColor="\${YELLOW}"; fi SrsGprofSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPROF = YES ]; then SrsGprofSummaryColor="\${YELLOW}"; fi
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
cat <<END > ${SRS_OBJS}/${SRS_BUILD_SUMMARY} cat <<END > ${SRS_OBJS}/${SRS_BUILD_SUMMARY}
#!/bin/bash #!/bin/bash

286
trunk/configure vendored

@ -25,30 +25,14 @@ BLACK="\\e[0m"
. auto/options.sh . auto/options.sh
# for export srs-librtmp, change target to it. # for export srs-librtmp, change target to it.
if [ $SRS_EXPORT_LIBRTMP != NO ]; then . auto/generate-srs-librtmp-project.sh
if [[ -d ${SRS_EXPORT_LIBRTMP} ]]; then
echo -e "${RED}srs-librtmp target dir exists: ${SRS_EXPORT_LIBRTMP}. ${BLACK}"
exit 1
fi
# create target
SRS_WORKDIR=${SRS_EXPORT_LIBRTMP} && SRS_OBJS=${SRS_WORKDIR}/${SRS_OBJS_DIR} && mkdir -p ${SRS_OBJS} &&
# copy src to target
_CPT=${SRS_EXPORT_LIBRTMP}/research/librtmp && mkdir -p ${_CPT} && cp research/librtmp/*.c research/librtmp/Makefile ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP}/auto && mkdir -p ${_CPT} && cp auto/generate_header.sh ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP}/src/core && mkdir -p ${_CPT} && cp src/core/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP}/src/kernel && mkdir -p ${_CPT} && cp src/kernel/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP}/src/rtmp && mkdir -p ${_CPT} && cp src/rtmp/* ${_CPT} &&
_CPT=${SRS_EXPORT_LIBRTMP}/src/libs && mkdir -p ${_CPT} && cp src/libs/* ${_CPT}
# check ret
ret=$?; if [[ $ret -ne 0 ]]; then echo "export src failed, ret=$ret"; exit $ret; fi
fi
# the auto generated variables. # the auto generated variables.
SRS_AUTO_HEADERS_H="${SRS_OBJS}/srs_auto_headers.hpp" SRS_AUTO_HEADERS_H="${SRS_OBJS}/srs_auto_headers.hpp"
# clean the exists, when not export srs-librtmp. # clean the exists, when not export srs-librtmp.
# do this only when the options is ok. # do this only when the options is ok.
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
if [[ -f Makefile ]]; then if [[ -f Makefile ]]; then
make clean make clean
fi fi
@ -186,7 +170,7 @@ clean:
END END
# if export librtmp, donot build the srs server. # if export librtmp, donot build the srs server.
if [ $SRS_EXPORT_LIBRTMP != NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT != NO ]; then
cat << END >> ${SRS_WORKDIR}/${SRS_MAKEFILE} cat << END >> ${SRS_WORKDIR}/${SRS_MAKEFILE}
server: _prepare_dir server: _prepare_dir
@echo "donot build the srs(simple rtmp server) for srs-librtmp" @echo "donot build the srs(simple rtmp server) for srs-librtmp"
@ -202,7 +186,7 @@ END
fi fi
# disable install entry for srs-librtmp # disable install entry for srs-librtmp
if [ $SRS_EXPORT_LIBRTMP != NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT != NO ]; then
cat << END >> ${SRS_WORKDIR}/${SRS_MAKEFILE} cat << END >> ${SRS_WORKDIR}/${SRS_MAKEFILE}
uninstall: uninstall:
@echo "disable uninstall for srs-librtmp" @echo "disable uninstall for srs-librtmp"
@ -395,7 +379,7 @@ RTMP_INCS="src/rtmp"; MODULE_DIR=${RTMP_INCS} . auto/modules.sh
RTMP_OBJS="${MODULE_OBJS[@]}" RTMP_OBJS="${MODULE_OBJS[@]}"
# #
#App Module #App Module
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
MODULE_ID="APP" MODULE_ID="APP"
MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") MODULE_DEPENDS=("CORE" "KERNEL" "RTMP")
ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS_DIR}) ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS_DIR})
@ -418,7 +402,7 @@ LIBS_INCS="src/libs"; MODULE_DIR=${LIBS_INCS} . auto/modules.sh
LIBS_OBJS="${MODULE_OBJS[@]}" LIBS_OBJS="${MODULE_OBJS[@]}"
# #
#Main Module #Main Module
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
MODULE_ID="MAIN" MODULE_ID="MAIN"
MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP")
ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS_DIR} ${LibGperfRoot}) ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS_DIR} ${LibGperfRoot})
@ -432,7 +416,7 @@ fi
# then link to a binary, for example, objs/srs # then link to a binary, for example, objs/srs
# #
# disable all app when export librtmp # disable all app when export librtmp
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
# all main entrances # all main entrances
MAIN_ENTRANCES=("srs_main_server") MAIN_ENTRANCES=("srs_main_server")
# #
@ -464,13 +448,27 @@ if [ $SRS_UTEST = YES ]; then
LINK_OPTIONS="-lpthread ${SrsLinkOptions}" MODULE_DIR="src/utest" APP_NAME="srs_utest" . auto/utest.sh LINK_OPTIONS="-lpthread ${SrsLinkOptions}" MODULE_DIR="src/utest" APP_NAME="srs_utest" . auto/utest.sh
fi fi
# for srs-librtmp single file,
# package the whole project to srs_librtmp.h and srs_librtmp.cpp
if [ $SRS_EXPORT_LIBRTMP_SINGLE != NO ]; then
echo "package the whole project to srs_librtmp.h and srs_librtmp.cpp"
. $SRS_EXPORT_LIBRTMP_SINGLE/auto/generate-srs-librtmp-single.sh
echo -e "${GREEN}Please use the srs-librtmp files: ${BLACK}"
echo -e "${GREEN} $SRS_EXPORT_LIBRTMP_PROJECT/srs_librtmp.h ${BLACK}"
echo -e "${GREEN} $SRS_EXPORT_LIBRTMP_PROJECT/srs_librtmp.cpp ${BLACK}"
echo -e "${GREEN} $SRS_EXPORT_LIBRTMP_PROJECT/example.c ${BLACK}"
elif [ $SRS_EXPORT_LIBRTMP_PROJECT != NO ]; then
echo -e "${GREEN}Please use the srs-librtmp project: ${BLACK}"
echo -e "${GREEN} cd $SRS_EXPORT_LIBRTMP_PROJECT && make ${BLACK}"
fi
echo 'configure ok! ' echo 'configure ok! '
##################################################################################### #####################################################################################
# when configure success, prepare build # when configure success, prepare build
##################################################################################### #####################################################################################
# create objs/logs for ffmpeg to write log. # create objs/logs for ffmpeg to write log.
if [ $SRS_EXPORT_LIBRTMP = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
mkdir -p ${SRS_OBJS}/logs mkdir -p ${SRS_OBJS}/logs
fi fi
@ -478,127 +476,131 @@ fi
# configure summary # configure summary
##################################################################################### #####################################################################################
# summary # summary
echo "" if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
echo "configure summary:" echo ""
echo " ${SRS_AUTO_USER_CONFIGURE}" echo "configure summary:"
echo " ${SRS_AUTO_CONFIGURE}" echo " ${SRS_AUTO_USER_CONFIGURE}"
if [ $SRS_HLS = YES ]; then echo " ${SRS_AUTO_CONFIGURE}"
echo -e "${GREEN}HLS is enabled${BLACK}" if [ $SRS_HLS = YES ]; then
else echo -e "${GREEN}HLS is enabled${BLACK}"
echo -e "${YELLOW}warning: without HLS support${BLACK}" else
fi echo -e "${YELLOW}warning: without HLS support${BLACK}"
if [ $SRS_NGINX = YES ]; then fi
echo -e "${GREEN}Nginx http server is enabled${BLACK}" if [ $SRS_NGINX = YES ]; then
else echo -e "${GREEN}Nginx http server is enabled${BLACK}"
echo -e "${GREEN}note: Nginx http server is disabled${BLACK}" else
fi echo -e "${GREEN}note: Nginx http server is disabled${BLACK}"
if [ $SRS_DVR = YES ]; then fi
echo -e "${GREEN}DVR is enabled${BLACK}" if [ $SRS_DVR = YES ]; then
else echo -e "${GREEN}DVR is enabled${BLACK}"
echo -e "${YELLOW}warning: without DVR support${BLACK}" else
fi echo -e "${YELLOW}warning: without DVR support${BLACK}"
if [ $SRS_SSL = YES ]; then fi
echo -e "${GREEN}rtmp complex handshake is enabled${BLACK}" if [ $SRS_SSL = YES ]; then
else echo -e "${GREEN}rtmp complex handshake is enabled${BLACK}"
echo -e "${YELLOW}warning: without rtmp complex handshake support, donot support h264/aac to adobe flash player${BLACK}" else
fi echo -e "${YELLOW}warning: without rtmp complex handshake support, donot support h264/aac to adobe flash player${BLACK}"
if [ $SRS_FFMPEG_TOOL = YES ]; then fi
echo -e "${GREEN}transcode/mux/ingest tool FFMPEG is enabled${BLACK}" if [ $SRS_FFMPEG_TOOL = YES ]; then
else echo -e "${GREEN}transcode/mux/ingest tool FFMPEG is enabled${BLACK}"
echo -e "${YELLOW}warning: without transcode/mux/ingest tool FFMPEG support${BLACK}" else
fi echo -e "${YELLOW}warning: without transcode/mux/ingest tool FFMPEG support${BLACK}"
if [ $SRS_TRANSCODE = YES ]; then fi
echo -e "${GREEN}transcoding RTMP stream is enabled${BLACK}" if [ $SRS_TRANSCODE = YES ]; then
else echo -e "${GREEN}transcoding RTMP stream is enabled${BLACK}"
echo -e "${YELLOW}warning: without transcoding RTMP stream support${BLACK}" else
fi echo -e "${YELLOW}warning: without transcoding RTMP stream support${BLACK}"
if [ $SRS_INGEST = YES ]; then fi
echo -e "${GREEN}ingest file/stream/device is enabled${BLACK}" if [ $SRS_INGEST = YES ]; then
else echo -e "${GREEN}ingest file/stream/device is enabled${BLACK}"
echo -e "${YELLOW}warning: without ingest file/stream/device support${BLACK}" else
fi echo -e "${YELLOW}warning: without ingest file/stream/device support${BLACK}"
if [ $SRS_HTTP_CALLBACK = YES ]; then fi
echo -e "${GREEN}http hooks callback over CherryPy is enabled${BLACK}" if [ $SRS_HTTP_CALLBACK = YES ]; then
else echo -e "${GREEN}http hooks callback over CherryPy is enabled${BLACK}"
echo -e "${YELLOW}warning: without http hooks callback over CherryPy support${BLACK}" else
fi echo -e "${YELLOW}warning: without http hooks callback over CherryPy support${BLACK}"
if [ $SRS_HTTP_SERVER = YES ]; then fi
echo -e "${GREEN}http server to delivery http stream is enabled${BLACK}" if [ $SRS_HTTP_SERVER = YES ]; then
else echo -e "${GREEN}http server to delivery http stream is enabled${BLACK}"
echo -e "${YELLOW}warning: without http server to delivery http stream support${BLACK}" else
fi echo -e "${YELLOW}warning: without http server to delivery http stream support${BLACK}"
if [ $SRS_HTTP_API = YES ]; then fi
echo -e "${GREEN}http api to manage server is enabled${BLACK}" if [ $SRS_HTTP_API = YES ]; then
else echo -e "${GREEN}http api to manage server is enabled${BLACK}"
echo -e "${YELLOW}warning: without http api to manage server support${BLACK}" else
fi echo -e "${YELLOW}warning: without http api to manage server support${BLACK}"
if [ $SRS_LIBRTMP = YES ]; then fi
echo -e "${GREEN}srs-librtmp for client is enabled${BLACK}" if [ $SRS_LIBRTMP = YES ]; then
else echo -e "${GREEN}srs-librtmp for client is enabled${BLACK}"
echo -e "${YELLOW}note: srs-librtmp for client is disabled${BLACK}" else
fi echo -e "${YELLOW}note: srs-librtmp for client is disabled${BLACK}"
if [ $SRS_RESEARCH = YES ]; then fi
echo -e "${GREEN}research tools are builded${BLACK}" if [ $SRS_RESEARCH = YES ]; then
else echo -e "${GREEN}research tools are builded${BLACK}"
echo -e "${GREEN}note: research tools are not builded${BLACK}" else
fi echo -e "${GREEN}note: research tools are not builded${BLACK}"
if [ $SRS_UTEST = YES ]; then fi
echo -e "${GREEN}utest for srs are builded${BLACK}" if [ $SRS_UTEST = YES ]; then
else echo -e "${GREEN}utest for srs are builded${BLACK}"
echo -e "${YELLOW}note: utest for srs are not builded${BLACK}" else
fi echo -e "${YELLOW}note: utest for srs are not builded${BLACK}"
if [ $SRS_GPERF = YES ]; then fi
echo -e "${GREEN}gperf(tcmalloc) for srs are builded${BLACK}" if [ $SRS_GPERF = YES ]; then
else echo -e "${GREEN}gperf(tcmalloc) for srs are builded${BLACK}"
echo -e "${GREEN}note: gperf(tcmalloc) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: gperf(tcmalloc) for srs are not builded${BLACK}"
if [ $SRS_GPERF_MC = YES ]; then fi
echo -e "${YELLOW}gmc(gperf memory check) for srs are builded -- Performance may suffer${BLACK}" if [ $SRS_GPERF_MC = YES ]; then
else echo -e "${YELLOW}gmc(gperf memory check) for srs are builded -- Performance may suffer${BLACK}"
echo -e "${GREEN}note: gmc(gperf memory check) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: gmc(gperf memory check) for srs are not builded${BLACK}"
if [ $SRS_GPERF_MP = YES ]; then fi
echo -e "${YELLOW}gmp(gperf memory profile) for srs are builded -- Performance may suffer${BLACK}" if [ $SRS_GPERF_MP = YES ]; then
else echo -e "${YELLOW}gmp(gperf memory profile) for srs are builded -- Performance may suffer${BLACK}"
echo -e "${GREEN}note: gmp(gperf memory profile) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: gmp(gperf memory profile) for srs are not builded${BLACK}"
if [ $SRS_GPERF_CP = YES ]; then fi
echo -e "${YELLOW}gcp(gperf cpu profile) for srs are builded -- Performance may suffer${BLACK}" if [ $SRS_GPERF_CP = YES ]; then
else echo -e "${YELLOW}gcp(gperf cpu profile) for srs are builded -- Performance may suffer${BLACK}"
echo -e "${GREEN}note: gcp(gperf cpu profile) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: gcp(gperf cpu profile) for srs are not builded${BLACK}"
if [ $SRS_GPROF = YES ]; then fi
echo -e "${YELLOW}gprof(GNU profile tool) for srs are builded -- Performance may suffer${BLACK}" if [ $SRS_GPROF = YES ]; then
else echo -e "${YELLOW}gprof(GNU profile tool) for srs are builded -- Performance may suffer${BLACK}"
echo -e "${GREEN}note: gprof(GNU profile tool) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: gprof(GNU profile tool) for srs are not builded${BLACK}"
if [ $SRS_ARM_UBUNTU12 = YES ]; then fi
echo -e "${GREEN}arm-ubuntu12(armhf, v7cpu) for srs are builded${BLACK}" if [ $SRS_ARM_UBUNTU12 = YES ]; then
else echo -e "${GREEN}arm-ubuntu12(armhf, v7cpu) for srs are builded${BLACK}"
echo -e "${GREEN}note: arm-ubuntu12(armhf, v7cpu) for srs are not builded${BLACK}" else
fi echo -e "${GREEN}note: arm-ubuntu12(armhf, v7cpu) for srs are not builded${BLACK}"
if [ $SRS_MIPS_UBUNTU12 = YES ]; then fi
echo -e "${GREEN}mips-ubuntu12 for srs are builded${BLACK}" if [ $SRS_MIPS_UBUNTU12 = YES ]; then
else echo -e "${GREEN}mips-ubuntu12 for srs are builded${BLACK}"
echo -e "${GREEN}note: mips-ubuntu12 for srs are not builded${BLACK}" else
echo -e "${GREEN}note: mips-ubuntu12 for srs are not builded${BLACK}"
fi
fi fi
##################################################################################### #####################################################################################
# next step # next step
##################################################################################### #####################################################################################
ip=`ifconfig|grep "inet addr"| grep -v "127.0.0.1"|awk '{print $2}'|awk -F ':' 'NR==1 {print $2}'` if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
echo "" ip=`ifconfig|grep "inet addr"| grep -v "127.0.0.1"|awk '{print $2}'|awk -F ':' 'NR==1 {print $2}'`
echo "to run 3rdparty application:" echo ""
if [ $SRS_NGINX = YES ]; then echo "to run 3rdparty application:"
echo "\" sudo ./objs/nginx/sbin/nginx \" to start the nginx http server for hls" if [ $SRS_NGINX = YES ]; then
fi echo "\" sudo ./objs/nginx/sbin/nginx \" to start the nginx http server for hls"
if [ $SRS_FFMPEG_TOOL = YES ]; then fi
echo -e "\" ./objs/ffmpeg/bin/ffmpeg \" is used for live stream transcoding" if [ $SRS_FFMPEG_TOOL = YES ]; then
fi echo -e "\" ./objs/ffmpeg/bin/ffmpeg \" is used for live stream transcoding"
if [ $SRS_HTTP_CALLBACK = YES ]; then fi
echo -e "\" python ./research/api-server/server.py 8085 \" to start the api-server" if [ $SRS_HTTP_CALLBACK = YES ]; then
echo -e "\" python ./research/api-server/server.py 8085 \" to start the api-server"
fi
echo ""
echo "to build:"
echo "\" make \" to build the srs(simple rtmp server)."
echo "\" make help \" to get the usage of make"
fi fi
echo ""
echo "to build:"
echo "\" make \" to build the srs(simple rtmp server)."
echo "\" make help \" to get the usage of make"

@ -80,31 +80,31 @@ int main(int argc, char** argv)
rtmp = srs_rtmp_create2(argv[1]); rtmp = srs_rtmp_create2(argv[1]);
srs_trace("bandwidth check/test url: %s", argv[1]); srs_lib_trace("bandwidth check/test url: %s", argv[1]);
if ((ret = srs_simple_handshake(rtmp)) != 0) { if ((ret = srs_simple_handshake(rtmp)) != 0) {
srs_trace("simple handshake failed."); srs_lib_trace("simple handshake failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("simple handshake success"); srs_lib_trace("simple handshake success");
if ((ret = srs_connect_app2(rtmp, if ((ret = srs_connect_app2(rtmp,
srs_server_ip, srs_server, srs_primary_authors, srs_version, &srs_id, &srs_pid)) != 0) { srs_server_ip, srs_server, srs_primary_authors, srs_version, &srs_id, &srs_pid)) != 0) {
srs_trace("connect vhost/app failed."); srs_lib_trace("connect vhost/app failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("connect vhost/app success"); srs_lib_trace("connect vhost/app success");
if ((ret = srs_bandwidth_check(rtmp, if ((ret = srs_bandwidth_check(rtmp,
&start_time, &end_time, &play_kbps, &publish_kbps, &start_time, &end_time, &play_kbps, &publish_kbps,
&play_bytes, &publish_bytes, &play_duration, &publish_duration)) != 0 &play_bytes, &publish_bytes, &play_duration, &publish_duration)) != 0
) { ) {
srs_trace("bandwidth check/test failed."); srs_lib_trace("bandwidth check/test failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("bandwidth check/test success"); srs_lib_trace("bandwidth check/test success");
srs_trace("\n%s, %s\n" srs_lib_trace("\n%s, %s\n"
"%s, %s, srs_pid=%d, srs_id=%d\n" "%s, %s, srs_pid=%d, srs_id=%d\n"
"duration: %dms(%d+%d)\n" "duration: %dms(%d+%d)\n"
"play: %dkbps\n" "play: %dkbps\n"
@ -136,8 +136,8 @@ rtmp_destroy:
(int)(end_time - start_time), play_duration, publish_duration, (int)(end_time - start_time), play_duration, publish_duration,
play_kbps, publish_kbps); play_kbps, publish_kbps);
srs_trace(""); srs_lib_trace("");
srs_trace("completed"); srs_lib_trace("completed");
return ret; return ret;
} }

@ -79,55 +79,55 @@ int main(int argc, char** argv)
duration = atoi(argv[2]); duration = atoi(argv[2]);
timeout = atoi(argv[3]); timeout = atoi(argv[3]);
srs_trace("rtmp url: %s", rtmp_url); srs_lib_trace("rtmp url: %s", rtmp_url);
srs_trace("duration: %ds, timeout:%ds", duration, timeout); srs_lib_trace("duration: %ds, timeout:%ds", duration, timeout);
if (duration <= 0 || timeout <= 0) { if (duration <= 0 || timeout <= 0) {
srs_trace("duration and timeout must be positive."); srs_lib_trace("duration and timeout must be positive.");
exit(-2); exit(-2);
} }
rtmp = srs_rtmp_create(rtmp_url); rtmp = srs_rtmp_create(rtmp_url);
if ((ret = __srs_dns_resolve(rtmp)) != 0) { if ((ret = __srs_dns_resolve(rtmp)) != 0) {
srs_trace("dns resolve failed. ret=%d", ret); srs_lib_trace("dns resolve failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("dns resolve success"); srs_lib_trace("dns resolve success");
time_dns_resolve = srs_get_time_ms(); time_dns_resolve = srs_get_time_ms();
if ((ret = __srs_connect_server(rtmp)) != 0) { if ((ret = __srs_connect_server(rtmp)) != 0) {
srs_trace("socket connect failed. ret=%d", ret); srs_lib_trace("socket connect failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("socket connect success"); srs_lib_trace("socket connect success");
time_socket_connect = srs_get_time_ms(); time_socket_connect = srs_get_time_ms();
if ((ret = __srs_do_simple_handshake(rtmp)) != 0) { if ((ret = __srs_do_simple_handshake(rtmp)) != 0) {
srs_trace("do simple handshake failed. ret=%d", ret); srs_lib_trace("do simple handshake failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("do simple handshake success"); srs_lib_trace("do simple handshake success");
if ((ret = srs_connect_app(rtmp)) != 0) { if ((ret = srs_connect_app(rtmp)) != 0) {
srs_trace("connect vhost/app failed. ret=%d", ret); srs_lib_trace("connect vhost/app failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("connect vhost/app success"); srs_lib_trace("connect vhost/app success");
if ((ret = srs_play_stream(rtmp)) != 0) { if ((ret = srs_play_stream(rtmp)) != 0) {
srs_trace("play stream failed. ret=%d", ret); srs_lib_trace("play stream failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("play stream success"); srs_lib_trace("play stream success");
time_play_stream = srs_get_time_ms(); time_play_stream = srs_get_time_ms();
for (;;) { for (;;) {
if ((ret = srs_read_packet(rtmp, &type, &timestamp, &data, &size)) != 0) { if ((ret = srs_read_packet(rtmp, &type, &timestamp, &data, &size)) != 0) {
srs_trace("read packet failed. ret=%d", ret); srs_lib_trace("read packet failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("got packet: type=%s, time=%d, size=%d", srs_lib_trace("got packet: type=%s, time=%d, size=%d",
srs_type2string(type), timestamp, size); srs_type2string(type), timestamp, size);
if (SRS_RTMP_TYPE_VIDEO == type || SRS_RTMP_TYPE_AUDIO == type) { if (SRS_RTMP_TYPE_VIDEO == type || SRS_RTMP_TYPE_AUDIO == type) {
@ -142,12 +142,12 @@ int main(int argc, char** argv)
free(data); free(data);
if (srs_get_time_ms() - time_startup > timeout * 1000) { if (srs_get_time_ms() - time_startup > timeout * 1000) {
srs_trace("timeout, terminate."); srs_lib_trace("timeout, terminate.");
goto rtmp_destroy; goto rtmp_destroy;
} }
if ((timestamp - basetime) > duration * 1000) { if ((timestamp - basetime) > duration * 1000) {
srs_trace("duration exceed, terminate."); srs_lib_trace("duration exceed, terminate.");
goto rtmp_destroy; goto rtmp_destroy;
} }
} }
@ -196,8 +196,8 @@ rtmp_destroy:
"\"remark2\": \"if code is not 0, user must ignore all data\"" "\"remark2\": \"if code is not 0, user must ignore all data\""
); );
srs_trace(""); srs_lib_trace("");
srs_trace("completed"); srs_lib_trace("completed");
return ret; return ret;
} }

@ -76,9 +76,9 @@ int main(int argc, char** argv)
tmp_file = (char*)malloc(tmp_file_size); tmp_file = (char*)malloc(tmp_file_size);
snprintf(tmp_file, tmp_file_size, "%s.tmp", out_flv_file); snprintf(tmp_file, tmp_file_size, "%s.tmp", out_flv_file);
srs_trace("input: %s", in_flv_file); srs_lib_trace("input: %s", in_flv_file);
srs_trace("output: %s", out_flv_file); srs_lib_trace("output: %s", out_flv_file);
srs_trace("tmp_file: %s", tmp_file); srs_lib_trace("tmp_file: %s", tmp_file);
ret = process(in_flv_file, tmp_file, &ic, &oc); ret = process(in_flv_file, tmp_file, &ic, &oc);
@ -89,13 +89,13 @@ int main(int argc, char** argv)
unlink(tmp_file); unlink(tmp_file);
if (ret == ERROR_INJECTED) { if (ret == ERROR_INJECTED) {
ret = 0; ret = 0;
srs_trace("file already injected."); srs_lib_trace("file already injected.");
} else { } else {
srs_trace("error, remove tmp file."); srs_lib_trace("error, remove tmp file.");
} }
} else { } else {
rename(tmp_file, out_flv_file); rename(tmp_file, out_flv_file);
srs_trace("completed, rename to %s", out_flv_file); srs_lib_trace("completed, rename to %s", out_flv_file);
} }
free(tmp_file); free(tmp_file);
@ -123,14 +123,14 @@ int process(const char* in_flv_file, const char* out_flv_file, srs_flv_t* pic, s
if ((ic = srs_flv_open_read(in_flv_file)) == NULL) { if ((ic = srs_flv_open_read(in_flv_file)) == NULL) {
ret = 2; ret = 2;
srs_trace("open input flv file failed. ret=%d", ret); srs_lib_trace("open input flv file failed. ret=%d", ret);
return ret; return ret;
} }
*pic = ic; *pic = ic;
if ((oc = srs_flv_open_write(out_flv_file)) == NULL) { if ((oc = srs_flv_open_write(out_flv_file)) == NULL) {
ret = 2; ret = 2;
srs_trace("open output flv file failed. ret=%d", ret); srs_lib_trace("open output flv file failed. ret=%d", ret);
return ret; return ret;
} }
*poc = oc; *poc = oc;
@ -164,13 +164,13 @@ int parse_metadata(char* data, int size, srs_amf0_t* pname, srs_amf0_t* pdata)
*pname = srs_amf0_parse(data, size, &nparsed); *pname = srs_amf0_parse(data, size, &nparsed);
if (*pname == NULL || nparsed >= size) { if (*pname == NULL || nparsed >= size) {
srs_trace("invalid amf0 name data."); srs_lib_trace("invalid amf0 name data.");
return -1; return -1;
} }
*pdata = srs_amf0_parse(data + nparsed, size - nparsed, &nparsed); *pdata = srs_amf0_parse(data + nparsed, size - nparsed, &nparsed);
if (*pdata == NULL || nparsed > size) { if (*pdata == NULL || nparsed > size) {
srs_trace("invalid amf0 value data"); srs_lib_trace("invalid amf0 value data");
return -1; return -1;
} }
@ -206,22 +206,22 @@ int build_keyframes(srs_flv_t ic, srs_amf0_t *pname, srs_amf0_t* pdata, srs_amf0
return ret; return ret;
} }
srs_trace("build keyframe infos from flv"); srs_lib_trace("build keyframe infos from flv");
for (;;) { for (;;) {
offset = srs_flv_tellg(ic); offset = srs_flv_tellg(ic);
// tag header // tag header
if ((ret = srs_flv_read_tag_header(ic, &type, &size, &timestamp)) != 0) { if ((ret = srs_flv_read_tag_header(ic, &type, &size, &timestamp)) != 0) {
if (srs_flv_is_eof(ret)) { if (srs_flv_is_eof(ret)) {
srs_trace("parse completed."); srs_lib_trace("parse completed.");
return 0; return 0;
} }
srs_trace("flv get packet failed. ret=%d", ret); srs_lib_trace("flv get packet failed. ret=%d", ret);
return ret; return ret;
} }
if (size <= 0) { if (size <= 0) {
srs_trace("invalid size=%d", size); srs_lib_trace("invalid size=%d", size);
return ret; return ret;
} }
@ -343,20 +343,20 @@ int do_inject_flv(srs_flv_t ic, srs_flv_t oc, srs_amf0_t amf0_name, srs_amf0_t a
free(data); free(data);
} }
srs_trace("build keyframe infos from flv"); srs_lib_trace("build keyframe infos from flv");
for (;;) { for (;;) {
// tag header // tag header
if ((ret = srs_flv_read_tag_header(ic, &type, &size, &timestamp)) != 0) { if ((ret = srs_flv_read_tag_header(ic, &type, &size, &timestamp)) != 0) {
if (srs_flv_is_eof(ret)) { if (srs_flv_is_eof(ret)) {
srs_trace("parse completed."); srs_lib_trace("parse completed.");
return 0; return 0;
} }
srs_trace("flv get packet failed. ret=%d", ret); srs_lib_trace("flv get packet failed. ret=%d", ret);
return ret; return ret;
} }
if (size <= 0) { if (size <= 0) {
srs_trace("invalid size=%d", size); srs_lib_trace("invalid size=%d", size);
break; break;
} }

@ -61,11 +61,11 @@ int main(int argc, char** argv)
} }
in_flv_file = argv[1]; in_flv_file = argv[1];
srs_trace("input: %s", in_flv_file); srs_lib_trace("input: %s", in_flv_file);
if ((flv = srs_flv_open_read(in_flv_file)) == NULL) { if ((flv = srs_flv_open_read(in_flv_file)) == NULL) {
ret = 2; ret = 2;
srs_trace("open flv file failed. ret=%d", ret); srs_lib_trace("open flv file failed. ret=%d", ret);
return ret; return ret;
} }
@ -147,12 +147,12 @@ int parse_script_data(u_int32_t timestamp, char* data, int size, int64_t offset)
// amf0 // amf0
amf0_name = srs_amf0_parse(data, size, &nparsed); amf0_name = srs_amf0_parse(data, size, &nparsed);
if (amf0_name == NULL || nparsed >= size) { if (amf0_name == NULL || nparsed >= size) {
srs_trace("invalid amf0 name data."); srs_lib_trace("invalid amf0 name data.");
return -1; return -1;
} }
amf0_data = srs_amf0_parse(data + nparsed, size - nparsed, &nparsed); amf0_data = srs_amf0_parse(data + nparsed, size - nparsed, &nparsed);
srs_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n" srs_lib_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n"
"offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n%s%s", "offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n%s%s",
srs_type2string(SRS_RTMP_TYPE_SCRIPT), timestamp, size + FLV_HEADER_SIZE, size, srs_type2string(SRS_RTMP_TYPE_SCRIPT), timestamp, size + FLV_HEADER_SIZE, size,
(int)offset, hbuf, tbuf, (int)offset, hbuf, tbuf,
@ -178,7 +178,7 @@ int parse_audio_data(u_int32_t timestamp, char* data, int size, int64_t offset)
// bytes // bytes
parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16); parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16);
srs_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n" srs_lib_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n"
"offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n", "offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n",
srs_type2string(SRS_RTMP_TYPE_AUDIO), timestamp, size + FLV_HEADER_SIZE, size, srs_type2string(SRS_RTMP_TYPE_AUDIO), timestamp, size + FLV_HEADER_SIZE, size,
(int)offset, hbuf, tbuf); (int)offset, hbuf, tbuf);
@ -196,7 +196,7 @@ int parse_video_data(u_int32_t timestamp, char* data, int size, int64_t offset)
// bytes // bytes
parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16); parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16);
srs_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n" srs_lib_trace("packet type=%s, time=%d, size=%d, data-size=%d, \n"
"offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n", "offset=%d\n[+00, +15] %s\n[-15, EOF] %s\n",
srs_type2string(SRS_RTMP_TYPE_VIDEO), timestamp, size + FLV_HEADER_SIZE, size, srs_type2string(SRS_RTMP_TYPE_VIDEO), timestamp, size + FLV_HEADER_SIZE, size,
(int)offset, hbuf, tbuf); (int)offset, hbuf, tbuf);
@ -221,22 +221,22 @@ int parse_flv(srs_flv_t flv)
return ret; return ret;
} }
srs_trace("start parse flv"); srs_lib_trace("start parse flv");
for (;;) { for (;;) {
offset = srs_flv_tellg(flv); offset = srs_flv_tellg(flv);
// tag header // tag header
if ((ret = srs_flv_read_tag_header(flv, &type, &size, &timestamp)) != 0) { if ((ret = srs_flv_read_tag_header(flv, &type, &size, &timestamp)) != 0) {
if (srs_flv_is_eof(ret)) { if (srs_flv_is_eof(ret)) {
srs_trace("parse completed."); srs_lib_trace("parse completed.");
return 0; return 0;
} }
srs_trace("flv get packet failed. ret=%d", ret); srs_lib_trace("flv get packet failed. ret=%d", ret);
return ret; return ret;
} }
if (size <= 0) { if (size <= 0) {
srs_trace("invalid size=%d", size); srs_lib_trace("invalid size=%d", size);
break; break;
} }

@ -44,7 +44,7 @@ int read_h264_frame(char* data, int size, char** pp, int* pnb_start_code, int fp
// we search the h264 frame from the buffer which cached the h264 data. // we search the h264 frame from the buffer which cached the h264 data.
// please get h264 raw data from device, it always a encoded frame. // please get h264 raw data from device, it always a encoded frame.
if (!srs_h264_startswith_annexb(p, size - (p - data), pnb_start_code)) { if (!srs_h264_startswith_annexb(p, size - (p - data), pnb_start_code)) {
srs_trace("h264 raw data invalid."); srs_lib_trace("h264 raw data invalid.");
return -1; return -1;
} }
@ -63,7 +63,7 @@ int read_h264_frame(char* data, int size, char** pp, int* pnb_start_code, int fp
*pp = p; *pp = p;
*frame_size = p - *frame; *frame_size = p - *frame;
if (*frame_size <= 0) { if (*frame_size <= 0) {
srs_trace("h264 raw data invalid."); srs_lib_trace("h264 raw data invalid.");
return -1; return -1;
} }
@ -95,32 +95,32 @@ int main(int argc, char** argv)
const char* raw_file = argv[1]; const char* raw_file = argv[1];
const char* rtmp_url = argv[2]; const char* rtmp_url = argv[2];
srs_trace("raw_file=%s, rtmp_url=%s", raw_file, rtmp_url); srs_lib_trace("raw_file=%s, rtmp_url=%s", raw_file, rtmp_url);
// open file // open file
int raw_fd = open(raw_file, O_RDONLY); int raw_fd = open(raw_file, O_RDONLY);
if (raw_fd < 0) { if (raw_fd < 0) {
srs_trace("open h264 raw file %s failed.", raw_fd); srs_lib_trace("open h264 raw file %s failed.", raw_fd);
goto rtmp_destroy; goto rtmp_destroy;
} }
off_t file_size = lseek(raw_fd, 0, SEEK_END); off_t file_size = lseek(raw_fd, 0, SEEK_END);
if (file_size <= 0) { if (file_size <= 0) {
srs_trace("h264 raw file %s empty.", raw_file); srs_lib_trace("h264 raw file %s empty.", raw_file);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("read entirely h264 raw file, size=%dKB", (int)(file_size / 1024)); srs_lib_trace("read entirely h264 raw file, size=%dKB", (int)(file_size / 1024));
char* h264_raw = (char*)malloc(file_size); char* h264_raw = (char*)malloc(file_size);
if (!h264_raw) { if (!h264_raw) {
srs_trace("alloc raw buffer failed for file %s.", raw_file); srs_lib_trace("alloc raw buffer failed for file %s.", raw_file);
goto rtmp_destroy; goto rtmp_destroy;
} }
lseek(raw_fd, 0, SEEK_SET); lseek(raw_fd, 0, SEEK_SET);
ssize_t nb_read = 0; ssize_t nb_read = 0;
if ((nb_read = read(raw_fd, h264_raw, file_size)) != file_size) { if ((nb_read = read(raw_fd, h264_raw, file_size)) != file_size) {
srs_trace("buffer %s failed, expect=%dKB, actual=%dKB.", srs_lib_trace("buffer %s failed, expect=%dKB, actual=%dKB.",
raw_file, (int)(file_size / 1024), (int)(nb_read / 1024)); raw_file, (int)(file_size / 1024), (int)(nb_read / 1024));
goto rtmp_destroy; goto rtmp_destroy;
} }
@ -129,22 +129,22 @@ int main(int argc, char** argv)
srs_rtmp_t rtmp = srs_rtmp_create(rtmp_url); srs_rtmp_t rtmp = srs_rtmp_create(rtmp_url);
if (srs_simple_handshake(rtmp) != 0) { if (srs_simple_handshake(rtmp) != 0) {
srs_trace("simple handshake failed."); srs_lib_trace("simple handshake failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("simple handshake success"); srs_lib_trace("simple handshake success");
if (srs_connect_app(rtmp) != 0) { if (srs_connect_app(rtmp) != 0) {
srs_trace("connect vhost/app failed."); srs_lib_trace("connect vhost/app failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("connect vhost/app success"); srs_lib_trace("connect vhost/app success");
if (srs_publish_stream(rtmp) != 0) { if (srs_publish_stream(rtmp) != 0) {
srs_trace("publish stream failed."); srs_lib_trace("publish stream failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("publish stream success"); srs_lib_trace("publish stream success");
u_int32_t dts = 0; u_int32_t dts = 0;
u_int32_t pts = 0; u_int32_t pts = 0;
@ -161,27 +161,27 @@ int main(int argc, char** argv)
if (read_h264_frame(h264_raw, file_size, &p, &nb_start_code, fps, if (read_h264_frame(h264_raw, file_size, &p, &nb_start_code, fps,
&data, &size, &dts, &pts) < 0 &data, &size, &dts, &pts) < 0
) { ) {
srs_trace("read a frame from file buffer failed."); srs_lib_trace("read a frame from file buffer failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
// send out the h264 packet over RTMP // send out the h264 packet over RTMP
if (srs_write_h264_raw_frames(rtmp, data, size, dts, pts) != 0) { if (srs_write_h264_raw_frames(rtmp, data, size, dts, pts) != 0) {
srs_trace("send h264 raw data failed."); srs_lib_trace("send h264 raw data failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
// 5bits, 7.3.1 NAL unit syntax, // 5bits, 7.3.1 NAL unit syntax,
// H.264-AVC-ISO_IEC_14496-10.pdf, page 44. // H.264-AVC-ISO_IEC_14496-10.pdf, page 44.
u_int8_t nut = (char)data[nb_start_code] & 0x1f; u_int8_t nut = (char)data[nb_start_code] & 0x1f;
srs_trace("sent packet: type=%s, time=%d, size=%d, fps=%d, b[%d]=%#x(%s)", srs_lib_trace("sent packet: type=%s, time=%d, size=%d, fps=%d, b[%d]=%#x(%s)",
srs_type2string(SRS_RTMP_TYPE_VIDEO), dts, size, fps, nb_start_code, (char)data[nb_start_code], srs_type2string(SRS_RTMP_TYPE_VIDEO), dts, size, fps, nb_start_code, (char)data[nb_start_code],
(nut == 7? "SPS":(nut == 8? "PPS":(nut == 5? "I":(nut == 1? "P":"Unknown"))))); (nut == 7? "SPS":(nut == 8? "PPS":(nut == 5? "I":(nut == 1? "P":"Unknown")))));
// @remark, when use encode device, it not need to sleep. // @remark, when use encode device, it not need to sleep.
usleep(1000 / fps * 1000); usleep(1000 / fps * 1000);
} }
srs_trace("h264 raw data completed"); srs_lib_trace("h264 raw data completed");
rtmp_destroy: rtmp_destroy:
srs_rtmp_destroy(rtmp); srs_rtmp_destroy(rtmp);

@ -89,19 +89,19 @@ int main(int argc, char** argv)
} }
} }
srs_trace("input: %s", in_flv_file); srs_lib_trace("input: %s", in_flv_file);
srs_trace("output: %s", out_rtmp_url); srs_lib_trace("output: %s", out_rtmp_url);
if ((flv = srs_flv_open_read(in_flv_file)) == NULL) { if ((flv = srs_flv_open_read(in_flv_file)) == NULL) {
ret = 2; ret = 2;
srs_trace("open flv file failed. ret=%d", ret); srs_lib_trace("open flv file failed. ret=%d", ret);
return ret; return ret;
} }
ortmp = srs_rtmp_create(out_rtmp_url); ortmp = srs_rtmp_create(out_rtmp_url);
ret = proxy(flv, ortmp); ret = proxy(flv, ortmp);
srs_trace("ingest flv to RTMP completed"); srs_lib_trace("ingest flv to RTMP completed");
srs_rtmp_destroy(ortmp); srs_rtmp_destroy(ortmp);
srs_flv_close(flv); srs_flv_close(flv);
@ -118,20 +118,20 @@ int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, u_int32_t* ptimestamp)
int size; int size;
char* data = NULL; char* data = NULL;
srs_trace("start ingest flv to RTMP stream"); srs_lib_trace("start ingest flv to RTMP stream");
for (;;) { for (;;) {
// tag header // tag header
if ((ret = srs_flv_read_tag_header(flv, &type, &size, ptimestamp)) != 0) { if ((ret = srs_flv_read_tag_header(flv, &type, &size, ptimestamp)) != 0) {
if (srs_flv_is_eof(ret)) { if (srs_flv_is_eof(ret)) {
srs_trace("parse completed."); srs_lib_trace("parse completed.");
return 0; return 0;
} }
srs_trace("flv get packet failed. ret=%d", ret); srs_lib_trace("flv get packet failed. ret=%d", ret);
return ret; return ret;
} }
if (size <= 0) { if (size <= 0) {
srs_trace("invalid size=%d", size); srs_lib_trace("invalid size=%d", size);
break; break;
} }
@ -142,10 +142,10 @@ int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, u_int32_t* ptimestamp)
} }
if ((ret = srs_write_packet(ortmp, type, *ptimestamp, data, size)) != 0) { if ((ret = srs_write_packet(ortmp, type, *ptimestamp, data, size)) != 0) {
srs_trace("irtmp get packet failed. ret=%d", ret); srs_lib_trace("irtmp get packet failed. ret=%d", ret);
return ret; return ret;
} }
srs_verbose("ortmp sent packet: type=%s, time=%d, size=%d", srs_lib_verbose("ortmp sent packet: type=%s, time=%d, size=%d",
srs_type2string(type), *ptimestamp, size); srs_type2string(type), *ptimestamp, size);
re_update(re, *ptimestamp); re_update(re, *ptimestamp);
@ -182,22 +182,22 @@ int connect_oc(srs_rtmp_t ortmp)
int ret = 0; int ret = 0;
if ((ret = srs_simple_handshake(ortmp)) != 0) { if ((ret = srs_simple_handshake(ortmp)) != 0) {
srs_trace("ortmp simple handshake failed. ret=%d", ret); srs_lib_trace("ortmp simple handshake failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp simple handshake success"); srs_lib_trace("ortmp simple handshake success");
if ((ret = srs_connect_app(ortmp)) != 0) { if ((ret = srs_connect_app(ortmp)) != 0) {
srs_trace("ortmp connect vhost/app failed. ret=%d", ret); srs_lib_trace("ortmp connect vhost/app failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp connect vhost/app success"); srs_lib_trace("ortmp connect vhost/app success");
if ((ret = srs_publish_stream(ortmp)) != 0) { if ((ret = srs_publish_stream(ortmp)) != 0) {
srs_trace("ortmp publish stream failed. ret=%d", ret); srs_lib_trace("ortmp publish stream failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp publish stream success"); srs_lib_trace("ortmp publish stream success");
return ret; return ret;
} }
@ -209,16 +209,16 @@ int64_t re_create()
// use the starttime to get the deviation // use the starttime to get the deviation
int64_t deviation = re - tools_main_entrance_startup_time; int64_t deviation = re - tools_main_entrance_startup_time;
srs_trace("deviation is %d ms, pulse is %d ms", (int)(deviation), (int)(RE_PULSE_MS)); srs_lib_trace("deviation is %d ms, pulse is %d ms", (int)(deviation), (int)(RE_PULSE_MS));
// so, we adjust time to max(0, deviation) // so, we adjust time to max(0, deviation)
// because the last pulse, we already sleeped // because the last pulse, we already sleeped
int adjust = (int)(deviation); int adjust = (int)(deviation);
if (adjust > 0) { if (adjust > 0) {
srs_trace("adjust re time for %d ms", adjust); srs_lib_trace("adjust re time for %d ms", adjust);
re -= adjust; re -= adjust;
} else { } else {
srs_trace("no need to adjust re time"); srs_lib_trace("no need to adjust re time");
} }
return re; return re;
@ -239,7 +239,7 @@ void re_cleanup(int64_t re, u_int32_t time)
int64_t now = srs_get_time_ms(); int64_t now = srs_get_time_ms();
int64_t diff = time - (now -re); int64_t diff = time - (now -re);
if (diff > 0) { if (diff > 0) {
srs_trace("re_cleanup sleep for the last pulse for %d ms", (int)diff); srs_lib_trace("re_cleanup sleep for the last pulse for %d ms", (int)diff);
usleep(diff * 1000); usleep(diff * 1000);
} }
} }

@ -74,14 +74,14 @@ int main(int argc, char** argv)
} }
} }
srs_trace("input: %s", in_rtmp_url); srs_lib_trace("input: %s", in_rtmp_url);
srs_trace("output: %s", out_rtmp_url); srs_lib_trace("output: %s", out_rtmp_url);
irtmp = srs_rtmp_create(in_rtmp_url); irtmp = srs_rtmp_create(in_rtmp_url);
ortmp = srs_rtmp_create(out_rtmp_url); ortmp = srs_rtmp_create(out_rtmp_url);
ret = proxy(irtmp, ortmp); ret = proxy(irtmp, ortmp);
srs_trace("proxy completed"); srs_lib_trace("proxy completed");
srs_rtmp_destroy(irtmp); srs_rtmp_destroy(irtmp);
srs_rtmp_destroy(ortmp); srs_rtmp_destroy(ortmp);
@ -105,20 +105,20 @@ int proxy(srs_rtmp_t irtmp, srs_rtmp_t ortmp)
return ret; return ret;
} }
srs_trace("start proxy RTMP stream"); srs_lib_trace("start proxy RTMP stream");
for (;;) { for (;;) {
if ((ret = srs_read_packet(irtmp, &type, &timestamp, &data, &size)) != 0) { if ((ret = srs_read_packet(irtmp, &type, &timestamp, &data, &size)) != 0) {
srs_trace("irtmp get packet failed. ret=%d", ret); srs_lib_trace("irtmp get packet failed. ret=%d", ret);
return ret; return ret;
} }
srs_verbose("irtmp got packet: type=%s, time=%d, size=%d", srs_lib_verbose("irtmp got packet: type=%s, time=%d, size=%d",
srs_type2string(type), timestamp, size); srs_type2string(type), timestamp, size);
if ((ret = srs_write_packet(ortmp, type, timestamp, data, size)) != 0) { if ((ret = srs_write_packet(ortmp, type, timestamp, data, size)) != 0) {
srs_trace("irtmp get packet failed. ret=%d", ret); srs_lib_trace("irtmp get packet failed. ret=%d", ret);
return ret; return ret;
} }
srs_verbose("ortmp sent packet: type=%s, time=%d, size=%d", srs_lib_verbose("ortmp sent packet: type=%s, time=%d, size=%d",
srs_type2string(type), timestamp, size); srs_type2string(type), timestamp, size);
} }
@ -130,22 +130,22 @@ int connect_ic(srs_rtmp_t irtmp)
int ret = 0; int ret = 0;
if ((ret = srs_simple_handshake(irtmp)) != 0) { if ((ret = srs_simple_handshake(irtmp)) != 0) {
srs_trace("irtmp simple handshake failed. ret=%d", ret); srs_lib_trace("irtmp simple handshake failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("irtmp simple handshake success"); srs_lib_trace("irtmp simple handshake success");
if ((ret = srs_connect_app(irtmp)) != 0) { if ((ret = srs_connect_app(irtmp)) != 0) {
srs_trace("irtmp connect vhost/app failed. ret=%d", ret); srs_lib_trace("irtmp connect vhost/app failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("irtmp connect vhost/app success"); srs_lib_trace("irtmp connect vhost/app success");
if ((ret = srs_play_stream(irtmp)) != 0) { if ((ret = srs_play_stream(irtmp)) != 0) {
srs_trace("irtmp play stream failed. ret=%d", ret); srs_lib_trace("irtmp play stream failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("irtmp play stream success"); srs_lib_trace("irtmp play stream success");
return ret; return ret;
} }
@ -155,22 +155,22 @@ int connect_oc(srs_rtmp_t ortmp)
int ret = 0; int ret = 0;
if ((ret = srs_simple_handshake(ortmp)) != 0) { if ((ret = srs_simple_handshake(ortmp)) != 0) {
srs_trace("ortmp simple handshake failed. ret=%d", ret); srs_lib_trace("ortmp simple handshake failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp simple handshake success"); srs_lib_trace("ortmp simple handshake success");
if ((ret = srs_connect_app(ortmp)) != 0) { if ((ret = srs_connect_app(ortmp)) != 0) {
srs_trace("ortmp connect vhost/app failed. ret=%d", ret); srs_lib_trace("ortmp connect vhost/app failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp connect vhost/app success"); srs_lib_trace("ortmp connect vhost/app success");
if ((ret = srs_publish_stream(ortmp)) != 0) { if ((ret = srs_publish_stream(ortmp)) != 0) {
srs_trace("ortmp publish stream failed. ret=%d", ret); srs_lib_trace("ortmp publish stream failed. ret=%d", ret);
return ret; return ret;
} }
srs_trace("ortmp publish stream success"); srs_lib_trace("ortmp publish stream success");
return ret; return ret;
} }

@ -44,26 +44,26 @@ int main(int argc, char** argv)
exit(-1); exit(-1);
} }
srs_trace("rtmp url: %s", argv[1]); srs_lib_trace("rtmp url: %s", argv[1]);
srs_rtmp_t rtmp = srs_rtmp_create(argv[1]); srs_rtmp_t rtmp = srs_rtmp_create(argv[1]);
if (srs_simple_handshake(rtmp) != 0) { if (srs_simple_handshake(rtmp) != 0) {
srs_trace("simple handshake failed."); srs_lib_trace("simple handshake failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("simple handshake success"); srs_lib_trace("simple handshake success");
if (srs_connect_app(rtmp) != 0) { if (srs_connect_app(rtmp) != 0) {
srs_trace("connect vhost/app failed."); srs_lib_trace("connect vhost/app failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("connect vhost/app success"); srs_lib_trace("connect vhost/app success");
if (srs_play_stream(rtmp) != 0) { if (srs_play_stream(rtmp) != 0) {
srs_trace("play stream failed."); srs_lib_trace("play stream failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("play stream success"); srs_lib_trace("play stream success");
for (;;) { for (;;) {
int type, size; int type, size;
@ -73,7 +73,7 @@ int main(int argc, char** argv)
if (srs_read_packet(rtmp, &type, &timestamp, &data, &size) != 0) { if (srs_read_packet(rtmp, &type, &timestamp, &data, &size) != 0) {
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("got packet: type=%s, time=%d, size=%d", srs_lib_trace("got packet: type=%s, time=%d, size=%d",
srs_type2string(type), timestamp, size); srs_type2string(type), timestamp, size);
free(data); free(data);

@ -47,31 +47,31 @@ int main(int argc, char** argv)
// warn it . // warn it .
// @see: https://github.com/winlinvip/simple-rtmp-server/issues/126 // @see: https://github.com/winlinvip/simple-rtmp-server/issues/126
srs_trace("\033[33m%s\033[0m", srs_lib_trace("\033[33m%s\033[0m",
"[warning] it's only a sample to use librtmp. " "[warning] it's only a sample to use librtmp. "
"please never use it to publish and test forward/transcode/edge/HLS whatever. " "please never use it to publish and test forward/transcode/edge/HLS whatever. "
"you should refer to this tool to use the srs-librtmp to publish the real media stream." "you should refer to this tool to use the srs-librtmp to publish the real media stream."
"read about: https://github.com/winlinvip/simple-rtmp-server/issues/126"); "read about: https://github.com/winlinvip/simple-rtmp-server/issues/126");
srs_trace("rtmp url: %s", argv[1]); srs_lib_trace("rtmp url: %s", argv[1]);
srs_rtmp_t rtmp = srs_rtmp_create(argv[1]); srs_rtmp_t rtmp = srs_rtmp_create(argv[1]);
if (srs_simple_handshake(rtmp) != 0) { if (srs_simple_handshake(rtmp) != 0) {
srs_trace("simple handshake failed."); srs_lib_trace("simple handshake failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("simple handshake success"); srs_lib_trace("simple handshake success");
if (srs_connect_app(rtmp) != 0) { if (srs_connect_app(rtmp) != 0) {
srs_trace("connect vhost/app failed."); srs_lib_trace("connect vhost/app failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("connect vhost/app success"); srs_lib_trace("connect vhost/app success");
if (srs_publish_stream(rtmp) != 0) { if (srs_publish_stream(rtmp) != 0) {
srs_trace("publish stream failed."); srs_lib_trace("publish stream failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("publish stream success"); srs_lib_trace("publish stream success");
u_int32_t timestamp = 0; u_int32_t timestamp = 0;
for (;;) { for (;;) {
@ -84,7 +84,7 @@ int main(int argc, char** argv)
if (srs_write_packet(rtmp, type, timestamp, data, size) != 0) { if (srs_write_packet(rtmp, type, timestamp, data, size) != 0) {
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_trace("sent packet: type=%s, time=%d, size=%d", srs_lib_trace("sent packet: type=%s, time=%d, size=%d",
srs_type2string(type), timestamp, size); srs_type2string(type), timestamp, size);
usleep(40 * 1000); usleep(40 * 1000);

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version // current release version
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 0 #define VERSION_MINOR 0
#define VERSION_REVISION 10 #define VERSION_REVISION 12
// server info. // server info.
#define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_KEY "SRS"
#define RTMP_SIG_SRS_ROLE "origin/edge server" #define RTMP_SIG_SRS_ROLE "origin/edge server"

@ -30,10 +30,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <sstream> #include <sstream>
using namespace std; using namespace std;
// undefine the log of librtmp for the srs use its log.
#undef srs_trace
#undef srs_verbose
#include <srs_kernel_error.hpp> #include <srs_kernel_error.hpp>
#include <srs_protocol_rtmp.hpp> #include <srs_protocol_rtmp.hpp>
#include <srs_lib_simple_socket.hpp> #include <srs_lib_simple_socket.hpp>
@ -48,7 +44,7 @@ using namespace std;
#include <srs_kernel_file.hpp> #include <srs_kernel_file.hpp>
#include <srs_lib_bandwidth.hpp> #include <srs_lib_bandwidth.hpp>
// if user want to define log, define the folowing macro. // if want to use your log, define the folowing macro.
#ifndef SRS_RTMP_USER_DEFINED_LOG #ifndef SRS_RTMP_USER_DEFINED_LOG
// kernel module. // kernel module.
ISrsLog* _srs_log = new ISrsLog(); ISrsLog* _srs_log = new ISrsLog();

@ -237,8 +237,8 @@ extern int64_t srs_get_nrecv_bytes(srs_rtmp_t rtmp);
// log to console, for use srs-librtmp application. // log to console, for use srs-librtmp application.
extern const char* srs_format_time(); extern const char* srs_format_time();
#define srs_trace(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") #define srs_lib_trace(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n")
#define srs_verbose(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") #define srs_lib_verbose(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n")
/************************************************************* /*************************************************************
************************************************************** **************************************************************

Loading…
Cancel
Save