From db7ddfd51021dedf502b732594e396f6092d5f67 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 10 Mar 2015 12:50:27 +0800 Subject: [PATCH] fix #155, #135, support osx(darwin) for mac pro. 2.0.137. --- README.md | 5 +- trunk/3rdparty/patches/2.http.parser.patch | 17 + trunk/auto/auto_headers.sh | 22 +- trunk/auto/depends.sh | 195 ++++- trunk/auto/options.sh | 36 +- trunk/configure | 8 +- trunk/etc/init.d/srs | 10 +- .../srs_xcode.xcodeproj/project.pbxproj | 783 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 23287 bytes trunk/ide/srs_xcode/srs_xcode/readme.txt | 1 + trunk/src/app/srs_app_st.cpp | 4 + trunk/src/core/srs_core.hpp | 2 +- trunk/src/kernel/srs_kernel_utility.cpp | 2 + trunk/src/main/srs_main_server.cpp | 19 +- trunk/src/protocol/srs_rtmp_handshake.cpp | 10 +- 16 files changed, 1072 insertions(+), 49 deletions(-) create mode 100644 trunk/3rdparty/patches/2.http.parser.patch create mode 100644 trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.pbxproj create mode 100644 trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/xcuserdata/winlin.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 trunk/ide/srs_xcode/srs_xcode/readme.txt diff --git a/README.md b/README.md index 0985064c18..39341c337d 100755 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ flv/ts/mp3/aac streaming for user prefered. 1. Multiple feature: transcode, forward, ingest, http hooks, dvr, hls, rtsp, http streaming, http api, refer, log, bandwith test and srs-librtmp. 1. Best maintainess: simple arch over state-threads(coroutine), single thread, single process -and only linux platform, common server x86-64/i386/arm/mips cpus, rich comments, strictly +and for linux/osx platform, common server x86-64/i386/arm/mips cpus, rich comments, strictly follows RTMP/HLS/RTSP spec. 1. Easy to use: both English and Chinese wiki, typically config files in trunk/conf, traceable and session based log, linux service script and install script. @@ -37,7 +37,7 @@ Enjoy it! SRS(SIMPLE RTMP Server) over state-threads created in 2013.10. -SRS delivers rtmp/hls/http live on x86/x64/arm/mips linux, +SRS delivers rtmp/hls/http live on x86/x64/arm/mips linux/osx, supports origin/edge/vhost and transcode/ingest and dvr/forward and http-api/http-callback/reload, introduces tracable session-oriented log, exports client srs-librtmp, @@ -550,6 +550,7 @@ Supported operating systems and hardware: ### SRS 2.0 history +* v2.0, 2015-03-10, fix [#155](https://github.com/winlinvip/simple-rtmp-server/issues/155), support osx(darwin) for mac pro. 2.0.137. * v2.0, 2015-03-08, fix [#316](https://github.com/winlinvip/simple-rtmp-server/issues/316), http api provides stream/vhost/srs/server bytes, codec and count. 2.0.136. * v2.0, 2015-03-08, fix [#310](https://github.com/winlinvip/simple-rtmp-server/issues/310), refine aac LC, support aac HE/HEv2. 2.0.134. * v2.0, 2015-03-06, for [#322](https://github.com/winlinvip/simple-rtmp-server/issues/322), fix http-flv stream bug, support multiple streams. 2.0.133. diff --git a/trunk/3rdparty/patches/2.http.parser.patch b/trunk/3rdparty/patches/2.http.parser.patch new file mode 100644 index 0000000000..596d5972b8 --- /dev/null +++ b/trunk/3rdparty/patches/2.http.parser.patch @@ -0,0 +1,17 @@ +diff -r -c ./Makefile ../http-parser-2.1/Makefile +*** ./Makefile Tue Mar 10 10:44:19 2015 +--- ../http-parser-2.1/Makefile Wed Mar 27 06:35:20 2013 +*************** +*** 12,22 **** + CFLAGS_FAST = $(CFLAGS) -O3 $(CFLAGS_FAST_EXTRA) + CFLAGS_LIB = $(CFLAGS_FAST) -fPIC + +- # patch by winlin +- CPPFLAGS_FAST = $(CPPFLAGS_DEBUG) +- CFLAGS_FAST = $(CFLAGS_DEBUG) +- CFLAGS_LIB = $(CFLAGS_FAST) -fPIC +- + test: test_g test_fast + ./test_g + ./test_fast +--- 12,17 ---- diff --git a/trunk/auto/auto_headers.sh b/trunk/auto/auto_headers.sh index 462632a441..c559c3dfba 100755 --- a/trunk/auto/auto_headers.sh +++ b/trunk/auto/auto_headers.sh @@ -16,8 +16,28 @@ echo "#define SRS_AUTO_BUILD_DATE \"`date \"+%Y-%m-%d %H:%M:%S\"`\"" >> $SRS_AUT echo "#define SRS_AUTO_UNAME \"`uname -a`\"" >> $SRS_AUTO_HEADERS_H echo "#define SRS_AUTO_USER_CONFIGURE \"${SRS_AUTO_USER_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H echo "#define SRS_AUTO_CONFIGURE \"${SRS_AUTO_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H +echo "" >> $SRS_AUTO_HEADERS_H + +# export the preset. +if [ $SRS_OSX = YES ]; then + echo "#define SRS_OSX" >> $SRS_AUTO_HEADERS_H +fi +if [ $SRS_X86_X64 = YES ]; then + echo "#define SRS_X86_X64" >> $SRS_AUTO_HEADERS_H +fi +if [ $SRS_ARM_UBUNTU12 = YES ]; then + echo "#define SRS_ARM_UBUNTU12" >> $SRS_AUTO_HEADERS_H +fi +if [ $SRS_MIPS_UBUNTU12 = YES ]; then + echo "#define SRS_MIPS_UBUNTU12" >> $SRS_AUTO_HEADERS_H +fi +if [ $SRS_PI = YES ]; then + echo "#define SRS_PI" >> $SRS_AUTO_HEADERS_H +fi +if [ $SRS_CUBIE = YES ]; then + echo "#define SRS_CUBIE" >> $SRS_AUTO_HEADERS_H +fi -# new empty line to auto headers file. echo "" >> $SRS_AUTO_HEADERS_H ##################################################################################### diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh index e7198aa765..97db9836ee 100755 --- a/trunk/auto/depends.sh +++ b/trunk/auto/depends.sh @@ -41,6 +41,24 @@ function Ubuntu_prepare() return 0; fi fi + + # for arm, install the cross build tool chain. + if [ $SRS_ARM_UBUNTU12 = YES ]; then + $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi" + require_sudoer "sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi" + sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi success" + fi + fi + + # for mips, user must installed the tool chain. + if [ $SRS_MIPS_UBUNTU12 = YES ]; then + $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "user must install the tool chain: $SrsArmCC" + return 2 + fi + fi OS_IS_UBUNTU=YES echo "Ubuntu detected, install tools if needed" @@ -110,24 +128,6 @@ function Ubuntu_prepare() fi fi - # for arm, install the cross build tool chain. - if [ $SRS_ARM_UBUNTU12 = YES ]; then - $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then - echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi" - require_sudoer "sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi" - sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi - echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi success" - fi - fi - - # for mips, user must installed the tool chain. - if [ $SRS_MIPS_UBUNTU12 = YES ]; then - $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then - echo "user must install the tool chain: $SrsArmCC" - return 2 - fi - fi - echo "Ubuntu install tools success" return 0 } @@ -144,6 +144,12 @@ function Centos_prepare() if [[ ! -f /etc/redhat-release ]]; then return 0; fi + + # for arm, install the cross build tool chain. + if [ $SRS_EMBEDED_CPU = YES ]; then + echo "embeded(arm/mips) is invalid for CentOS" + return 1 + fi OS_IS_CENTOS=YES echo "Centos detected, install tools if needed" @@ -220,18 +226,137 @@ function Centos_prepare() fi fi + echo "Centos install tools success" + return 0 +} +# donot prepare tools, for srs-librtmp depends only gcc and g++. +if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then + Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi +fi +##################################################################################### +# for Centos, auto install tools by yum +##################################################################################### +OS_IS_OSX=NO +function OSX_prepare() +{ + uname -s|grep Darwin >/dev/null 2>&1 + ret=$?; if [[ 0 -ne $ret ]]; then + if [ $SRS_OSX = YES ]; then + echo "OSX check failed, actual is `uname -s`" + exit 1; + fi + return 0; + fi + # for arm, install the cross build tool chain. if [ $SRS_EMBEDED_CPU = YES ]; then - echo "embeded(arm/mips) is invalid for CentOS" + echo "embeded(arm/mips) is invalid for OSX" return 1 fi + + OS_IS_OSX=YES + echo "OSX detected, install tools if needed" - echo "Centos install tools success" + brew --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install brew" + echo "ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"" + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install brew success" + fi + + gcc --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install gcc" + echo "brew install gcc" + brew install gcc; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install gcc success" + fi + + g++ --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install gcc-c++" + echo "brew install gcc-c++" + brew install gcc-c++; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install gcc-c++ success" + fi + + make --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install make" + echo "brew install make" + brew install make; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install make success" + fi + + patch --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install patch" + echo "brew install patch" + brew install patch; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install patch success" + fi + + unzip --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install unzip" + echo "brew install unzip" + brew install unzip; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install unzip success" + fi + + if [ $SRS_FFMPEG_TOOL = YES ]; then + automake --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install automake" + echo "brew install automake" + brew install automake; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install automake success" + fi + + autoconf --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install autoconf" + echo "brew install autoconf" + brew install autoconf; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install autoconf success" + fi + + libtool --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then + echo "install libtool" + echo "brew install libtool" + brew install libtool; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install libtool success" + fi + + if [[ ! -f /usr/include/pcre.h ]]; then + echo "install pcre-devel" + echo "brew install pcre-devel" + brew install pcre-devel; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install pcre-devel success" + fi + + if [[ ! -f /usr/include/zlib.h ]]; then + echo "install zlib-devel" + echo "brew install zlib-devel" + brew install zlib-devel; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi + echo "install zlib-devel success" + fi + fi + + echo "OSX install tools success" return 0 } # donot prepare tools, for srs-librtmp depends only gcc and g++. if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then - Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi + OSX_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "OSX prepare failed, ret=$ret"; exit $ret; fi +fi +# requires the osx when os +if [ $OS_IS_OSX = YES ]; then + if [ $SRS_OSX = NO ]; then + echo "OSX detected, must specifies the --osx" + exit 1 + fi + if [ $SRS_HTTP_API = YES ]; then + echo "OSX does not support http-api, use --without-http-api" + exit 1 + fi + if [ $SRS_STAT = YES ]; then + echo "OSX does not support stat, use --without-stat" + exit 1 + fi fi ##################################################################################### @@ -239,7 +364,11 @@ fi ##################################################################################### if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then # check the arm flag file, if flag changed, need to rebuild the st. - _ST_MAKE=linux-debug + _ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_EPOLL" + # for osx, use darwin for st, donot use epoll. + if [ $OS_IS_OSX = YES ]; then + _ST_MAKE=darwin-debug && _ST_EXTRA_CFLAGS="" + fi # memory leak for linux-optimized # @see: https://github.com/winlinvip/simple-rtmp-server/issues/197 if [ $SRS_EMBEDED_CPU = YES ]; then @@ -253,9 +382,9 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then ( rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 && - patch -p0 < ../../3rdparty/patches/1.st.arm.patch && + patch -p0 -R < ../../3rdparty/patches/1.st.arm.patch && make CC=${SrsArmCC} AR=${SrsArmAR} LD=${SrsArmLD} RANDLIB=${SrsArmRANDLIB} \ - EXTRA_CFLAGS="-DMD_HAVE_EPOLL" ${_ST_MAKE} && + EXTRA_CFLAGS=${_ST_EXTRA_CFLAGS} ${_ST_MAKE} && cd .. && rm -rf st && ln -sf st-1.9/obj st && cd .. && touch ${SRS_OBJS}/_flag.st.arm.tmp ) @@ -268,7 +397,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then ( rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 && - make ${_ST_MAKE} EXTRA_CFLAGS="-DMD_HAVE_EPOLL" && + make ${_ST_MAKE} ${_ST_EXTRA_CFLAGS} && cd .. && rm -rf st && ln -sf st-1.9/obj st && cd .. && rm -f ${SRS_OBJS}/_flag.st.arm.tmp ) @@ -293,6 +422,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then ( rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip && cd http-parser-2.1 && + patch -p0 -R < ../../3rdparty/patches/2.http.parser.patch && sed -i "s/CPPFLAGS_FAST +=.*$/CPPFLAGS_FAST = \$\(CPPFLAGS_DEBUG\)/g" Makefile && sed -i "s/CFLAGS_FAST =.*$/CFLAGS_FAST = \$\(CFLAGS_DEBUG\)/g" Makefile && make CC=${SrsArmCC} AR=${SrsArmAR} package && @@ -309,8 +439,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then ( rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip && cd http-parser-2.1 && - sed -i "s/CPPFLAGS_FAST +=.*$/CPPFLAGS_FAST = \$\(CPPFLAGS_DEBUG\)/g" Makefile && - sed -i "s/CFLAGS_FAST =.*$/CFLAGS_FAST = \$\(CFLAGS_DEBUG\)/g" Makefile && + patch -p0 -R < ../../3rdparty/patches/2.http.parser.patch && make package && cd .. && rm -rf hp && ln -sf http-parser-2.1 hp && cd .. && rm -f ${SRS_OBJS}/_flag.st.hp.tmp @@ -402,7 +531,7 @@ if [ $SRS_HTTP_CALLBACK = YES ]; then if [[ -f ${SRS_OBJS}/CherryPy-3.2.4/setup.py ]]; then echo "CherryPy-3.2.4 is ok."; else - require_sudoer "configure --with-http-callback" + require_sudoer "install CherryPy-3.2.4" echo "install CherryPy-3.2.4"; ( sudo rm -rf ${SRS_OBJS}/CherryPy-3.2.4 && cd ${SRS_OBJS} && @@ -454,9 +583,11 @@ fi ##################################################################################### # extra configure options CONFIGURE_TOOL="./config" -EXTRA_CONFIGURE="" if [ $SRS_EMBEDED_CPU = YES ]; then - CONFIGURE_TOOL="./Configure" + CONFIGURE_TOOL="./Configure linux-armv4" +fi +if [ $SRS_OSX = YES ]; then + CONFIGURE_TOOL="./Configure darwin64-`uname -m`-cc" fi # @see http://www.openssl.org/news/secadv_20140407.txt # Affected users should upgrade to OpenSSL 1.0.1g. Users unable to immediately @@ -475,7 +606,7 @@ if [ $SRS_SSL = YES ]; then ( rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} && unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f && - $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared no-asm linux-armv4 -DOPENSSL_NO_HEARTBEATS ${EXTRA_CONFIGURE} && + $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared no-asm && make CC=${SrsArmCC} GCC=${SrsArmGCC} AR="${SrsArmAR} r" \ LD=${SrsArmLD} LINK=${SrsArmGCC} RANDLIB=${SrsArmRANDLIB} && make install_sw && @@ -492,7 +623,7 @@ if [ $SRS_SSL = YES ]; then ( rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} && unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f && - $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared -DOPENSSL_NO_HEARTBEATS ${EXTRA_CONFIGURE} && + $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared && make && make install_sw && cd .. && rm -rf openssl && ln -sf openssl-1.0.1f/_release openssl && cd .. && rm -f ${SRS_OBJS}/_flag.ssl.arm.tmp diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh index adec4828aa..c37232b399 100755 --- a/trunk/auto/options.sh +++ b/trunk/auto/options.sh @@ -68,6 +68,8 @@ SRS_EXPORT_LIBRTMP_SINGLE=NO # presets # for x86/x64 pc/servers SRS_X86_X64=NO +# for osx system +SRS_OSX=NO # armhf(v7cpu) built on ubuntu12 SRS_ARM_UBUNTU12=NO # mips built on ubuntu12 @@ -166,6 +168,7 @@ Options: Presets: --x86-x64 [default] for x86/x64 cpu, common pc and servers. + --osx for osx(darwin) system to build SRS. --pi for raspberry-pi(directly build), open features hls/ssl/static. --cubie for cubieboard(directly build), open features except ffmpeg/nginx. --arm alias for --with-arm-ubuntu12, for ubuntu12, arm crossbuild @@ -260,6 +263,7 @@ function parse_user_option() { --log-trace) SRS_LOG_TRACE=YES ;; --x86-x64) SRS_X86_X64=YES ;; + --osx) SRS_OSX=YES ;; --arm) SRS_ARM_UBUNTU12=YES ;; --mips) SRS_MIPS_UBUNTU12=YES ;; --pi) SRS_PI=YES ;; @@ -331,7 +335,9 @@ function apply_user_presets() { if [ $SRS_PI = NO ]; then if [ $SRS_CUBIE = NO ]; then if [ $SRS_X86_X64 = NO ]; then - SRS_X86_X64=YES; opt="--x86-x64 $opt"; + if [ $SRS_OSX = NO ]; then + SRS_X86_X64=YES; opt="--x86-x64 $opt"; + fi fi fi fi @@ -551,7 +557,7 @@ function apply_user_presets() { SRS_HTTP_CALLBACK=YES SRS_HTTP_SERVER=YES SRS_STREAM_CASTER=YES - SRS_HTTP_API=YES + SRS_HTTP_API=NO SRS_LIBRTMP=YES SRS_RESEARCH=NO SRS_UTEST=YES @@ -563,6 +569,32 @@ function apply_user_presets() { SRS_STATIC=NO fi + # for osx(darwin) + if [ $SRS_OSX = YES ]; then + SRS_HLS=YES + SRS_DVR=YES + SRS_NGINX=NO + SRS_SSL=YES + SRS_FFMPEG_TOOL=NO + SRS_TRANSCODE=YES + SRS_INGEST=YES + SRS_STAT=NO + SRS_HTTP_PARSER=YES + SRS_HTTP_CALLBACK=YES + SRS_HTTP_SERVER=YES + SRS_STREAM_CASTER=YES + SRS_HTTP_API=NO + SRS_LIBRTMP=YES + SRS_RESEARCH=NO + SRS_UTEST=NO + SRS_GPERF=NO + SRS_GPERF_MC=NO + SRS_GPERF_MP=NO + SRS_GPERF_CP=NO + SRS_GPROF=NO + SRS_STATIC=NO + fi + # if dev specified, open features if possible. if [ $SRS_DEV = YES ]; then SRS_HLS=YES diff --git a/trunk/configure b/trunk/configure index 8ca5d357d6..7c8d91935f 100755 --- a/trunk/configure +++ b/trunk/configure @@ -11,10 +11,10 @@ mkdir -p ${SRS_OBJS} ##################################################################################### # linux shell color support. -RED="\\e[31m" -GREEN="\\e[32m" -YELLOW="\\e[33m" -BLACK="\\e[0m" +RED="\\033[31m" +GREEN="\\033[32m" +YELLOW="\\033[33m" +BLACK="\\033[0m" ##################################################################################### # parse user options, set the variables like: diff --git a/trunk/etc/init.d/srs b/trunk/etc/init.d/srs index f490396495..f25d8bb9b8 100755 --- a/trunk/etc/init.d/srs +++ b/trunk/etc/init.d/srs @@ -21,11 +21,11 @@ DEFAULT_LOG_FILE='./objs/srs.log' ######################################################################## # utility functions ######################################################################## -RED="\\e[31m" -GREEN="\\e[32m" -YELLOW="\\e[33m" -BLACK="\\e[0m" -POS="\\e[60G" +RED="\\033[31m" +GREEN="\\033[32m" +YELLOW="\\033[33m" +BLACK="\\033[0m" +POS="\\033[60G" ok_msg() { echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" diff --git a/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.pbxproj b/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..6cda702321 --- /dev/null +++ b/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.pbxproj @@ -0,0 +1,783 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 3C1231F61AAE652D00CE8F6C /* srs_core_autofree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F01AAE652C00CE8F6C /* srs_core_autofree.cpp */; }; + 3C1231F71AAE652D00CE8F6C /* srs_core_performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F21AAE652C00CE8F6C /* srs_core_performance.cpp */; }; + 3C1231F81AAE652D00CE8F6C /* srs_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */; }; + 3C1232061AAE812C00CE8F6C /* srs_main_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232051AAE812C00CE8F6C /* srs_main_server.cpp */; }; + 3C1232201AAE814D00CE8F6C /* srs_kernel_aac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232081AAE814D00CE8F6C /* srs_kernel_aac.cpp */; }; + 3C1232211AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320A1AAE814D00CE8F6C /* srs_kernel_buffer.cpp */; }; + 3C1232221AAE814D00CE8F6C /* srs_kernel_codec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320C1AAE814D00CE8F6C /* srs_kernel_codec.cpp */; }; + 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320E1AAE814D00CE8F6C /* srs_kernel_consts.cpp */; }; + 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232101AAE814D00CE8F6C /* srs_kernel_error.cpp */; }; + 3C1232251AAE814D00CE8F6C /* srs_kernel_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232121AAE814D00CE8F6C /* srs_kernel_file.cpp */; }; + 3C1232261AAE814D00CE8F6C /* srs_kernel_flv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */; }; + 3C1232271AAE814D00CE8F6C /* srs_kernel_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */; }; + 3C1232281AAE814D00CE8F6C /* srs_kernel_mp3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */; }; + 3C1232291AAE814D00CE8F6C /* srs_kernel_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321A1AAE814D00CE8F6C /* srs_kernel_stream.cpp */; }; + 3C12322A1AAE814D00CE8F6C /* srs_kernel_ts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321C1AAE814D00CE8F6C /* srs_kernel_ts.cpp */; }; + 3C12322B1AAE814D00CE8F6C /* srs_kernel_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321E1AAE814D00CE8F6C /* srs_kernel_utility.cpp */; }; + 3C1232411AAE81A400CE8F6C /* srs_raw_avc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12322D1AAE81A400CE8F6C /* srs_raw_avc.cpp */; }; + 3C1232421AAE81A400CE8F6C /* srs_rtmp_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12322F1AAE81A400CE8F6C /* srs_rtmp_amf0.cpp */; }; + 3C1232431AAE81A400CE8F6C /* srs_rtmp_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232311AAE81A400CE8F6C /* srs_rtmp_buffer.cpp */; }; + 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232331AAE81A400CE8F6C /* srs_rtmp_handshake.cpp */; }; + 3C1232451AAE81A400CE8F6C /* srs_rtmp_io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232351AAE81A400CE8F6C /* srs_rtmp_io.cpp */; }; + 3C1232461AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232371AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp */; }; + 3C1232471AAE81A400CE8F6C /* srs_rtmp_sdk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232391AAE81A400CE8F6C /* srs_rtmp_sdk.cpp */; }; + 3C1232481AAE81A400CE8F6C /* srs_rtmp_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323B1AAE81A400CE8F6C /* srs_rtmp_stack.cpp */; }; + 3C1232491AAE81A400CE8F6C /* srs_rtmp_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323D1AAE81A400CE8F6C /* srs_rtmp_utility.cpp */; }; + 3C12324A1AAE81A400CE8F6C /* srs_rtsp_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323F1AAE81A400CE8F6C /* srs_rtsp_stack.cpp */; }; + 3C1232941AAE81D900CE8F6C /* srs_app_bandwidth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12324C1AAE81D900CE8F6C /* srs_app_bandwidth.cpp */; }; + 3C1232951AAE81D900CE8F6C /* srs_app_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12324E1AAE81D900CE8F6C /* srs_app_config.cpp */; }; + 3C1232961AAE81D900CE8F6C /* srs_app_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232501AAE81D900CE8F6C /* srs_app_conn.cpp */; }; + 3C1232971AAE81D900CE8F6C /* srs_app_dvr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232521AAE81D900CE8F6C /* srs_app_dvr.cpp */; }; + 3C1232981AAE81D900CE8F6C /* srs_app_edge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232541AAE81D900CE8F6C /* srs_app_edge.cpp */; }; + 3C1232991AAE81D900CE8F6C /* srs_app_empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232561AAE81D900CE8F6C /* srs_app_empty.cpp */; }; + 3C12329A1AAE81D900CE8F6C /* srs_app_encoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232581AAE81D900CE8F6C /* srs_app_encoder.cpp */; }; + 3C12329B1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325A1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp */; }; + 3C12329C1AAE81D900CE8F6C /* srs_app_forward.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325C1AAE81D900CE8F6C /* srs_app_forward.cpp */; }; + 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325E1AAE81D900CE8F6C /* srs_app_heartbeat.cpp */; }; + 3C12329E1AAE81D900CE8F6C /* srs_app_hls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232601AAE81D900CE8F6C /* srs_app_hls.cpp */; }; + 3C12329F1AAE81D900CE8F6C /* srs_app_http_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232621AAE81D900CE8F6C /* srs_app_http_api.cpp */; }; + 3C1232A01AAE81D900CE8F6C /* srs_app_http_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232641AAE81D900CE8F6C /* srs_app_http_client.cpp */; }; + 3C1232A11AAE81D900CE8F6C /* srs_app_http_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232661AAE81D900CE8F6C /* srs_app_http_conn.cpp */; }; + 3C1232A21AAE81D900CE8F6C /* srs_app_http_hooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232681AAE81D900CE8F6C /* srs_app_http_hooks.cpp */; }; + 3C1232A31AAE81D900CE8F6C /* srs_app_http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326A1AAE81D900CE8F6C /* srs_app_http.cpp */; }; + 3C1232A41AAE81D900CE8F6C /* srs_app_ingest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326C1AAE81D900CE8F6C /* srs_app_ingest.cpp */; }; + 3C1232A51AAE81D900CE8F6C /* srs_app_json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326E1AAE81D900CE8F6C /* srs_app_json.cpp */; }; + 3C1232A61AAE81D900CE8F6C /* srs_app_kbps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232701AAE81D900CE8F6C /* srs_app_kbps.cpp */; }; + 3C1232A71AAE81D900CE8F6C /* srs_app_listener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232721AAE81D900CE8F6C /* srs_app_listener.cpp */; }; + 3C1232A81AAE81D900CE8F6C /* srs_app_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232741AAE81D900CE8F6C /* srs_app_log.cpp */; }; + 3C1232A91AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232761AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp */; }; + 3C1232AA1AAE81D900CE8F6C /* srs_app_pithy_print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232781AAE81D900CE8F6C /* srs_app_pithy_print.cpp */; }; + 3C1232AB1AAE81D900CE8F6C /* srs_app_recv_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327A1AAE81D900CE8F6C /* srs_app_recv_thread.cpp */; }; + 3C1232AC1AAE81D900CE8F6C /* srs_app_refer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327C1AAE81D900CE8F6C /* srs_app_refer.cpp */; }; + 3C1232AD1AAE81D900CE8F6C /* srs_app_reload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327E1AAE81D900CE8F6C /* srs_app_reload.cpp */; }; + 3C1232AE1AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232801AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp */; }; + 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232821AAE81D900CE8F6C /* srs_app_rtsp.cpp */; }; + 3C1232B01AAE81D900CE8F6C /* srs_app_security.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232841AAE81D900CE8F6C /* srs_app_security.cpp */; }; + 3C1232B11AAE81D900CE8F6C /* srs_app_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232861AAE81D900CE8F6C /* srs_app_server.cpp */; }; + 3C1232B21AAE81D900CE8F6C /* srs_app_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232881AAE81D900CE8F6C /* srs_app_source.cpp */; }; + 3C1232B31AAE81D900CE8F6C /* srs_app_st_socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328A1AAE81D900CE8F6C /* srs_app_st_socket.cpp */; }; + 3C1232B41AAE81D900CE8F6C /* srs_app_st.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328C1AAE81D900CE8F6C /* srs_app_st.cpp */; }; + 3C1232B51AAE81D900CE8F6C /* srs_app_statistic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328E1AAE81D900CE8F6C /* srs_app_statistic.cpp */; }; + 3C1232B61AAE81D900CE8F6C /* srs_app_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232901AAE81D900CE8F6C /* srs_app_thread.cpp */; }; + 3C1232B71AAE81D900CE8F6C /* srs_app_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232921AAE81D900CE8F6C /* srs_app_utility.cpp */; }; + 3C1232D31AAEA56B00CE8F6C /* libst.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232D21AAEA56B00CE8F6C /* libst.a */; }; + 3C1232E91AAEA5D000CE8F6C /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */; }; + 3C1232EA1AAEA5D000CE8F6C /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232E81AAEA5D000CE8F6C /* libssl.a */; }; + 3C1232ED1AAEA70F00CE8F6C /* libhttp_parser.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 3C1231E31AAE64A400CE8F6C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 3C1231E51AAE64A400CE8F6C /* srs_xcode */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; includeInIndex = 0; path = srs_xcode; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C1231F01AAE652C00CE8F6C /* srs_core_autofree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_core_autofree.cpp; path = ../../../src/core/srs_core_autofree.cpp; sourceTree = ""; }; + 3C1231F11AAE652C00CE8F6C /* srs_core_autofree.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_core_autofree.hpp; path = ../../../src/core/srs_core_autofree.hpp; sourceTree = ""; }; + 3C1231F21AAE652C00CE8F6C /* srs_core_performance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_core_performance.cpp; path = ../../../src/core/srs_core_performance.cpp; sourceTree = ""; }; + 3C1231F31AAE652C00CE8F6C /* srs_core_performance.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_core_performance.hpp; path = ../../../src/core/srs_core_performance.hpp; sourceTree = ""; }; + 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_core.cpp; path = ../../../src/core/srs_core.cpp; sourceTree = ""; }; + 3C1231F51AAE652D00CE8F6C /* srs_core.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_core.hpp; path = ../../../src/core/srs_core.hpp; sourceTree = ""; }; + 3C1231FB1AAE673100CE8F6C /* srs_auto_headers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_auto_headers.hpp; path = ../../../objs/srs_auto_headers.hpp; sourceTree = ""; }; + 3C1232051AAE812C00CE8F6C /* srs_main_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_main_server.cpp; path = ../../../src/main/srs_main_server.cpp; sourceTree = ""; }; + 3C1232081AAE814D00CE8F6C /* srs_kernel_aac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_aac.cpp; path = ../../../src/kernel/srs_kernel_aac.cpp; sourceTree = ""; }; + 3C1232091AAE814D00CE8F6C /* srs_kernel_aac.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_aac.hpp; path = ../../../src/kernel/srs_kernel_aac.hpp; sourceTree = ""; }; + 3C12320A1AAE814D00CE8F6C /* srs_kernel_buffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_buffer.cpp; path = ../../../src/kernel/srs_kernel_buffer.cpp; sourceTree = ""; }; + 3C12320B1AAE814D00CE8F6C /* srs_kernel_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_buffer.hpp; path = ../../../src/kernel/srs_kernel_buffer.hpp; sourceTree = ""; }; + 3C12320C1AAE814D00CE8F6C /* srs_kernel_codec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_codec.cpp; path = ../../../src/kernel/srs_kernel_codec.cpp; sourceTree = ""; }; + 3C12320D1AAE814D00CE8F6C /* srs_kernel_codec.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_codec.hpp; path = ../../../src/kernel/srs_kernel_codec.hpp; sourceTree = ""; }; + 3C12320E1AAE814D00CE8F6C /* srs_kernel_consts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_consts.cpp; path = ../../../src/kernel/srs_kernel_consts.cpp; sourceTree = ""; }; + 3C12320F1AAE814D00CE8F6C /* srs_kernel_consts.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_consts.hpp; path = ../../../src/kernel/srs_kernel_consts.hpp; sourceTree = ""; }; + 3C1232101AAE814D00CE8F6C /* srs_kernel_error.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_error.cpp; path = ../../../src/kernel/srs_kernel_error.cpp; sourceTree = ""; }; + 3C1232111AAE814D00CE8F6C /* srs_kernel_error.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_error.hpp; path = ../../../src/kernel/srs_kernel_error.hpp; sourceTree = ""; }; + 3C1232121AAE814D00CE8F6C /* srs_kernel_file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_file.cpp; path = ../../../src/kernel/srs_kernel_file.cpp; sourceTree = ""; }; + 3C1232131AAE814D00CE8F6C /* srs_kernel_file.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_file.hpp; path = ../../../src/kernel/srs_kernel_file.hpp; sourceTree = ""; }; + 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_flv.cpp; path = ../../../src/kernel/srs_kernel_flv.cpp; sourceTree = ""; }; + 3C1232151AAE814D00CE8F6C /* srs_kernel_flv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_flv.hpp; path = ../../../src/kernel/srs_kernel_flv.hpp; sourceTree = ""; }; + 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_log.cpp; path = ../../../src/kernel/srs_kernel_log.cpp; sourceTree = ""; }; + 3C1232171AAE814D00CE8F6C /* srs_kernel_log.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_log.hpp; path = ../../../src/kernel/srs_kernel_log.hpp; sourceTree = ""; }; + 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_mp3.cpp; path = ../../../src/kernel/srs_kernel_mp3.cpp; sourceTree = ""; }; + 3C1232191AAE814D00CE8F6C /* srs_kernel_mp3.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_mp3.hpp; path = ../../../src/kernel/srs_kernel_mp3.hpp; sourceTree = ""; }; + 3C12321A1AAE814D00CE8F6C /* srs_kernel_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_stream.cpp; path = ../../../src/kernel/srs_kernel_stream.cpp; sourceTree = ""; }; + 3C12321B1AAE814D00CE8F6C /* srs_kernel_stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_stream.hpp; path = ../../../src/kernel/srs_kernel_stream.hpp; sourceTree = ""; }; + 3C12321C1AAE814D00CE8F6C /* srs_kernel_ts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_ts.cpp; path = ../../../src/kernel/srs_kernel_ts.cpp; sourceTree = ""; }; + 3C12321D1AAE814D00CE8F6C /* srs_kernel_ts.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_ts.hpp; path = ../../../src/kernel/srs_kernel_ts.hpp; sourceTree = ""; }; + 3C12321E1AAE814D00CE8F6C /* srs_kernel_utility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_utility.cpp; path = ../../../src/kernel/srs_kernel_utility.cpp; sourceTree = ""; }; + 3C12321F1AAE814D00CE8F6C /* srs_kernel_utility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_utility.hpp; path = ../../../src/kernel/srs_kernel_utility.hpp; sourceTree = ""; }; + 3C12322D1AAE81A400CE8F6C /* srs_raw_avc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_raw_avc.cpp; path = ../../../src/protocol/srs_raw_avc.cpp; sourceTree = ""; }; + 3C12322E1AAE81A400CE8F6C /* srs_raw_avc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_raw_avc.hpp; path = ../../../src/protocol/srs_raw_avc.hpp; sourceTree = ""; }; + 3C12322F1AAE81A400CE8F6C /* srs_rtmp_amf0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_amf0.cpp; path = ../../../src/protocol/srs_rtmp_amf0.cpp; sourceTree = ""; }; + 3C1232301AAE81A400CE8F6C /* srs_rtmp_amf0.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_amf0.hpp; path = ../../../src/protocol/srs_rtmp_amf0.hpp; sourceTree = ""; }; + 3C1232311AAE81A400CE8F6C /* srs_rtmp_buffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_buffer.cpp; path = ../../../src/protocol/srs_rtmp_buffer.cpp; sourceTree = ""; }; + 3C1232321AAE81A400CE8F6C /* srs_rtmp_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_buffer.hpp; path = ../../../src/protocol/srs_rtmp_buffer.hpp; sourceTree = ""; }; + 3C1232331AAE81A400CE8F6C /* srs_rtmp_handshake.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_handshake.cpp; path = ../../../src/protocol/srs_rtmp_handshake.cpp; sourceTree = ""; }; + 3C1232341AAE81A400CE8F6C /* srs_rtmp_handshake.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_handshake.hpp; path = ../../../src/protocol/srs_rtmp_handshake.hpp; sourceTree = ""; }; + 3C1232351AAE81A400CE8F6C /* srs_rtmp_io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_io.cpp; path = ../../../src/protocol/srs_rtmp_io.cpp; sourceTree = ""; }; + 3C1232361AAE81A400CE8F6C /* srs_rtmp_io.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_io.hpp; path = ../../../src/protocol/srs_rtmp_io.hpp; sourceTree = ""; }; + 3C1232371AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_msg_array.cpp; path = ../../../src/protocol/srs_rtmp_msg_array.cpp; sourceTree = ""; }; + 3C1232381AAE81A400CE8F6C /* srs_rtmp_msg_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_msg_array.hpp; path = ../../../src/protocol/srs_rtmp_msg_array.hpp; sourceTree = ""; }; + 3C1232391AAE81A400CE8F6C /* srs_rtmp_sdk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_sdk.cpp; path = ../../../src/protocol/srs_rtmp_sdk.cpp; sourceTree = ""; }; + 3C12323A1AAE81A400CE8F6C /* srs_rtmp_sdk.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_sdk.hpp; path = ../../../src/protocol/srs_rtmp_sdk.hpp; sourceTree = ""; }; + 3C12323B1AAE81A400CE8F6C /* srs_rtmp_stack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_stack.cpp; path = ../../../src/protocol/srs_rtmp_stack.cpp; sourceTree = ""; }; + 3C12323C1AAE81A400CE8F6C /* srs_rtmp_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_stack.hpp; path = ../../../src/protocol/srs_rtmp_stack.hpp; sourceTree = ""; }; + 3C12323D1AAE81A400CE8F6C /* srs_rtmp_utility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtmp_utility.cpp; path = ../../../src/protocol/srs_rtmp_utility.cpp; sourceTree = ""; }; + 3C12323E1AAE81A400CE8F6C /* srs_rtmp_utility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtmp_utility.hpp; path = ../../../src/protocol/srs_rtmp_utility.hpp; sourceTree = ""; }; + 3C12323F1AAE81A400CE8F6C /* srs_rtsp_stack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_rtsp_stack.cpp; path = ../../../src/protocol/srs_rtsp_stack.cpp; sourceTree = ""; }; + 3C1232401AAE81A400CE8F6C /* srs_rtsp_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_rtsp_stack.hpp; path = ../../../src/protocol/srs_rtsp_stack.hpp; sourceTree = ""; }; + 3C12324C1AAE81D900CE8F6C /* srs_app_bandwidth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_bandwidth.cpp; path = ../../../src/app/srs_app_bandwidth.cpp; sourceTree = ""; }; + 3C12324D1AAE81D900CE8F6C /* srs_app_bandwidth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_bandwidth.hpp; path = ../../../src/app/srs_app_bandwidth.hpp; sourceTree = ""; }; + 3C12324E1AAE81D900CE8F6C /* srs_app_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_config.cpp; path = ../../../src/app/srs_app_config.cpp; sourceTree = ""; }; + 3C12324F1AAE81D900CE8F6C /* srs_app_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_config.hpp; path = ../../../src/app/srs_app_config.hpp; sourceTree = ""; }; + 3C1232501AAE81D900CE8F6C /* srs_app_conn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_conn.cpp; path = ../../../src/app/srs_app_conn.cpp; sourceTree = ""; }; + 3C1232511AAE81D900CE8F6C /* srs_app_conn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_conn.hpp; path = ../../../src/app/srs_app_conn.hpp; sourceTree = ""; }; + 3C1232521AAE81D900CE8F6C /* srs_app_dvr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_dvr.cpp; path = ../../../src/app/srs_app_dvr.cpp; sourceTree = ""; }; + 3C1232531AAE81D900CE8F6C /* srs_app_dvr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_dvr.hpp; path = ../../../src/app/srs_app_dvr.hpp; sourceTree = ""; }; + 3C1232541AAE81D900CE8F6C /* srs_app_edge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_edge.cpp; path = ../../../src/app/srs_app_edge.cpp; sourceTree = ""; }; + 3C1232551AAE81D900CE8F6C /* srs_app_edge.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_edge.hpp; path = ../../../src/app/srs_app_edge.hpp; sourceTree = ""; }; + 3C1232561AAE81D900CE8F6C /* srs_app_empty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_empty.cpp; path = ../../../src/app/srs_app_empty.cpp; sourceTree = ""; }; + 3C1232571AAE81D900CE8F6C /* srs_app_empty.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_empty.hpp; path = ../../../src/app/srs_app_empty.hpp; sourceTree = ""; }; + 3C1232581AAE81D900CE8F6C /* srs_app_encoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_encoder.cpp; path = ../../../src/app/srs_app_encoder.cpp; sourceTree = ""; }; + 3C1232591AAE81D900CE8F6C /* srs_app_encoder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_encoder.hpp; path = ../../../src/app/srs_app_encoder.hpp; sourceTree = ""; }; + 3C12325A1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_ffmpeg.cpp; path = ../../../src/app/srs_app_ffmpeg.cpp; sourceTree = ""; }; + 3C12325B1AAE81D900CE8F6C /* srs_app_ffmpeg.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_ffmpeg.hpp; path = ../../../src/app/srs_app_ffmpeg.hpp; sourceTree = ""; }; + 3C12325C1AAE81D900CE8F6C /* srs_app_forward.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_forward.cpp; path = ../../../src/app/srs_app_forward.cpp; sourceTree = ""; }; + 3C12325D1AAE81D900CE8F6C /* srs_app_forward.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_forward.hpp; path = ../../../src/app/srs_app_forward.hpp; sourceTree = ""; }; + 3C12325E1AAE81D900CE8F6C /* srs_app_heartbeat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_heartbeat.cpp; path = ../../../src/app/srs_app_heartbeat.cpp; sourceTree = ""; }; + 3C12325F1AAE81D900CE8F6C /* srs_app_heartbeat.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_heartbeat.hpp; path = ../../../src/app/srs_app_heartbeat.hpp; sourceTree = ""; }; + 3C1232601AAE81D900CE8F6C /* srs_app_hls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_hls.cpp; path = ../../../src/app/srs_app_hls.cpp; sourceTree = ""; }; + 3C1232611AAE81D900CE8F6C /* srs_app_hls.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_hls.hpp; path = ../../../src/app/srs_app_hls.hpp; sourceTree = ""; }; + 3C1232621AAE81D900CE8F6C /* srs_app_http_api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_http_api.cpp; path = ../../../src/app/srs_app_http_api.cpp; sourceTree = ""; }; + 3C1232631AAE81D900CE8F6C /* srs_app_http_api.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_http_api.hpp; path = ../../../src/app/srs_app_http_api.hpp; sourceTree = ""; }; + 3C1232641AAE81D900CE8F6C /* srs_app_http_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_http_client.cpp; path = ../../../src/app/srs_app_http_client.cpp; sourceTree = ""; }; + 3C1232651AAE81D900CE8F6C /* srs_app_http_client.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_http_client.hpp; path = ../../../src/app/srs_app_http_client.hpp; sourceTree = ""; }; + 3C1232661AAE81D900CE8F6C /* srs_app_http_conn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_http_conn.cpp; path = ../../../src/app/srs_app_http_conn.cpp; sourceTree = ""; }; + 3C1232671AAE81D900CE8F6C /* srs_app_http_conn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_http_conn.hpp; path = ../../../src/app/srs_app_http_conn.hpp; sourceTree = ""; }; + 3C1232681AAE81D900CE8F6C /* srs_app_http_hooks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_http_hooks.cpp; path = ../../../src/app/srs_app_http_hooks.cpp; sourceTree = ""; }; + 3C1232691AAE81D900CE8F6C /* srs_app_http_hooks.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_http_hooks.hpp; path = ../../../src/app/srs_app_http_hooks.hpp; sourceTree = ""; }; + 3C12326A1AAE81D900CE8F6C /* srs_app_http.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_http.cpp; path = ../../../src/app/srs_app_http.cpp; sourceTree = ""; }; + 3C12326B1AAE81D900CE8F6C /* srs_app_http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_http.hpp; path = ../../../src/app/srs_app_http.hpp; sourceTree = ""; }; + 3C12326C1AAE81D900CE8F6C /* srs_app_ingest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_ingest.cpp; path = ../../../src/app/srs_app_ingest.cpp; sourceTree = ""; }; + 3C12326D1AAE81D900CE8F6C /* srs_app_ingest.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_ingest.hpp; path = ../../../src/app/srs_app_ingest.hpp; sourceTree = ""; }; + 3C12326E1AAE81D900CE8F6C /* srs_app_json.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_json.cpp; path = ../../../src/app/srs_app_json.cpp; sourceTree = ""; }; + 3C12326F1AAE81D900CE8F6C /* srs_app_json.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_json.hpp; path = ../../../src/app/srs_app_json.hpp; sourceTree = ""; }; + 3C1232701AAE81D900CE8F6C /* srs_app_kbps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_kbps.cpp; path = ../../../src/app/srs_app_kbps.cpp; sourceTree = ""; }; + 3C1232711AAE81D900CE8F6C /* srs_app_kbps.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_kbps.hpp; path = ../../../src/app/srs_app_kbps.hpp; sourceTree = ""; }; + 3C1232721AAE81D900CE8F6C /* srs_app_listener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_listener.cpp; path = ../../../src/app/srs_app_listener.cpp; sourceTree = ""; }; + 3C1232731AAE81D900CE8F6C /* srs_app_listener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_listener.hpp; path = ../../../src/app/srs_app_listener.hpp; sourceTree = ""; }; + 3C1232741AAE81D900CE8F6C /* srs_app_log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_log.cpp; path = ../../../src/app/srs_app_log.cpp; sourceTree = ""; }; + 3C1232751AAE81D900CE8F6C /* srs_app_log.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_log.hpp; path = ../../../src/app/srs_app_log.hpp; sourceTree = ""; }; + 3C1232761AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_mpegts_udp.cpp; path = ../../../src/app/srs_app_mpegts_udp.cpp; sourceTree = ""; }; + 3C1232771AAE81D900CE8F6C /* srs_app_mpegts_udp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_mpegts_udp.hpp; path = ../../../src/app/srs_app_mpegts_udp.hpp; sourceTree = ""; }; + 3C1232781AAE81D900CE8F6C /* srs_app_pithy_print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_pithy_print.cpp; path = ../../../src/app/srs_app_pithy_print.cpp; sourceTree = ""; }; + 3C1232791AAE81D900CE8F6C /* srs_app_pithy_print.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_pithy_print.hpp; path = ../../../src/app/srs_app_pithy_print.hpp; sourceTree = ""; }; + 3C12327A1AAE81D900CE8F6C /* srs_app_recv_thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_recv_thread.cpp; path = ../../../src/app/srs_app_recv_thread.cpp; sourceTree = ""; }; + 3C12327B1AAE81D900CE8F6C /* srs_app_recv_thread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_recv_thread.hpp; path = ../../../src/app/srs_app_recv_thread.hpp; sourceTree = ""; }; + 3C12327C1AAE81D900CE8F6C /* srs_app_refer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_refer.cpp; path = ../../../src/app/srs_app_refer.cpp; sourceTree = ""; }; + 3C12327D1AAE81D900CE8F6C /* srs_app_refer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_refer.hpp; path = ../../../src/app/srs_app_refer.hpp; sourceTree = ""; }; + 3C12327E1AAE81D900CE8F6C /* srs_app_reload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_reload.cpp; path = ../../../src/app/srs_app_reload.cpp; sourceTree = ""; }; + 3C12327F1AAE81D900CE8F6C /* srs_app_reload.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_reload.hpp; path = ../../../src/app/srs_app_reload.hpp; sourceTree = ""; }; + 3C1232801AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_rtmp_conn.cpp; path = ../../../src/app/srs_app_rtmp_conn.cpp; sourceTree = ""; }; + 3C1232811AAE81D900CE8F6C /* srs_app_rtmp_conn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_rtmp_conn.hpp; path = ../../../src/app/srs_app_rtmp_conn.hpp; sourceTree = ""; }; + 3C1232821AAE81D900CE8F6C /* srs_app_rtsp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_rtsp.cpp; path = ../../../src/app/srs_app_rtsp.cpp; sourceTree = ""; }; + 3C1232831AAE81D900CE8F6C /* srs_app_rtsp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_rtsp.hpp; path = ../../../src/app/srs_app_rtsp.hpp; sourceTree = ""; }; + 3C1232841AAE81D900CE8F6C /* srs_app_security.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_security.cpp; path = ../../../src/app/srs_app_security.cpp; sourceTree = ""; }; + 3C1232851AAE81D900CE8F6C /* srs_app_security.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_security.hpp; path = ../../../src/app/srs_app_security.hpp; sourceTree = ""; }; + 3C1232861AAE81D900CE8F6C /* srs_app_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_server.cpp; path = ../../../src/app/srs_app_server.cpp; sourceTree = ""; }; + 3C1232871AAE81D900CE8F6C /* srs_app_server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_server.hpp; path = ../../../src/app/srs_app_server.hpp; sourceTree = ""; }; + 3C1232881AAE81D900CE8F6C /* srs_app_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_source.cpp; path = ../../../src/app/srs_app_source.cpp; sourceTree = ""; }; + 3C1232891AAE81D900CE8F6C /* srs_app_source.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_source.hpp; path = ../../../src/app/srs_app_source.hpp; sourceTree = ""; }; + 3C12328A1AAE81D900CE8F6C /* srs_app_st_socket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_st_socket.cpp; path = ../../../src/app/srs_app_st_socket.cpp; sourceTree = ""; }; + 3C12328B1AAE81D900CE8F6C /* srs_app_st_socket.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_st_socket.hpp; path = ../../../src/app/srs_app_st_socket.hpp; sourceTree = ""; }; + 3C12328C1AAE81D900CE8F6C /* srs_app_st.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_st.cpp; path = ../../../src/app/srs_app_st.cpp; sourceTree = ""; }; + 3C12328D1AAE81D900CE8F6C /* srs_app_st.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_st.hpp; path = ../../../src/app/srs_app_st.hpp; sourceTree = ""; }; + 3C12328E1AAE81D900CE8F6C /* srs_app_statistic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_statistic.cpp; path = ../../../src/app/srs_app_statistic.cpp; sourceTree = ""; }; + 3C12328F1AAE81D900CE8F6C /* srs_app_statistic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_statistic.hpp; path = ../../../src/app/srs_app_statistic.hpp; sourceTree = ""; }; + 3C1232901AAE81D900CE8F6C /* srs_app_thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_thread.cpp; path = ../../../src/app/srs_app_thread.cpp; sourceTree = ""; }; + 3C1232911AAE81D900CE8F6C /* srs_app_thread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_thread.hpp; path = ../../../src/app/srs_app_thread.hpp; sourceTree = ""; }; + 3C1232921AAE81D900CE8F6C /* srs_app_utility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_utility.cpp; path = ../../../src/app/srs_app_utility.cpp; sourceTree = ""; }; + 3C1232931AAE81D900CE8F6C /* srs_app_utility.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_utility.hpp; path = ../../../src/app/srs_app_utility.hpp; sourceTree = ""; }; + 3C1232B81AAE824500CE8F6C /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = configure; path = ../../../configure; sourceTree = ""; }; + 3C1232BB1AAE827E00CE8F6C /* apps.sh */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; name = apps.sh; path = ../../../auto/apps.sh; sourceTree = ""; }; + 3C1232BC1AAE827E00CE8F6C /* auto_headers.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = auto_headers.sh; path = ../../../auto/auto_headers.sh; sourceTree = ""; }; + 3C1232BD1AAE827E00CE8F6C /* build_ffmpeg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = build_ffmpeg.sh; path = ../../../auto/build_ffmpeg.sh; sourceTree = ""; }; + 3C1232BE1AAE827E00CE8F6C /* depends.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = depends.sh; path = ../../../auto/depends.sh; sourceTree = ""; }; + 3C1232BF1AAE827E00CE8F6C /* generate_header.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = generate_header.sh; path = ../../../auto/generate_header.sh; sourceTree = ""; }; + 3C1232C01AAE827E00CE8F6C /* generate-srs-librtmp-project.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "generate-srs-librtmp-project.sh"; path = "../../../auto/generate-srs-librtmp-project.sh"; sourceTree = ""; }; + 3C1232C11AAE827E00CE8F6C /* generate-srs-librtmp-single.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "generate-srs-librtmp-single.sh"; path = "../../../auto/generate-srs-librtmp-single.sh"; sourceTree = ""; }; + 3C1232C21AAE827E00CE8F6C /* libs.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = libs.sh; path = ../../../auto/libs.sh; sourceTree = ""; }; + 3C1232C31AAE827E00CE8F6C /* local_ip.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = local_ip.sh; path = ../../../auto/local_ip.sh; sourceTree = ""; }; + 3C1232C41AAE827E00CE8F6C /* modules.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = modules.sh; path = ../../../auto/modules.sh; sourceTree = ""; }; + 3C1232C51AAE827E00CE8F6C /* options.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = options.sh; path = ../../../auto/options.sh; sourceTree = ""; }; + 3C1232C61AAE827E00CE8F6C /* summary.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = summary.sh; path = ../../../auto/summary.sh; sourceTree = ""; }; + 3C1232C71AAE827E00CE8F6C /* utest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = utest.sh; path = ../../../auto/utest.sh; sourceTree = ""; }; + 3C1232C81AAE833300CE8F6C /* _log.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = _log.sh; path = ../../../scripts/_log.sh; sourceTree = ""; }; + 3C1232C91AAE833300CE8F6C /* build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = build.sh; path = ../../../scripts/build.sh; sourceTree = ""; }; + 3C1232CA1AAE833300CE8F6C /* git.commit.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = git.commit.sh; path = ../../../scripts/git.commit.sh; sourceTree = ""; }; + 3C1232CB1AAE833300CE8F6C /* git2unix.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = git2unix.sh; path = ../../../scripts/git2unix.sh; sourceTree = ""; }; + 3C1232CC1AAE833300CE8F6C /* install.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = install.sh; path = ../../../scripts/install.sh; sourceTree = ""; }; + 3C1232CD1AAE833300CE8F6C /* package.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = package.sh; path = ../../../scripts/package.sh; sourceTree = ""; }; + 3C1232CE1AAE833300CE8F6C /* run.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = run.sh; path = ../../../scripts/run.sh; sourceTree = ""; }; + 3C1232CF1AAE833300CE8F6C /* srs.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = srs.test; path = ../../../scripts/srs.test; sourceTree = ""; }; + 3C1232D01AAE833300CE8F6C /* stop.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = stop.sh; path = ../../../scripts/stop.sh; sourceTree = ""; }; + 3C1232D11AAE833300CE8F6C /* test_configure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = test_configure.sh; path = ../../../scripts/test_configure.sh; sourceTree = ""; }; + 3C1232D21AAEA56B00CE8F6C /* libst.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libst.a; path = "../../objs/st-1.9/DARWIN_14.0.0_DBG/libst.a"; sourceTree = ""; }; + 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "../../objs/openssl-1.0.1f/_release/lib/libcrypto.a"; sourceTree = ""; }; + 3C1232E81AAEA5D000CE8F6C /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "../../objs/openssl-1.0.1f/_release/lib/libssl.a"; sourceTree = ""; }; + 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libhttp_parser.a; path = "../../objs/http-parser-2.1/libhttp_parser.a"; sourceTree = ""; }; + 3C1232F11AAEAC7000CE8F6C /* srs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = srs; path = ../../../etc/init.d/srs; sourceTree = ""; }; + 3C1232F21AAEAC7000CE8F6C /* srs-api */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-api"; path = "../../../etc/init.d/srs-api"; sourceTree = ""; }; + 3C1232F31AAEAC7000CE8F6C /* srs-demo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-demo"; path = "../../../etc/init.d/srs-demo"; sourceTree = ""; }; + 3C1232F41AAEAC7000CE8F6C /* srs-demo-19350 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-demo-19350"; path = "../../../etc/init.d/srs-demo-19350"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3C1231E21AAE64A400CE8F6C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C1232ED1AAEA70F00CE8F6C /* libhttp_parser.a in Frameworks */, + 3C1232E91AAEA5D000CE8F6C /* libcrypto.a in Frameworks */, + 3C1232EA1AAEA5D000CE8F6C /* libssl.a in Frameworks */, + 3C1232D31AAEA56B00CE8F6C /* libst.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3C1231DC1AAE64A400CE8F6C = { + isa = PBXGroup; + children = ( + 3C1232EE1AAEA71C00CE8F6C /* links */, + 3C1231E71AAE64A400CE8F6C /* srs_xcode */, + 3C1231E61AAE64A400CE8F6C /* Products */, + ); + sourceTree = ""; + }; + 3C1231E61AAE64A400CE8F6C /* Products */ = { + isa = PBXGroup; + children = ( + 3C1231E51AAE64A400CE8F6C /* srs_xcode */, + ); + name = Products; + sourceTree = ""; + }; + 3C1231E71AAE64A400CE8F6C /* srs_xcode */ = { + isa = PBXGroup; + children = ( + 3C1232EF1AAEAC5800CE8F6C /* etc */, + 3C1232B81AAE824500CE8F6C /* configure */, + 3C1232BA1AAE826F00CE8F6C /* auto */, + 3C1232B91AAE825100CE8F6C /* scripts */, + 3C12324B1AAE81CE00CE8F6C /* app */, + 3C12322C1AAE819900CE8F6C /* protocol */, + 3C1232071AAE814200CE8F6C /* kernel */, + 3C1232041AAE80CB00CE8F6C /* main */, + 3C1231F91AAE670E00CE8F6C /* objs */, + 3C1231EF1AAE651100CE8F6C /* core */, + ); + path = srs_xcode; + sourceTree = ""; + }; + 3C1231EF1AAE651100CE8F6C /* core */ = { + isa = PBXGroup; + children = ( + 3C1231F01AAE652C00CE8F6C /* srs_core_autofree.cpp */, + 3C1231F11AAE652C00CE8F6C /* srs_core_autofree.hpp */, + 3C1231F21AAE652C00CE8F6C /* srs_core_performance.cpp */, + 3C1231F31AAE652C00CE8F6C /* srs_core_performance.hpp */, + 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */, + 3C1231F51AAE652D00CE8F6C /* srs_core.hpp */, + ); + name = core; + sourceTree = ""; + }; + 3C1231F91AAE670E00CE8F6C /* objs */ = { + isa = PBXGroup; + children = ( + 3C1231FB1AAE673100CE8F6C /* srs_auto_headers.hpp */, + ); + name = objs; + sourceTree = ""; + }; + 3C1232041AAE80CB00CE8F6C /* main */ = { + isa = PBXGroup; + children = ( + 3C1232051AAE812C00CE8F6C /* srs_main_server.cpp */, + ); + name = main; + sourceTree = ""; + }; + 3C1232071AAE814200CE8F6C /* kernel */ = { + isa = PBXGroup; + children = ( + 3C1232081AAE814D00CE8F6C /* srs_kernel_aac.cpp */, + 3C1232091AAE814D00CE8F6C /* srs_kernel_aac.hpp */, + 3C12320A1AAE814D00CE8F6C /* srs_kernel_buffer.cpp */, + 3C12320B1AAE814D00CE8F6C /* srs_kernel_buffer.hpp */, + 3C12320C1AAE814D00CE8F6C /* srs_kernel_codec.cpp */, + 3C12320D1AAE814D00CE8F6C /* srs_kernel_codec.hpp */, + 3C12320E1AAE814D00CE8F6C /* srs_kernel_consts.cpp */, + 3C12320F1AAE814D00CE8F6C /* srs_kernel_consts.hpp */, + 3C1232101AAE814D00CE8F6C /* srs_kernel_error.cpp */, + 3C1232111AAE814D00CE8F6C /* srs_kernel_error.hpp */, + 3C1232121AAE814D00CE8F6C /* srs_kernel_file.cpp */, + 3C1232131AAE814D00CE8F6C /* srs_kernel_file.hpp */, + 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */, + 3C1232151AAE814D00CE8F6C /* srs_kernel_flv.hpp */, + 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */, + 3C1232171AAE814D00CE8F6C /* srs_kernel_log.hpp */, + 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */, + 3C1232191AAE814D00CE8F6C /* srs_kernel_mp3.hpp */, + 3C12321A1AAE814D00CE8F6C /* srs_kernel_stream.cpp */, + 3C12321B1AAE814D00CE8F6C /* srs_kernel_stream.hpp */, + 3C12321C1AAE814D00CE8F6C /* srs_kernel_ts.cpp */, + 3C12321D1AAE814D00CE8F6C /* srs_kernel_ts.hpp */, + 3C12321E1AAE814D00CE8F6C /* srs_kernel_utility.cpp */, + 3C12321F1AAE814D00CE8F6C /* srs_kernel_utility.hpp */, + ); + name = kernel; + sourceTree = ""; + }; + 3C12322C1AAE819900CE8F6C /* protocol */ = { + isa = PBXGroup; + children = ( + 3C12322D1AAE81A400CE8F6C /* srs_raw_avc.cpp */, + 3C12322E1AAE81A400CE8F6C /* srs_raw_avc.hpp */, + 3C12322F1AAE81A400CE8F6C /* srs_rtmp_amf0.cpp */, + 3C1232301AAE81A400CE8F6C /* srs_rtmp_amf0.hpp */, + 3C1232311AAE81A400CE8F6C /* srs_rtmp_buffer.cpp */, + 3C1232321AAE81A400CE8F6C /* srs_rtmp_buffer.hpp */, + 3C1232331AAE81A400CE8F6C /* srs_rtmp_handshake.cpp */, + 3C1232341AAE81A400CE8F6C /* srs_rtmp_handshake.hpp */, + 3C1232351AAE81A400CE8F6C /* srs_rtmp_io.cpp */, + 3C1232361AAE81A400CE8F6C /* srs_rtmp_io.hpp */, + 3C1232371AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp */, + 3C1232381AAE81A400CE8F6C /* srs_rtmp_msg_array.hpp */, + 3C1232391AAE81A400CE8F6C /* srs_rtmp_sdk.cpp */, + 3C12323A1AAE81A400CE8F6C /* srs_rtmp_sdk.hpp */, + 3C12323B1AAE81A400CE8F6C /* srs_rtmp_stack.cpp */, + 3C12323C1AAE81A400CE8F6C /* srs_rtmp_stack.hpp */, + 3C12323D1AAE81A400CE8F6C /* srs_rtmp_utility.cpp */, + 3C12323E1AAE81A400CE8F6C /* srs_rtmp_utility.hpp */, + 3C12323F1AAE81A400CE8F6C /* srs_rtsp_stack.cpp */, + 3C1232401AAE81A400CE8F6C /* srs_rtsp_stack.hpp */, + ); + name = protocol; + sourceTree = ""; + }; + 3C12324B1AAE81CE00CE8F6C /* app */ = { + isa = PBXGroup; + children = ( + 3C12324C1AAE81D900CE8F6C /* srs_app_bandwidth.cpp */, + 3C12324D1AAE81D900CE8F6C /* srs_app_bandwidth.hpp */, + 3C12324E1AAE81D900CE8F6C /* srs_app_config.cpp */, + 3C12324F1AAE81D900CE8F6C /* srs_app_config.hpp */, + 3C1232501AAE81D900CE8F6C /* srs_app_conn.cpp */, + 3C1232511AAE81D900CE8F6C /* srs_app_conn.hpp */, + 3C1232521AAE81D900CE8F6C /* srs_app_dvr.cpp */, + 3C1232531AAE81D900CE8F6C /* srs_app_dvr.hpp */, + 3C1232541AAE81D900CE8F6C /* srs_app_edge.cpp */, + 3C1232551AAE81D900CE8F6C /* srs_app_edge.hpp */, + 3C1232561AAE81D900CE8F6C /* srs_app_empty.cpp */, + 3C1232571AAE81D900CE8F6C /* srs_app_empty.hpp */, + 3C1232581AAE81D900CE8F6C /* srs_app_encoder.cpp */, + 3C1232591AAE81D900CE8F6C /* srs_app_encoder.hpp */, + 3C12325A1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp */, + 3C12325B1AAE81D900CE8F6C /* srs_app_ffmpeg.hpp */, + 3C12325C1AAE81D900CE8F6C /* srs_app_forward.cpp */, + 3C12325D1AAE81D900CE8F6C /* srs_app_forward.hpp */, + 3C12325E1AAE81D900CE8F6C /* srs_app_heartbeat.cpp */, + 3C12325F1AAE81D900CE8F6C /* srs_app_heartbeat.hpp */, + 3C1232601AAE81D900CE8F6C /* srs_app_hls.cpp */, + 3C1232611AAE81D900CE8F6C /* srs_app_hls.hpp */, + 3C1232621AAE81D900CE8F6C /* srs_app_http_api.cpp */, + 3C1232631AAE81D900CE8F6C /* srs_app_http_api.hpp */, + 3C1232641AAE81D900CE8F6C /* srs_app_http_client.cpp */, + 3C1232651AAE81D900CE8F6C /* srs_app_http_client.hpp */, + 3C1232661AAE81D900CE8F6C /* srs_app_http_conn.cpp */, + 3C1232671AAE81D900CE8F6C /* srs_app_http_conn.hpp */, + 3C1232681AAE81D900CE8F6C /* srs_app_http_hooks.cpp */, + 3C1232691AAE81D900CE8F6C /* srs_app_http_hooks.hpp */, + 3C12326A1AAE81D900CE8F6C /* srs_app_http.cpp */, + 3C12326B1AAE81D900CE8F6C /* srs_app_http.hpp */, + 3C12326C1AAE81D900CE8F6C /* srs_app_ingest.cpp */, + 3C12326D1AAE81D900CE8F6C /* srs_app_ingest.hpp */, + 3C12326E1AAE81D900CE8F6C /* srs_app_json.cpp */, + 3C12326F1AAE81D900CE8F6C /* srs_app_json.hpp */, + 3C1232701AAE81D900CE8F6C /* srs_app_kbps.cpp */, + 3C1232711AAE81D900CE8F6C /* srs_app_kbps.hpp */, + 3C1232721AAE81D900CE8F6C /* srs_app_listener.cpp */, + 3C1232731AAE81D900CE8F6C /* srs_app_listener.hpp */, + 3C1232741AAE81D900CE8F6C /* srs_app_log.cpp */, + 3C1232751AAE81D900CE8F6C /* srs_app_log.hpp */, + 3C1232761AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp */, + 3C1232771AAE81D900CE8F6C /* srs_app_mpegts_udp.hpp */, + 3C1232781AAE81D900CE8F6C /* srs_app_pithy_print.cpp */, + 3C1232791AAE81D900CE8F6C /* srs_app_pithy_print.hpp */, + 3C12327A1AAE81D900CE8F6C /* srs_app_recv_thread.cpp */, + 3C12327B1AAE81D900CE8F6C /* srs_app_recv_thread.hpp */, + 3C12327C1AAE81D900CE8F6C /* srs_app_refer.cpp */, + 3C12327D1AAE81D900CE8F6C /* srs_app_refer.hpp */, + 3C12327E1AAE81D900CE8F6C /* srs_app_reload.cpp */, + 3C12327F1AAE81D900CE8F6C /* srs_app_reload.hpp */, + 3C1232801AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp */, + 3C1232811AAE81D900CE8F6C /* srs_app_rtmp_conn.hpp */, + 3C1232821AAE81D900CE8F6C /* srs_app_rtsp.cpp */, + 3C1232831AAE81D900CE8F6C /* srs_app_rtsp.hpp */, + 3C1232841AAE81D900CE8F6C /* srs_app_security.cpp */, + 3C1232851AAE81D900CE8F6C /* srs_app_security.hpp */, + 3C1232861AAE81D900CE8F6C /* srs_app_server.cpp */, + 3C1232871AAE81D900CE8F6C /* srs_app_server.hpp */, + 3C1232881AAE81D900CE8F6C /* srs_app_source.cpp */, + 3C1232891AAE81D900CE8F6C /* srs_app_source.hpp */, + 3C12328A1AAE81D900CE8F6C /* srs_app_st_socket.cpp */, + 3C12328B1AAE81D900CE8F6C /* srs_app_st_socket.hpp */, + 3C12328C1AAE81D900CE8F6C /* srs_app_st.cpp */, + 3C12328D1AAE81D900CE8F6C /* srs_app_st.hpp */, + 3C12328E1AAE81D900CE8F6C /* srs_app_statistic.cpp */, + 3C12328F1AAE81D900CE8F6C /* srs_app_statistic.hpp */, + 3C1232901AAE81D900CE8F6C /* srs_app_thread.cpp */, + 3C1232911AAE81D900CE8F6C /* srs_app_thread.hpp */, + 3C1232921AAE81D900CE8F6C /* srs_app_utility.cpp */, + 3C1232931AAE81D900CE8F6C /* srs_app_utility.hpp */, + ); + name = app; + sourceTree = ""; + }; + 3C1232B91AAE825100CE8F6C /* scripts */ = { + isa = PBXGroup; + children = ( + 3C1232C81AAE833300CE8F6C /* _log.sh */, + 3C1232C91AAE833300CE8F6C /* build.sh */, + 3C1232CA1AAE833300CE8F6C /* git.commit.sh */, + 3C1232CB1AAE833300CE8F6C /* git2unix.sh */, + 3C1232CC1AAE833300CE8F6C /* install.sh */, + 3C1232CD1AAE833300CE8F6C /* package.sh */, + 3C1232CE1AAE833300CE8F6C /* run.sh */, + 3C1232CF1AAE833300CE8F6C /* srs.test */, + 3C1232D01AAE833300CE8F6C /* stop.sh */, + 3C1232D11AAE833300CE8F6C /* test_configure.sh */, + ); + name = scripts; + sourceTree = ""; + }; + 3C1232BA1AAE826F00CE8F6C /* auto */ = { + isa = PBXGroup; + children = ( + 3C1232BB1AAE827E00CE8F6C /* apps.sh */, + 3C1232BC1AAE827E00CE8F6C /* auto_headers.sh */, + 3C1232BD1AAE827E00CE8F6C /* build_ffmpeg.sh */, + 3C1232BE1AAE827E00CE8F6C /* depends.sh */, + 3C1232BF1AAE827E00CE8F6C /* generate_header.sh */, + 3C1232C01AAE827E00CE8F6C /* generate-srs-librtmp-project.sh */, + 3C1232C11AAE827E00CE8F6C /* generate-srs-librtmp-single.sh */, + 3C1232C21AAE827E00CE8F6C /* libs.sh */, + 3C1232C31AAE827E00CE8F6C /* local_ip.sh */, + 3C1232C41AAE827E00CE8F6C /* modules.sh */, + 3C1232C51AAE827E00CE8F6C /* options.sh */, + 3C1232C61AAE827E00CE8F6C /* summary.sh */, + 3C1232C71AAE827E00CE8F6C /* utest.sh */, + ); + name = auto; + sourceTree = ""; + }; + 3C1232EE1AAEA71C00CE8F6C /* links */ = { + isa = PBXGroup; + children = ( + 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */, + 3C1232D21AAEA56B00CE8F6C /* libst.a */, + 3C1232E81AAEA5D000CE8F6C /* libssl.a */, + 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */, + ); + name = links; + sourceTree = ""; + }; + 3C1232EF1AAEAC5800CE8F6C /* etc */ = { + isa = PBXGroup; + children = ( + 3C1232F01AAEAC5D00CE8F6C /* init.d */, + ); + name = etc; + sourceTree = ""; + }; + 3C1232F01AAEAC5D00CE8F6C /* init.d */ = { + isa = PBXGroup; + children = ( + 3C1232F11AAEAC7000CE8F6C /* srs */, + 3C1232F21AAEAC7000CE8F6C /* srs-api */, + 3C1232F31AAEAC7000CE8F6C /* srs-demo */, + 3C1232F41AAEAC7000CE8F6C /* srs-demo-19350 */, + ); + name = init.d; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3C1231E41AAE64A400CE8F6C /* srs_xcode */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3C1231EC1AAE64A400CE8F6C /* Build configuration list for PBXNativeTarget "srs_xcode" */; + buildPhases = ( + 3C1231E11AAE64A400CE8F6C /* Sources */, + 3C1231E21AAE64A400CE8F6C /* Frameworks */, + 3C1231E31AAE64A400CE8F6C /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = srs_xcode; + productName = srs_xcode; + productReference = 3C1231E51AAE64A400CE8F6C /* srs_xcode */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3C1231DD1AAE64A400CE8F6C /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = winlin; + TargetAttributes = { + 3C1231E41AAE64A400CE8F6C = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 3C1231E01AAE64A400CE8F6C /* Build configuration list for PBXProject "srs_xcode" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3C1231DC1AAE64A400CE8F6C; + productRefGroup = 3C1231E61AAE64A400CE8F6C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3C1231E41AAE64A400CE8F6C /* srs_xcode */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 3C1231E11AAE64A400CE8F6C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C1232951AAE81D900CE8F6C /* srs_app_config.cpp in Sources */, + 3C1232961AAE81D900CE8F6C /* srs_app_conn.cpp in Sources */, + 3C12322A1AAE814D00CE8F6C /* srs_kernel_ts.cpp in Sources */, + 3C12329E1AAE81D900CE8F6C /* srs_app_hls.cpp in Sources */, + 3C1232971AAE81D900CE8F6C /* srs_app_dvr.cpp in Sources */, + 3C1232271AAE814D00CE8F6C /* srs_kernel_log.cpp in Sources */, + 3C1232A81AAE81D900CE8F6C /* srs_app_log.cpp in Sources */, + 3C1232A41AAE81D900CE8F6C /* srs_app_ingest.cpp in Sources */, + 3C1232B41AAE81D900CE8F6C /* srs_app_st.cpp in Sources */, + 3C1232481AAE81A400CE8F6C /* srs_rtmp_stack.cpp in Sources */, + 3C1232B01AAE81D900CE8F6C /* srs_app_security.cpp in Sources */, + 3C12322B1AAE814D00CE8F6C /* srs_kernel_utility.cpp in Sources */, + 3C12324A1AAE81A400CE8F6C /* srs_rtsp_stack.cpp in Sources */, + 3C1232A51AAE81D900CE8F6C /* srs_app_json.cpp in Sources */, + 3C12329F1AAE81D900CE8F6C /* srs_app_http_api.cpp in Sources */, + 3C1232A11AAE81D900CE8F6C /* srs_app_http_conn.cpp in Sources */, + 3C1232AC1AAE81D900CE8F6C /* srs_app_refer.cpp in Sources */, + 3C1232991AAE81D900CE8F6C /* srs_app_empty.cpp in Sources */, + 3C1232201AAE814D00CE8F6C /* srs_kernel_aac.cpp in Sources */, + 3C1232941AAE81D900CE8F6C /* srs_app_bandwidth.cpp in Sources */, + 3C1232221AAE814D00CE8F6C /* srs_kernel_codec.cpp in Sources */, + 3C1232B71AAE81D900CE8F6C /* srs_app_utility.cpp in Sources */, + 3C1232AB1AAE81D900CE8F6C /* srs_app_recv_thread.cpp in Sources */, + 3C1231F61AAE652D00CE8F6C /* srs_core_autofree.cpp in Sources */, + 3C1232411AAE81A400CE8F6C /* srs_raw_avc.cpp in Sources */, + 3C1232491AAE81A400CE8F6C /* srs_rtmp_utility.cpp in Sources */, + 3C1232A01AAE81D900CE8F6C /* srs_app_http_client.cpp in Sources */, + 3C12329B1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp in Sources */, + 3C1232421AAE81A400CE8F6C /* srs_rtmp_amf0.cpp in Sources */, + 3C1232AA1AAE81D900CE8F6C /* srs_app_pithy_print.cpp in Sources */, + 3C12329C1AAE81D900CE8F6C /* srs_app_forward.cpp in Sources */, + 3C1232251AAE814D00CE8F6C /* srs_kernel_file.cpp in Sources */, + 3C1232AD1AAE81D900CE8F6C /* srs_app_reload.cpp in Sources */, + 3C1231F81AAE652D00CE8F6C /* srs_core.cpp in Sources */, + 3C1232A21AAE81D900CE8F6C /* srs_app_http_hooks.cpp in Sources */, + 3C1232B11AAE81D900CE8F6C /* srs_app_server.cpp in Sources */, + 3C1232B31AAE81D900CE8F6C /* srs_app_st_socket.cpp in Sources */, + 3C1232061AAE812C00CE8F6C /* srs_main_server.cpp in Sources */, + 3C1232281AAE814D00CE8F6C /* srs_kernel_mp3.cpp in Sources */, + 3C1232B21AAE81D900CE8F6C /* srs_app_source.cpp in Sources */, + 3C1231F71AAE652D00CE8F6C /* srs_core_performance.cpp in Sources */, + 3C1232981AAE81D900CE8F6C /* srs_app_edge.cpp in Sources */, + 3C1232461AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp in Sources */, + 3C1232A71AAE81D900CE8F6C /* srs_app_listener.cpp in Sources */, + 3C1232261AAE814D00CE8F6C /* srs_kernel_flv.cpp in Sources */, + 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */, + 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */, + 3C1232291AAE814D00CE8F6C /* srs_kernel_stream.cpp in Sources */, + 3C1232B61AAE81D900CE8F6C /* srs_app_thread.cpp in Sources */, + 3C1232A91AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp in Sources */, + 3C1232AE1AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp in Sources */, + 3C1232B51AAE81D900CE8F6C /* srs_app_statistic.cpp in Sources */, + 3C1232451AAE81A400CE8F6C /* srs_rtmp_io.cpp in Sources */, + 3C1232431AAE81A400CE8F6C /* srs_rtmp_buffer.cpp in Sources */, + 3C1232211AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */, + 3C1232471AAE81A400CE8F6C /* srs_rtmp_sdk.cpp in Sources */, + 3C1232A61AAE81D900CE8F6C /* srs_app_kbps.cpp in Sources */, + 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */, + 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */, + 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */, + 3C1232A31AAE81D900CE8F6C /* srs_app_http.cpp in Sources */, + 3C12329A1AAE81D900CE8F6C /* srs_app_encoder.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3C1231EA1AAE64A400CE8F6C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 3C1231EB1AAE64A400CE8F6C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 3C1231ED1AAE64A400CE8F6C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++98"; + CLANG_CXX_LIBRARY = "libstdc++"; + LIBRARY_SEARCH_PATHS = ( + "../../objs/**", + "/Users/winlin/Desktop/git/simple-rtmp-server/trunk/objs/http-parser-2.1", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + "USER_HEADER_SEARCH_PATHS[arch=*]" = "../../src/** ../../objs ../../objs/st ../../objs/hp ../../objs/openssl"; + }; + name = Debug; + }; + 3C1231EE1AAE64A400CE8F6C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++98"; + CLANG_CXX_LIBRARY = "libstdc++"; + LIBRARY_SEARCH_PATHS = ( + "../../objs/**", + "/Users/winlin/Desktop/git/simple-rtmp-server/trunk/objs/http-parser-2.1", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3C1231E01AAE64A400CE8F6C /* Build configuration list for PBXProject "srs_xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3C1231EA1AAE64A400CE8F6C /* Debug */, + 3C1231EB1AAE64A400CE8F6C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3C1231EC1AAE64A400CE8F6C /* Build configuration list for PBXNativeTarget "srs_xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3C1231ED1AAE64A400CE8F6C /* Debug */, + 3C1231EE1AAE64A400CE8F6C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3C1231DD1AAE64A400CE8F6C /* Project object */; +} diff --git a/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..60847b6bd4 --- /dev/null +++ b/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/xcuserdata/winlin.xcuserdatad/UserInterfaceState.xcuserstate b/trunk/ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/xcuserdata/winlin.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..d14fd47ad1a7304ad425605a84c3b091af1fb055 GIT binary patch literal 23287 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 #include +#ifndef SRS_OSX #include bool srs_st_epoll_is_supported(void) { @@ -38,11 +39,13 @@ bool srs_st_epoll_is_supported(void) return (errno != ENOSYS); } +#endif int srs_init_st() { int ret = ERROR_SUCCESS; +#ifndef SRS_OSX // check epoll, some old linux donot support epoll. // @see https://github.com/winlinvip/simple-rtmp-server/issues/162 if (!srs_st_epoll_is_supported()) { @@ -58,6 +61,7 @@ int srs_init_st() return ret; } srs_verbose("st_set_eventsys use linux epoll success"); +#endif if(st_init() != 0){ ret = ERROR_ST_INITIALIZE; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 37cbf487c2..1ee018e04a 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 136 +#define VERSION_REVISION 137 // server info. #define RTMP_SIG_SRS_KEY "SRS" diff --git a/trunk/src/kernel/srs_kernel_utility.cpp b/trunk/src/kernel/srs_kernel_utility.cpp index 3a2eeebdaa..e725c722f8 100644 --- a/trunk/src/kernel/srs_kernel_utility.cpp +++ b/trunk/src/kernel/srs_kernel_utility.cpp @@ -437,7 +437,9 @@ u_int32_t srs_crc32(const void* buf, int size) * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifndef UINT_MAX #define UINT_MAX 0xffffffff +#endif #ifndef AV_RB32 # define AV_RB32(x) \ diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index c82a8edbee..95b9b80cdd 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -177,6 +177,23 @@ void show_macro_features() void check_macro_features() { + // important preset. +#ifdef SRS_OSX + srs_trace("SRS for OSX"); +#endif +#ifdef SRS_PI + srs_trace("SRS for pi"); +#endif +#ifdef SRS_CUBIE + srs_trace("SRS for cubieboard"); +#endif +#ifdef SRS_ARM_UBUNTU12 + srs_trace("SRS for arm(build on ubuntu)"); +#endif +#ifdef SRS_MIPS_UBUNTU12 + srs_trace("SRS for mips(build on ubuntu)"); +#endif + // for special features. #ifndef SRS_PERF_MERGED_READ srs_warn("MR(merged-read) is disabled, hurts read performance. @see %s", RTMP_SIG_SRS_ISSUES(241)); @@ -252,8 +269,8 @@ int main(int argc, char** argv) srs_trace("conf: %s, limit: %d", _srs_config->config().c_str(), _srs_config->get_max_connections()); // features - show_macro_features(); check_macro_features(); + show_macro_features(); /** * we do nothing in the constructor of server, diff --git a/trunk/src/protocol/srs_rtmp_handshake.cpp b/trunk/src/protocol/srs_rtmp_handshake.cpp index e21f1336b1..042a52b53f 100644 --- a/trunk/src/protocol/srs_rtmp_handshake.cpp +++ b/trunk/src/protocol/srs_rtmp_handshake.cpp @@ -73,7 +73,7 @@ namespace _srs_internal int __openssl_HMACsha256(HMAC_CTX* ctx, const void* data, int data_size, void* digest, unsigned int* digest_size) { int ret = ERROR_SUCCESS; - +#ifndef SRS_OSX if (HMAC_Update(ctx, (unsigned char *) data, data_size) < 0) { ret = ERROR_OpenSslSha256Update; return ret; @@ -83,6 +83,10 @@ namespace _srs_internal ret = ERROR_OpenSslSha256Final; return ret; } +#else + HMAC_Update(ctx, (unsigned char *) data, data_size); + HMAC_Final(ctx, (unsigned char *) digest, digest_size); +#endif return ret; } @@ -117,10 +121,14 @@ namespace _srs_internal // for instance, in python, hashlib.sha256(data).digest(). HMAC_CTX_init(&ctx); +#ifndef SRS_OSX if (HMAC_Init_ex(&ctx, __key, key_size, EVP_sha256(), NULL) < 0) { ret = ERROR_OpenSslSha256Init; return ret; } +#else + HMAC_Init_ex(&ctx, __key, key_size, EVP_sha256(), NULL); +#endif ret = __openssl_HMACsha256(&ctx, data, data_size, __digest, &digest_size); HMAC_CTX_cleanup(&ctx);