winlin

fix #155, #135, support osx(darwin) for mac pro. 2.0.137.

@@ -25,7 +25,7 @@ flv/ts/mp3/aac streaming for user prefered. @@ -25,7 +25,7 @@ flv/ts/mp3/aac streaming for user prefered.
25 1. Multiple feature: transcode, forward, ingest, http hooks, dvr, hls, rtsp, http streaming, 25 1. Multiple feature: transcode, forward, ingest, http hooks, dvr, hls, rtsp, http streaming,
26 http api, refer, log, bandwith test and srs-librtmp. 26 http api, refer, log, bandwith test and srs-librtmp.
27 1. Best maintainess: simple arch over state-threads(coroutine), single thread, single process 27 1. Best maintainess: simple arch over state-threads(coroutine), single thread, single process
28 -and only linux platform, common server x86-64/i386/arm/mips cpus, rich comments, strictly 28 +and for linux/osx platform, common server x86-64/i386/arm/mips cpus, rich comments, strictly
29 follows RTMP/HLS/RTSP spec. 29 follows RTMP/HLS/RTSP spec.
30 1. Easy to use: both English and Chinese wiki, typically config files in trunk/conf, traceable 30 1. Easy to use: both English and Chinese wiki, typically config files in trunk/conf, traceable
31 and session based log, linux service script and install script. 31 and session based log, linux service script and install script.
@@ -37,7 +37,7 @@ Enjoy it! @@ -37,7 +37,7 @@ Enjoy it!
37 37
38 SRS(SIMPLE RTMP Server) over state-threads created in 2013.10. 38 SRS(SIMPLE RTMP Server) over state-threads created in 2013.10.
39 39
40 -SRS delivers rtmp/hls/http live on x86/x64/arm/mips linux, 40 +SRS delivers rtmp/hls/http live on x86/x64/arm/mips linux/osx,
41 supports origin/edge/vhost and transcode/ingest and dvr/forward 41 supports origin/edge/vhost and transcode/ingest and dvr/forward
42 and http-api/http-callback/reload, introduces tracable 42 and http-api/http-callback/reload, introduces tracable
43 session-oriented log, exports client srs-librtmp, 43 session-oriented log, exports client srs-librtmp,
@@ -550,6 +550,7 @@ Supported operating systems and hardware: @@ -550,6 +550,7 @@ Supported operating systems and hardware:
550 550
551 ### SRS 2.0 history 551 ### SRS 2.0 history
552 552
  553 +* 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.
553 * 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. 554 * 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.
554 * 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. 555 * 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.
555 * 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. 556 * 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.
  1 +diff -r -c ./Makefile ../http-parser-2.1/Makefile
  2 +*** ./Makefile Tue Mar 10 10:44:19 2015
  3 +--- ../http-parser-2.1/Makefile Wed Mar 27 06:35:20 2013
  4 +***************
  5 +*** 12,22 ****
  6 + CFLAGS_FAST = $(CFLAGS) -O3 $(CFLAGS_FAST_EXTRA)
  7 + CFLAGS_LIB = $(CFLAGS_FAST) -fPIC
  8 +
  9 +- # patch by winlin
  10 +- CPPFLAGS_FAST = $(CPPFLAGS_DEBUG)
  11 +- CFLAGS_FAST = $(CFLAGS_DEBUG)
  12 +- CFLAGS_LIB = $(CFLAGS_FAST) -fPIC
  13 +-
  14 + test: test_g test_fast
  15 + ./test_g
  16 + ./test_fast
  17 +--- 12,17 ----
@@ -16,8 +16,28 @@ echo "#define SRS_AUTO_BUILD_DATE \"`date \"+%Y-%m-%d %H:%M:%S\"`\"" >> $SRS_AUT @@ -16,8 +16,28 @@ echo "#define SRS_AUTO_BUILD_DATE \"`date \"+%Y-%m-%d %H:%M:%S\"`\"" >> $SRS_AUT
16 echo "#define SRS_AUTO_UNAME \"`uname -a`\"" >> $SRS_AUTO_HEADERS_H 16 echo "#define SRS_AUTO_UNAME \"`uname -a`\"" >> $SRS_AUTO_HEADERS_H
17 echo "#define SRS_AUTO_USER_CONFIGURE \"${SRS_AUTO_USER_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H 17 echo "#define SRS_AUTO_USER_CONFIGURE \"${SRS_AUTO_USER_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H
18 echo "#define SRS_AUTO_CONFIGURE \"${SRS_AUTO_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H 18 echo "#define SRS_AUTO_CONFIGURE \"${SRS_AUTO_CONFIGURE}\"" >> $SRS_AUTO_HEADERS_H
  19 +echo "" >> $SRS_AUTO_HEADERS_H
  20 +
  21 +# export the preset.
  22 +if [ $SRS_OSX = YES ]; then
  23 + echo "#define SRS_OSX" >> $SRS_AUTO_HEADERS_H
  24 +fi
  25 +if [ $SRS_X86_X64 = YES ]; then
  26 + echo "#define SRS_X86_X64" >> $SRS_AUTO_HEADERS_H
  27 +fi
  28 +if [ $SRS_ARM_UBUNTU12 = YES ]; then
  29 + echo "#define SRS_ARM_UBUNTU12" >> $SRS_AUTO_HEADERS_H
  30 +fi
  31 +if [ $SRS_MIPS_UBUNTU12 = YES ]; then
  32 + echo "#define SRS_MIPS_UBUNTU12" >> $SRS_AUTO_HEADERS_H
  33 +fi
  34 +if [ $SRS_PI = YES ]; then
  35 + echo "#define SRS_PI" >> $SRS_AUTO_HEADERS_H
  36 +fi
  37 +if [ $SRS_CUBIE = YES ]; then
  38 + echo "#define SRS_CUBIE" >> $SRS_AUTO_HEADERS_H
  39 +fi
19 40
20 -# new empty line to auto headers file.  
21 echo "" >> $SRS_AUTO_HEADERS_H 41 echo "" >> $SRS_AUTO_HEADERS_H
22 42
23 ##################################################################################### 43 #####################################################################################
@@ -41,6 +41,24 @@ function Ubuntu_prepare() @@ -41,6 +41,24 @@ function Ubuntu_prepare()
41 return 0; 41 return 0;
42 fi 42 fi
43 fi 43 fi
  44 +
  45 + # for arm, install the cross build tool chain.
  46 + if [ $SRS_ARM_UBUNTU12 = YES ]; then
  47 + $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  48 + echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi"
  49 + require_sudoer "sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi"
  50 + sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  51 + echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi success"
  52 + fi
  53 + fi
  54 +
  55 + # for mips, user must installed the tool chain.
  56 + if [ $SRS_MIPS_UBUNTU12 = YES ]; then
  57 + $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  58 + echo "user must install the tool chain: $SrsArmCC"
  59 + return 2
  60 + fi
  61 + fi
44 62
45 OS_IS_UBUNTU=YES 63 OS_IS_UBUNTU=YES
46 echo "Ubuntu detected, install tools if needed" 64 echo "Ubuntu detected, install tools if needed"
@@ -110,24 +128,6 @@ function Ubuntu_prepare() @@ -110,24 +128,6 @@ function Ubuntu_prepare()
110 fi 128 fi
111 fi 129 fi
112 130
113 - # for arm, install the cross build tool chain.  
114 - if [ $SRS_ARM_UBUNTU12 = YES ]; then  
115 - $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then  
116 - echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi"  
117 - require_sudoer "sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi"  
118 - sudo apt-get install -y --force-yes gcc-arm-linux-gnueabi g++-arm-linux-gnueabi; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi  
119 - echo "install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi success"  
120 - fi  
121 - fi  
122 -  
123 - # for mips, user must installed the tool chain.  
124 - if [ $SRS_MIPS_UBUNTU12 = YES ]; then  
125 - $SrsArmCC --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then  
126 - echo "user must install the tool chain: $SrsArmCC"  
127 - return 2  
128 - fi  
129 - fi  
130 -  
131 echo "Ubuntu install tools success" 131 echo "Ubuntu install tools success"
132 return 0 132 return 0
133 } 133 }
@@ -144,6 +144,12 @@ function Centos_prepare() @@ -144,6 +144,12 @@ function Centos_prepare()
144 if [[ ! -f /etc/redhat-release ]]; then 144 if [[ ! -f /etc/redhat-release ]]; then
145 return 0; 145 return 0;
146 fi 146 fi
  147 +
  148 + # for arm, install the cross build tool chain.
  149 + if [ $SRS_EMBEDED_CPU = YES ]; then
  150 + echo "embeded(arm/mips) is invalid for CentOS"
  151 + return 1
  152 + fi
147 153
148 OS_IS_CENTOS=YES 154 OS_IS_CENTOS=YES
149 echo "Centos detected, install tools if needed" 155 echo "Centos detected, install tools if needed"
@@ -220,18 +226,137 @@ function Centos_prepare() @@ -220,18 +226,137 @@ function Centos_prepare()
220 fi 226 fi
221 fi 227 fi
222 228
  229 + echo "Centos install tools success"
  230 + return 0
  231 +}
  232 +# donot prepare tools, for srs-librtmp depends only gcc and g++.
  233 +if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
  234 + Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi
  235 +fi
  236 +#####################################################################################
  237 +# for Centos, auto install tools by yum
  238 +#####################################################################################
  239 +OS_IS_OSX=NO
  240 +function OSX_prepare()
  241 +{
  242 + uname -s|grep Darwin >/dev/null 2>&1
  243 + ret=$?; if [[ 0 -ne $ret ]]; then
  244 + if [ $SRS_OSX = YES ]; then
  245 + echo "OSX check failed, actual is `uname -s`"
  246 + exit 1;
  247 + fi
  248 + return 0;
  249 + fi
  250 +
223 # for arm, install the cross build tool chain. 251 # for arm, install the cross build tool chain.
224 if [ $SRS_EMBEDED_CPU = YES ]; then 252 if [ $SRS_EMBEDED_CPU = YES ]; then
225 - echo "embeded(arm/mips) is invalid for CentOS" 253 + echo "embeded(arm/mips) is invalid for OSX"
226 return 1 254 return 1
227 fi 255 fi
  256 +
  257 + OS_IS_OSX=YES
  258 + echo "OSX detected, install tools if needed"
228 259
229 - echo "Centos install tools success" 260 + brew --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  261 + echo "install brew"
  262 + echo "ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\""
  263 + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  264 + echo "install brew success"
  265 + fi
  266 +
  267 + gcc --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  268 + echo "install gcc"
  269 + echo "brew install gcc"
  270 + brew install gcc; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  271 + echo "install gcc success"
  272 + fi
  273 +
  274 + g++ --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  275 + echo "install gcc-c++"
  276 + echo "brew install gcc-c++"
  277 + brew install gcc-c++; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  278 + echo "install gcc-c++ success"
  279 + fi
  280 +
  281 + make --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  282 + echo "install make"
  283 + echo "brew install make"
  284 + brew install make; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  285 + echo "install make success"
  286 + fi
  287 +
  288 + patch --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  289 + echo "install patch"
  290 + echo "brew install patch"
  291 + brew install patch; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  292 + echo "install patch success"
  293 + fi
  294 +
  295 + unzip --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  296 + echo "install unzip"
  297 + echo "brew install unzip"
  298 + brew install unzip; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  299 + echo "install unzip success"
  300 + fi
  301 +
  302 + if [ $SRS_FFMPEG_TOOL = YES ]; then
  303 + automake --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  304 + echo "install automake"
  305 + echo "brew install automake"
  306 + brew install automake; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  307 + echo "install automake success"
  308 + fi
  309 +
  310 + autoconf --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  311 + echo "install autoconf"
  312 + echo "brew install autoconf"
  313 + brew install autoconf; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  314 + echo "install autoconf success"
  315 + fi
  316 +
  317 + libtool --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
  318 + echo "install libtool"
  319 + echo "brew install libtool"
  320 + brew install libtool; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  321 + echo "install libtool success"
  322 + fi
  323 +
  324 + if [[ ! -f /usr/include/pcre.h ]]; then
  325 + echo "install pcre-devel"
  326 + echo "brew install pcre-devel"
  327 + brew install pcre-devel; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  328 + echo "install pcre-devel success"
  329 + fi
  330 +
  331 + if [[ ! -f /usr/include/zlib.h ]]; then
  332 + echo "install zlib-devel"
  333 + echo "brew install zlib-devel"
  334 + brew install zlib-devel; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
  335 + echo "install zlib-devel success"
  336 + fi
  337 + fi
  338 +
  339 + echo "OSX install tools success"
230 return 0 340 return 0
231 } 341 }
232 # donot prepare tools, for srs-librtmp depends only gcc and g++. 342 # donot prepare tools, for srs-librtmp depends only gcc and g++.
233 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then 343 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
234 - Centos_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "CentOS prepare failed, ret=$ret"; exit $ret; fi 344 + OSX_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "OSX prepare failed, ret=$ret"; exit $ret; fi
  345 +fi
  346 +# requires the osx when os
  347 +if [ $OS_IS_OSX = YES ]; then
  348 + if [ $SRS_OSX = NO ]; then
  349 + echo "OSX detected, must specifies the --osx"
  350 + exit 1
  351 + fi
  352 + if [ $SRS_HTTP_API = YES ]; then
  353 + echo "OSX does not support http-api, use --without-http-api"
  354 + exit 1
  355 + fi
  356 + if [ $SRS_STAT = YES ]; then
  357 + echo "OSX does not support stat, use --without-stat"
  358 + exit 1
  359 + fi
235 fi 360 fi
236 361
237 ##################################################################################### 362 #####################################################################################
@@ -239,7 +364,11 @@ fi @@ -239,7 +364,11 @@ fi
239 ##################################################################################### 364 #####################################################################################
240 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then 365 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
241 # check the arm flag file, if flag changed, need to rebuild the st. 366 # check the arm flag file, if flag changed, need to rebuild the st.
242 - _ST_MAKE=linux-debug 367 + _ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_EPOLL"
  368 + # for osx, use darwin for st, donot use epoll.
  369 + if [ $OS_IS_OSX = YES ]; then
  370 + _ST_MAKE=darwin-debug && _ST_EXTRA_CFLAGS=""
  371 + fi
243 # memory leak for linux-optimized 372 # memory leak for linux-optimized
244 # @see: https://github.com/winlinvip/simple-rtmp-server/issues/197 373 # @see: https://github.com/winlinvip/simple-rtmp-server/issues/197
245 if [ $SRS_EMBEDED_CPU = YES ]; then 374 if [ $SRS_EMBEDED_CPU = YES ]; then
@@ -253,9 +382,9 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then @@ -253,9 +382,9 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
253 ( 382 (
254 rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && 383 rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} &&
255 unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 && 384 unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 &&
256 - patch -p0 < ../../3rdparty/patches/1.st.arm.patch && 385 + patch -p0 -R < ../../3rdparty/patches/1.st.arm.patch &&
257 make CC=${SrsArmCC} AR=${SrsArmAR} LD=${SrsArmLD} RANDLIB=${SrsArmRANDLIB} \ 386 make CC=${SrsArmCC} AR=${SrsArmAR} LD=${SrsArmLD} RANDLIB=${SrsArmRANDLIB} \
258 - EXTRA_CFLAGS="-DMD_HAVE_EPOLL" ${_ST_MAKE} && 387 + EXTRA_CFLAGS=${_ST_EXTRA_CFLAGS} ${_ST_MAKE} &&
259 cd .. && rm -rf st && ln -sf st-1.9/obj st && 388 cd .. && rm -rf st && ln -sf st-1.9/obj st &&
260 cd .. && touch ${SRS_OBJS}/_flag.st.arm.tmp 389 cd .. && touch ${SRS_OBJS}/_flag.st.arm.tmp
261 ) 390 )
@@ -268,7 +397,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then @@ -268,7 +397,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
268 ( 397 (
269 rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && 398 rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} &&
270 unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 && 399 unzip -q ../3rdparty/st-1.9.zip && cd st-1.9 &&
271 - make ${_ST_MAKE} EXTRA_CFLAGS="-DMD_HAVE_EPOLL" && 400 + make ${_ST_MAKE} ${_ST_EXTRA_CFLAGS} &&
272 cd .. && rm -rf st && ln -sf st-1.9/obj st && 401 cd .. && rm -rf st && ln -sf st-1.9/obj st &&
273 cd .. && rm -f ${SRS_OBJS}/_flag.st.arm.tmp 402 cd .. && rm -f ${SRS_OBJS}/_flag.st.arm.tmp
274 ) 403 )
@@ -293,6 +422,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then @@ -293,6 +422,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then
293 ( 422 (
294 rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip && 423 rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip &&
295 cd http-parser-2.1 && 424 cd http-parser-2.1 &&
  425 + patch -p0 -R < ../../3rdparty/patches/2.http.parser.patch &&
296 sed -i "s/CPPFLAGS_FAST +=.*$/CPPFLAGS_FAST = \$\(CPPFLAGS_DEBUG\)/g" Makefile && 426 sed -i "s/CPPFLAGS_FAST +=.*$/CPPFLAGS_FAST = \$\(CPPFLAGS_DEBUG\)/g" Makefile &&
297 sed -i "s/CFLAGS_FAST =.*$/CFLAGS_FAST = \$\(CFLAGS_DEBUG\)/g" Makefile && 427 sed -i "s/CFLAGS_FAST =.*$/CFLAGS_FAST = \$\(CFLAGS_DEBUG\)/g" Makefile &&
298 make CC=${SrsArmCC} AR=${SrsArmAR} package && 428 make CC=${SrsArmCC} AR=${SrsArmAR} package &&
@@ -309,8 +439,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then @@ -309,8 +439,7 @@ if [ $SRS_HTTP_PARSER = YES ]; then
309 ( 439 (
310 rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip && 440 rm -rf ${SRS_OBJS}/http-parser-2.1 && cd ${SRS_OBJS} && unzip -q ../3rdparty/http-parser-2.1.zip &&
311 cd http-parser-2.1 && 441 cd http-parser-2.1 &&
312 - sed -i "s/CPPFLAGS_FAST +=.*$/CPPFLAGS_FAST = \$\(CPPFLAGS_DEBUG\)/g" Makefile &&  
313 - sed -i "s/CFLAGS_FAST =.*$/CFLAGS_FAST = \$\(CFLAGS_DEBUG\)/g" Makefile && 442 + patch -p0 -R < ../../3rdparty/patches/2.http.parser.patch &&
314 make package && 443 make package &&
315 cd .. && rm -rf hp && ln -sf http-parser-2.1 hp && 444 cd .. && rm -rf hp && ln -sf http-parser-2.1 hp &&
316 cd .. && rm -f ${SRS_OBJS}/_flag.st.hp.tmp 445 cd .. && rm -f ${SRS_OBJS}/_flag.st.hp.tmp
@@ -402,7 +531,7 @@ if [ $SRS_HTTP_CALLBACK = YES ]; then @@ -402,7 +531,7 @@ if [ $SRS_HTTP_CALLBACK = YES ]; then
402 if [[ -f ${SRS_OBJS}/CherryPy-3.2.4/setup.py ]]; then 531 if [[ -f ${SRS_OBJS}/CherryPy-3.2.4/setup.py ]]; then
403 echo "CherryPy-3.2.4 is ok."; 532 echo "CherryPy-3.2.4 is ok.";
404 else 533 else
405 - require_sudoer "configure --with-http-callback" 534 + require_sudoer "install CherryPy-3.2.4"
406 echo "install CherryPy-3.2.4"; 535 echo "install CherryPy-3.2.4";
407 ( 536 (
408 sudo rm -rf ${SRS_OBJS}/CherryPy-3.2.4 && cd ${SRS_OBJS} && 537 sudo rm -rf ${SRS_OBJS}/CherryPy-3.2.4 && cd ${SRS_OBJS} &&
@@ -454,9 +583,11 @@ fi @@ -454,9 +583,11 @@ fi
454 ##################################################################################### 583 #####################################################################################
455 # extra configure options 584 # extra configure options
456 CONFIGURE_TOOL="./config" 585 CONFIGURE_TOOL="./config"
457 -EXTRA_CONFIGURE=""  
458 if [ $SRS_EMBEDED_CPU = YES ]; then 586 if [ $SRS_EMBEDED_CPU = YES ]; then
459 - CONFIGURE_TOOL="./Configure" 587 + CONFIGURE_TOOL="./Configure linux-armv4"
  588 +fi
  589 +if [ $SRS_OSX = YES ]; then
  590 + CONFIGURE_TOOL="./Configure darwin64-`uname -m`-cc"
460 fi 591 fi
461 # @see http://www.openssl.org/news/secadv_20140407.txt 592 # @see http://www.openssl.org/news/secadv_20140407.txt
462 # Affected users should upgrade to OpenSSL 1.0.1g. Users unable to immediately 593 # Affected users should upgrade to OpenSSL 1.0.1g. Users unable to immediately
@@ -475,7 +606,7 @@ if [ $SRS_SSL = YES ]; then @@ -475,7 +606,7 @@ if [ $SRS_SSL = YES ]; then
475 ( 606 (
476 rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} && 607 rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} &&
477 unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f && 608 unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f &&
478 - $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared no-asm linux-armv4 -DOPENSSL_NO_HEARTBEATS ${EXTRA_CONFIGURE} && 609 + $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared no-asm &&
479 make CC=${SrsArmCC} GCC=${SrsArmGCC} AR="${SrsArmAR} r" \ 610 make CC=${SrsArmCC} GCC=${SrsArmGCC} AR="${SrsArmAR} r" \
480 LD=${SrsArmLD} LINK=${SrsArmGCC} RANDLIB=${SrsArmRANDLIB} && 611 LD=${SrsArmLD} LINK=${SrsArmGCC} RANDLIB=${SrsArmRANDLIB} &&
481 make install_sw && 612 make install_sw &&
@@ -492,7 +623,7 @@ if [ $SRS_SSL = YES ]; then @@ -492,7 +623,7 @@ if [ $SRS_SSL = YES ]; then
492 ( 623 (
493 rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} && 624 rm -rf ${SRS_OBJS}/openssl-1.0.1f && cd ${SRS_OBJS} &&
494 unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f && 625 unzip -q ../3rdparty/openssl-1.0.1f.zip && cd openssl-1.0.1f &&
495 - $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared -DOPENSSL_NO_HEARTBEATS ${EXTRA_CONFIGURE} && 626 + $CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared &&
496 make && make install_sw && 627 make && make install_sw &&
497 cd .. && rm -rf openssl && ln -sf openssl-1.0.1f/_release openssl && 628 cd .. && rm -rf openssl && ln -sf openssl-1.0.1f/_release openssl &&
498 cd .. && rm -f ${SRS_OBJS}/_flag.ssl.arm.tmp 629 cd .. && rm -f ${SRS_OBJS}/_flag.ssl.arm.tmp
@@ -68,6 +68,8 @@ SRS_EXPORT_LIBRTMP_SINGLE=NO @@ -68,6 +68,8 @@ SRS_EXPORT_LIBRTMP_SINGLE=NO
68 # presets 68 # presets
69 # for x86/x64 pc/servers 69 # for x86/x64 pc/servers
70 SRS_X86_X64=NO 70 SRS_X86_X64=NO
  71 +# for osx system
  72 +SRS_OSX=NO
71 # armhf(v7cpu) built on ubuntu12 73 # armhf(v7cpu) built on ubuntu12
72 SRS_ARM_UBUNTU12=NO 74 SRS_ARM_UBUNTU12=NO
73 # mips built on ubuntu12 75 # mips built on ubuntu12
@@ -166,6 +168,7 @@ Options: @@ -166,6 +168,7 @@ Options:
166 168
167 Presets: 169 Presets:
168 --x86-x64 [default] for x86/x64 cpu, common pc and servers. 170 --x86-x64 [default] for x86/x64 cpu, common pc and servers.
  171 + --osx for osx(darwin) system to build SRS.
169 --pi for raspberry-pi(directly build), open features hls/ssl/static. 172 --pi for raspberry-pi(directly build), open features hls/ssl/static.
170 --cubie for cubieboard(directly build), open features except ffmpeg/nginx. 173 --cubie for cubieboard(directly build), open features except ffmpeg/nginx.
171 --arm alias for --with-arm-ubuntu12, for ubuntu12, arm crossbuild 174 --arm alias for --with-arm-ubuntu12, for ubuntu12, arm crossbuild
@@ -260,6 +263,7 @@ function parse_user_option() { @@ -260,6 +263,7 @@ function parse_user_option() {
260 --log-trace) SRS_LOG_TRACE=YES ;; 263 --log-trace) SRS_LOG_TRACE=YES ;;
261 264
262 --x86-x64) SRS_X86_X64=YES ;; 265 --x86-x64) SRS_X86_X64=YES ;;
  266 + --osx) SRS_OSX=YES ;;
263 --arm) SRS_ARM_UBUNTU12=YES ;; 267 --arm) SRS_ARM_UBUNTU12=YES ;;
264 --mips) SRS_MIPS_UBUNTU12=YES ;; 268 --mips) SRS_MIPS_UBUNTU12=YES ;;
265 --pi) SRS_PI=YES ;; 269 --pi) SRS_PI=YES ;;
@@ -331,7 +335,9 @@ function apply_user_presets() { @@ -331,7 +335,9 @@ function apply_user_presets() {
331 if [ $SRS_PI = NO ]; then 335 if [ $SRS_PI = NO ]; then
332 if [ $SRS_CUBIE = NO ]; then 336 if [ $SRS_CUBIE = NO ]; then
333 if [ $SRS_X86_X64 = NO ]; then 337 if [ $SRS_X86_X64 = NO ]; then
334 - SRS_X86_X64=YES; opt="--x86-x64 $opt"; 338 + if [ $SRS_OSX = NO ]; then
  339 + SRS_X86_X64=YES; opt="--x86-x64 $opt";
  340 + fi
335 fi 341 fi
336 fi 342 fi
337 fi 343 fi
@@ -551,7 +557,7 @@ function apply_user_presets() { @@ -551,7 +557,7 @@ function apply_user_presets() {
551 SRS_HTTP_CALLBACK=YES 557 SRS_HTTP_CALLBACK=YES
552 SRS_HTTP_SERVER=YES 558 SRS_HTTP_SERVER=YES
553 SRS_STREAM_CASTER=YES 559 SRS_STREAM_CASTER=YES
554 - SRS_HTTP_API=YES 560 + SRS_HTTP_API=NO
555 SRS_LIBRTMP=YES 561 SRS_LIBRTMP=YES
556 SRS_RESEARCH=NO 562 SRS_RESEARCH=NO
557 SRS_UTEST=YES 563 SRS_UTEST=YES
@@ -563,6 +569,32 @@ function apply_user_presets() { @@ -563,6 +569,32 @@ function apply_user_presets() {
563 SRS_STATIC=NO 569 SRS_STATIC=NO
564 fi 570 fi
565 571
  572 + # for osx(darwin)
  573 + if [ $SRS_OSX = YES ]; then
  574 + SRS_HLS=YES
  575 + SRS_DVR=YES
  576 + SRS_NGINX=NO
  577 + SRS_SSL=YES
  578 + SRS_FFMPEG_TOOL=NO
  579 + SRS_TRANSCODE=YES
  580 + SRS_INGEST=YES
  581 + SRS_STAT=NO
  582 + SRS_HTTP_PARSER=YES
  583 + SRS_HTTP_CALLBACK=YES
  584 + SRS_HTTP_SERVER=YES
  585 + SRS_STREAM_CASTER=YES
  586 + SRS_HTTP_API=NO
  587 + SRS_LIBRTMP=YES
  588 + SRS_RESEARCH=NO
  589 + SRS_UTEST=NO
  590 + SRS_GPERF=NO
  591 + SRS_GPERF_MC=NO
  592 + SRS_GPERF_MP=NO
  593 + SRS_GPERF_CP=NO
  594 + SRS_GPROF=NO
  595 + SRS_STATIC=NO
  596 + fi
  597 +
566 # if dev specified, open features if possible. 598 # if dev specified, open features if possible.
567 if [ $SRS_DEV = YES ]; then 599 if [ $SRS_DEV = YES ]; then
568 SRS_HLS=YES 600 SRS_HLS=YES
@@ -11,10 +11,10 @@ mkdir -p ${SRS_OBJS} @@ -11,10 +11,10 @@ mkdir -p ${SRS_OBJS}
11 11
12 ##################################################################################### 12 #####################################################################################
13 # linux shell color support. 13 # linux shell color support.
14 -RED="\\e[31m"  
15 -GREEN="\\e[32m"  
16 -YELLOW="\\e[33m"  
17 -BLACK="\\e[0m" 14 +RED="\\033[31m"
  15 +GREEN="\\033[32m"
  16 +YELLOW="\\033[33m"
  17 +BLACK="\\033[0m"
18 18
19 ##################################################################################### 19 #####################################################################################
20 # parse user options, set the variables like: 20 # parse user options, set the variables like:
@@ -21,11 +21,11 @@ DEFAULT_LOG_FILE='./objs/srs.log' @@ -21,11 +21,11 @@ DEFAULT_LOG_FILE='./objs/srs.log'
21 ######################################################################## 21 ########################################################################
22 # utility functions 22 # utility functions
23 ######################################################################## 23 ########################################################################
24 -RED="\\e[31m"  
25 -GREEN="\\e[32m"  
26 -YELLOW="\\e[33m"  
27 -BLACK="\\e[0m"  
28 -POS="\\e[60G" 24 +RED="\\033[31m"
  25 +GREEN="\\033[32m"
  26 +YELLOW="\\033[33m"
  27 +BLACK="\\033[0m"
  28 +POS="\\033[60G"
29 29
30 ok_msg() { 30 ok_msg() {
31 echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" 31 echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]"
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 3C1231F61AAE652D00CE8F6C /* srs_core_autofree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F01AAE652C00CE8F6C /* srs_core_autofree.cpp */; };
  11 + 3C1231F71AAE652D00CE8F6C /* srs_core_performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F21AAE652C00CE8F6C /* srs_core_performance.cpp */; };
  12 + 3C1231F81AAE652D00CE8F6C /* srs_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */; };
  13 + 3C1232061AAE812C00CE8F6C /* srs_main_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232051AAE812C00CE8F6C /* srs_main_server.cpp */; };
  14 + 3C1232201AAE814D00CE8F6C /* srs_kernel_aac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232081AAE814D00CE8F6C /* srs_kernel_aac.cpp */; };
  15 + 3C1232211AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320A1AAE814D00CE8F6C /* srs_kernel_buffer.cpp */; };
  16 + 3C1232221AAE814D00CE8F6C /* srs_kernel_codec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320C1AAE814D00CE8F6C /* srs_kernel_codec.cpp */; };
  17 + 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12320E1AAE814D00CE8F6C /* srs_kernel_consts.cpp */; };
  18 + 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232101AAE814D00CE8F6C /* srs_kernel_error.cpp */; };
  19 + 3C1232251AAE814D00CE8F6C /* srs_kernel_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232121AAE814D00CE8F6C /* srs_kernel_file.cpp */; };
  20 + 3C1232261AAE814D00CE8F6C /* srs_kernel_flv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */; };
  21 + 3C1232271AAE814D00CE8F6C /* srs_kernel_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */; };
  22 + 3C1232281AAE814D00CE8F6C /* srs_kernel_mp3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */; };
  23 + 3C1232291AAE814D00CE8F6C /* srs_kernel_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321A1AAE814D00CE8F6C /* srs_kernel_stream.cpp */; };
  24 + 3C12322A1AAE814D00CE8F6C /* srs_kernel_ts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321C1AAE814D00CE8F6C /* srs_kernel_ts.cpp */; };
  25 + 3C12322B1AAE814D00CE8F6C /* srs_kernel_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12321E1AAE814D00CE8F6C /* srs_kernel_utility.cpp */; };
  26 + 3C1232411AAE81A400CE8F6C /* srs_raw_avc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12322D1AAE81A400CE8F6C /* srs_raw_avc.cpp */; };
  27 + 3C1232421AAE81A400CE8F6C /* srs_rtmp_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12322F1AAE81A400CE8F6C /* srs_rtmp_amf0.cpp */; };
  28 + 3C1232431AAE81A400CE8F6C /* srs_rtmp_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232311AAE81A400CE8F6C /* srs_rtmp_buffer.cpp */; };
  29 + 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232331AAE81A400CE8F6C /* srs_rtmp_handshake.cpp */; };
  30 + 3C1232451AAE81A400CE8F6C /* srs_rtmp_io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232351AAE81A400CE8F6C /* srs_rtmp_io.cpp */; };
  31 + 3C1232461AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232371AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp */; };
  32 + 3C1232471AAE81A400CE8F6C /* srs_rtmp_sdk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232391AAE81A400CE8F6C /* srs_rtmp_sdk.cpp */; };
  33 + 3C1232481AAE81A400CE8F6C /* srs_rtmp_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323B1AAE81A400CE8F6C /* srs_rtmp_stack.cpp */; };
  34 + 3C1232491AAE81A400CE8F6C /* srs_rtmp_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323D1AAE81A400CE8F6C /* srs_rtmp_utility.cpp */; };
  35 + 3C12324A1AAE81A400CE8F6C /* srs_rtsp_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12323F1AAE81A400CE8F6C /* srs_rtsp_stack.cpp */; };
  36 + 3C1232941AAE81D900CE8F6C /* srs_app_bandwidth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12324C1AAE81D900CE8F6C /* srs_app_bandwidth.cpp */; };
  37 + 3C1232951AAE81D900CE8F6C /* srs_app_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12324E1AAE81D900CE8F6C /* srs_app_config.cpp */; };
  38 + 3C1232961AAE81D900CE8F6C /* srs_app_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232501AAE81D900CE8F6C /* srs_app_conn.cpp */; };
  39 + 3C1232971AAE81D900CE8F6C /* srs_app_dvr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232521AAE81D900CE8F6C /* srs_app_dvr.cpp */; };
  40 + 3C1232981AAE81D900CE8F6C /* srs_app_edge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232541AAE81D900CE8F6C /* srs_app_edge.cpp */; };
  41 + 3C1232991AAE81D900CE8F6C /* srs_app_empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232561AAE81D900CE8F6C /* srs_app_empty.cpp */; };
  42 + 3C12329A1AAE81D900CE8F6C /* srs_app_encoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232581AAE81D900CE8F6C /* srs_app_encoder.cpp */; };
  43 + 3C12329B1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325A1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp */; };
  44 + 3C12329C1AAE81D900CE8F6C /* srs_app_forward.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325C1AAE81D900CE8F6C /* srs_app_forward.cpp */; };
  45 + 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12325E1AAE81D900CE8F6C /* srs_app_heartbeat.cpp */; };
  46 + 3C12329E1AAE81D900CE8F6C /* srs_app_hls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232601AAE81D900CE8F6C /* srs_app_hls.cpp */; };
  47 + 3C12329F1AAE81D900CE8F6C /* srs_app_http_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232621AAE81D900CE8F6C /* srs_app_http_api.cpp */; };
  48 + 3C1232A01AAE81D900CE8F6C /* srs_app_http_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232641AAE81D900CE8F6C /* srs_app_http_client.cpp */; };
  49 + 3C1232A11AAE81D900CE8F6C /* srs_app_http_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232661AAE81D900CE8F6C /* srs_app_http_conn.cpp */; };
  50 + 3C1232A21AAE81D900CE8F6C /* srs_app_http_hooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232681AAE81D900CE8F6C /* srs_app_http_hooks.cpp */; };
  51 + 3C1232A31AAE81D900CE8F6C /* srs_app_http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326A1AAE81D900CE8F6C /* srs_app_http.cpp */; };
  52 + 3C1232A41AAE81D900CE8F6C /* srs_app_ingest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326C1AAE81D900CE8F6C /* srs_app_ingest.cpp */; };
  53 + 3C1232A51AAE81D900CE8F6C /* srs_app_json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12326E1AAE81D900CE8F6C /* srs_app_json.cpp */; };
  54 + 3C1232A61AAE81D900CE8F6C /* srs_app_kbps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232701AAE81D900CE8F6C /* srs_app_kbps.cpp */; };
  55 + 3C1232A71AAE81D900CE8F6C /* srs_app_listener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232721AAE81D900CE8F6C /* srs_app_listener.cpp */; };
  56 + 3C1232A81AAE81D900CE8F6C /* srs_app_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232741AAE81D900CE8F6C /* srs_app_log.cpp */; };
  57 + 3C1232A91AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232761AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp */; };
  58 + 3C1232AA1AAE81D900CE8F6C /* srs_app_pithy_print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232781AAE81D900CE8F6C /* srs_app_pithy_print.cpp */; };
  59 + 3C1232AB1AAE81D900CE8F6C /* srs_app_recv_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327A1AAE81D900CE8F6C /* srs_app_recv_thread.cpp */; };
  60 + 3C1232AC1AAE81D900CE8F6C /* srs_app_refer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327C1AAE81D900CE8F6C /* srs_app_refer.cpp */; };
  61 + 3C1232AD1AAE81D900CE8F6C /* srs_app_reload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12327E1AAE81D900CE8F6C /* srs_app_reload.cpp */; };
  62 + 3C1232AE1AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232801AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp */; };
  63 + 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232821AAE81D900CE8F6C /* srs_app_rtsp.cpp */; };
  64 + 3C1232B01AAE81D900CE8F6C /* srs_app_security.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232841AAE81D900CE8F6C /* srs_app_security.cpp */; };
  65 + 3C1232B11AAE81D900CE8F6C /* srs_app_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232861AAE81D900CE8F6C /* srs_app_server.cpp */; };
  66 + 3C1232B21AAE81D900CE8F6C /* srs_app_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232881AAE81D900CE8F6C /* srs_app_source.cpp */; };
  67 + 3C1232B31AAE81D900CE8F6C /* srs_app_st_socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328A1AAE81D900CE8F6C /* srs_app_st_socket.cpp */; };
  68 + 3C1232B41AAE81D900CE8F6C /* srs_app_st.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328C1AAE81D900CE8F6C /* srs_app_st.cpp */; };
  69 + 3C1232B51AAE81D900CE8F6C /* srs_app_statistic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C12328E1AAE81D900CE8F6C /* srs_app_statistic.cpp */; };
  70 + 3C1232B61AAE81D900CE8F6C /* srs_app_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232901AAE81D900CE8F6C /* srs_app_thread.cpp */; };
  71 + 3C1232B71AAE81D900CE8F6C /* srs_app_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C1232921AAE81D900CE8F6C /* srs_app_utility.cpp */; };
  72 + 3C1232D31AAEA56B00CE8F6C /* libst.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232D21AAEA56B00CE8F6C /* libst.a */; };
  73 + 3C1232E91AAEA5D000CE8F6C /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */; };
  74 + 3C1232EA1AAEA5D000CE8F6C /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232E81AAEA5D000CE8F6C /* libssl.a */; };
  75 + 3C1232ED1AAEA70F00CE8F6C /* libhttp_parser.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */; };
  76 +/* End PBXBuildFile section */
  77 +
  78 +/* Begin PBXCopyFilesBuildPhase section */
  79 + 3C1231E31AAE64A400CE8F6C /* CopyFiles */ = {
  80 + isa = PBXCopyFilesBuildPhase;
  81 + buildActionMask = 2147483647;
  82 + dstPath = /usr/share/man/man1/;
  83 + dstSubfolderSpec = 0;
  84 + files = (
  85 + );
  86 + runOnlyForDeploymentPostprocessing = 1;
  87 + };
  88 +/* End PBXCopyFilesBuildPhase section */
  89 +
  90 +/* Begin PBXFileReference section */
  91 + 3C1231E51AAE64A400CE8F6C /* srs_xcode */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; includeInIndex = 0; path = srs_xcode; sourceTree = BUILT_PRODUCTS_DIR; };
  92 + 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 = "<group>"; };
  93 + 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 = "<group>"; };
  94 + 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 = "<group>"; };
  95 + 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 = "<group>"; };
  96 + 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_core.cpp; path = ../../../src/core/srs_core.cpp; sourceTree = "<group>"; };
  97 + 3C1231F51AAE652D00CE8F6C /* srs_core.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_core.hpp; path = ../../../src/core/srs_core.hpp; sourceTree = "<group>"; };
  98 + 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 = "<group>"; };
  99 + 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 = "<group>"; };
  100 + 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 = "<group>"; };
  101 + 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 = "<group>"; };
  102 + 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 = "<group>"; };
  103 + 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 = "<group>"; };
  104 + 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 = "<group>"; };
  105 + 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 = "<group>"; };
  106 + 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 = "<group>"; };
  107 + 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 = "<group>"; };
  108 + 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 = "<group>"; };
  109 + 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 = "<group>"; };
  110 + 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 = "<group>"; };
  111 + 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 = "<group>"; };
  112 + 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 = "<group>"; };
  113 + 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 = "<group>"; };
  114 + 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 = "<group>"; };
  115 + 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 = "<group>"; };
  116 + 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 = "<group>"; };
  117 + 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 = "<group>"; };
  118 + 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 = "<group>"; };
  119 + 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 = "<group>"; };
  120 + 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 = "<group>"; };
  121 + 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 = "<group>"; };
  122 + 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 = "<group>"; };
  123 + 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 = "<group>"; };
  124 + 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 = "<group>"; };
  125 + 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 = "<group>"; };
  126 + 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 = "<group>"; };
  127 + 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 = "<group>"; };
  128 + 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 = "<group>"; };
  129 + 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 = "<group>"; };
  130 + 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 = "<group>"; };
  131 + 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 = "<group>"; };
  132 + 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 = "<group>"; };
  133 + 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 = "<group>"; };
  134 + 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 = "<group>"; };
  135 + 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 = "<group>"; };
  136 + 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 = "<group>"; };
  137 + 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 = "<group>"; };
  138 + 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 = "<group>"; };
  139 + 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 = "<group>"; };
  140 + 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 = "<group>"; };
  141 + 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 = "<group>"; };
  142 + 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 = "<group>"; };
  143 + 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 = "<group>"; };
  144 + 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 = "<group>"; };
  145 + 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 = "<group>"; };
  146 + 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 = "<group>"; };
  147 + 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 = "<group>"; };
  148 + 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 = "<group>"; };
  149 + 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 = "<group>"; };
  150 + 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 = "<group>"; };
  151 + 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 = "<group>"; };
  152 + 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 = "<group>"; };
  153 + 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 = "<group>"; };
  154 + 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 = "<group>"; };
  155 + 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 = "<group>"; };
  156 + 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 = "<group>"; };
  157 + 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 = "<group>"; };
  158 + 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 = "<group>"; };
  159 + 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 = "<group>"; };
  160 + 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 = "<group>"; };
  161 + 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 = "<group>"; };
  162 + 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 = "<group>"; };
  163 + 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 = "<group>"; };
  164 + 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 = "<group>"; };
  165 + 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 = "<group>"; };
  166 + 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 = "<group>"; };
  167 + 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 = "<group>"; };
  168 + 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 = "<group>"; };
  169 + 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 = "<group>"; };
  170 + 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 = "<group>"; };
  171 + 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 = "<group>"; };
  172 + 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 = "<group>"; };
  173 + 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 = "<group>"; };
  174 + 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 = "<group>"; };
  175 + 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 = "<group>"; };
  176 + 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 = "<group>"; };
  177 + 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 = "<group>"; };
  178 + 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 = "<group>"; };
  179 + 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 = "<group>"; };
  180 + 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 = "<group>"; };
  181 + 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 = "<group>"; };
  182 + 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 = "<group>"; };
  183 + 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 = "<group>"; };
  184 + 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 = "<group>"; };
  185 + 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 = "<group>"; };
  186 + 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 = "<group>"; };
  187 + 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 = "<group>"; };
  188 + 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 = "<group>"; };
  189 + 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 = "<group>"; };
  190 + 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 = "<group>"; };
  191 + 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 = "<group>"; };
  192 + 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 = "<group>"; };
  193 + 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 = "<group>"; };
  194 + 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 = "<group>"; };
  195 + 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 = "<group>"; };
  196 + 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 = "<group>"; };
  197 + 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 = "<group>"; };
  198 + 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 = "<group>"; };
  199 + 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 = "<group>"; };
  200 + 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 = "<group>"; };
  201 + 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 = "<group>"; };
  202 + 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 = "<group>"; };
  203 + 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 = "<group>"; };
  204 + 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 = "<group>"; };
  205 + 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 = "<group>"; };
  206 + 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 = "<group>"; };
  207 + 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 = "<group>"; };
  208 + 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 = "<group>"; };
  209 + 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 = "<group>"; };
  210 + 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 = "<group>"; };
  211 + 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 = "<group>"; };
  212 + 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 = "<group>"; };
  213 + 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 = "<group>"; };
  214 + 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 = "<group>"; };
  215 + 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 = "<group>"; };
  216 + 3C1232B81AAE824500CE8F6C /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = configure; path = ../../../configure; sourceTree = "<group>"; };
  217 + 3C1232BB1AAE827E00CE8F6C /* apps.sh */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; name = apps.sh; path = ../../../auto/apps.sh; sourceTree = "<group>"; };
  218 + 3C1232BC1AAE827E00CE8F6C /* auto_headers.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = auto_headers.sh; path = ../../../auto/auto_headers.sh; sourceTree = "<group>"; };
  219 + 3C1232BD1AAE827E00CE8F6C /* build_ffmpeg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = build_ffmpeg.sh; path = ../../../auto/build_ffmpeg.sh; sourceTree = "<group>"; };
  220 + 3C1232BE1AAE827E00CE8F6C /* depends.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = depends.sh; path = ../../../auto/depends.sh; sourceTree = "<group>"; };
  221 + 3C1232BF1AAE827E00CE8F6C /* generate_header.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = generate_header.sh; path = ../../../auto/generate_header.sh; sourceTree = "<group>"; };
  222 + 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 = "<group>"; };
  223 + 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 = "<group>"; };
  224 + 3C1232C21AAE827E00CE8F6C /* libs.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = libs.sh; path = ../../../auto/libs.sh; sourceTree = "<group>"; };
  225 + 3C1232C31AAE827E00CE8F6C /* local_ip.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = local_ip.sh; path = ../../../auto/local_ip.sh; sourceTree = "<group>"; };
  226 + 3C1232C41AAE827E00CE8F6C /* modules.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = modules.sh; path = ../../../auto/modules.sh; sourceTree = "<group>"; };
  227 + 3C1232C51AAE827E00CE8F6C /* options.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = options.sh; path = ../../../auto/options.sh; sourceTree = "<group>"; };
  228 + 3C1232C61AAE827E00CE8F6C /* summary.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = summary.sh; path = ../../../auto/summary.sh; sourceTree = "<group>"; };
  229 + 3C1232C71AAE827E00CE8F6C /* utest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = utest.sh; path = ../../../auto/utest.sh; sourceTree = "<group>"; };
  230 + 3C1232C81AAE833300CE8F6C /* _log.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = _log.sh; path = ../../../scripts/_log.sh; sourceTree = "<group>"; };
  231 + 3C1232C91AAE833300CE8F6C /* build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = build.sh; path = ../../../scripts/build.sh; sourceTree = "<group>"; };
  232 + 3C1232CA1AAE833300CE8F6C /* git.commit.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = git.commit.sh; path = ../../../scripts/git.commit.sh; sourceTree = "<group>"; };
  233 + 3C1232CB1AAE833300CE8F6C /* git2unix.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = git2unix.sh; path = ../../../scripts/git2unix.sh; sourceTree = "<group>"; };
  234 + 3C1232CC1AAE833300CE8F6C /* install.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = install.sh; path = ../../../scripts/install.sh; sourceTree = "<group>"; };
  235 + 3C1232CD1AAE833300CE8F6C /* package.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = package.sh; path = ../../../scripts/package.sh; sourceTree = "<group>"; };
  236 + 3C1232CE1AAE833300CE8F6C /* run.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = run.sh; path = ../../../scripts/run.sh; sourceTree = "<group>"; };
  237 + 3C1232CF1AAE833300CE8F6C /* srs.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = srs.test; path = ../../../scripts/srs.test; sourceTree = "<group>"; };
  238 + 3C1232D01AAE833300CE8F6C /* stop.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = stop.sh; path = ../../../scripts/stop.sh; sourceTree = "<group>"; };
  239 + 3C1232D11AAE833300CE8F6C /* test_configure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = test_configure.sh; path = ../../../scripts/test_configure.sh; sourceTree = "<group>"; };
  240 + 3C1232D21AAEA56B00CE8F6C /* libst.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libst.a; path = "../../objs/st-1.9/DARWIN_14.0.0_DBG/libst.a"; sourceTree = "<group>"; };
  241 + 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "../../objs/openssl-1.0.1f/_release/lib/libcrypto.a"; sourceTree = "<group>"; };
  242 + 3C1232E81AAEA5D000CE8F6C /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "../../objs/openssl-1.0.1f/_release/lib/libssl.a"; sourceTree = "<group>"; };
  243 + 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libhttp_parser.a; path = "../../objs/http-parser-2.1/libhttp_parser.a"; sourceTree = "<group>"; };
  244 + 3C1232F11AAEAC7000CE8F6C /* srs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = srs; path = ../../../etc/init.d/srs; sourceTree = "<group>"; };
  245 + 3C1232F21AAEAC7000CE8F6C /* srs-api */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-api"; path = "../../../etc/init.d/srs-api"; sourceTree = "<group>"; };
  246 + 3C1232F31AAEAC7000CE8F6C /* srs-demo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-demo"; path = "../../../etc/init.d/srs-demo"; sourceTree = "<group>"; };
  247 + 3C1232F41AAEAC7000CE8F6C /* srs-demo-19350 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "srs-demo-19350"; path = "../../../etc/init.d/srs-demo-19350"; sourceTree = "<group>"; };
  248 +/* End PBXFileReference section */
  249 +
  250 +/* Begin PBXFrameworksBuildPhase section */
  251 + 3C1231E21AAE64A400CE8F6C /* Frameworks */ = {
  252 + isa = PBXFrameworksBuildPhase;
  253 + buildActionMask = 2147483647;
  254 + files = (
  255 + 3C1232ED1AAEA70F00CE8F6C /* libhttp_parser.a in Frameworks */,
  256 + 3C1232E91AAEA5D000CE8F6C /* libcrypto.a in Frameworks */,
  257 + 3C1232EA1AAEA5D000CE8F6C /* libssl.a in Frameworks */,
  258 + 3C1232D31AAEA56B00CE8F6C /* libst.a in Frameworks */,
  259 + );
  260 + runOnlyForDeploymentPostprocessing = 0;
  261 + };
  262 +/* End PBXFrameworksBuildPhase section */
  263 +
  264 +/* Begin PBXGroup section */
  265 + 3C1231DC1AAE64A400CE8F6C = {
  266 + isa = PBXGroup;
  267 + children = (
  268 + 3C1232EE1AAEA71C00CE8F6C /* links */,
  269 + 3C1231E71AAE64A400CE8F6C /* srs_xcode */,
  270 + 3C1231E61AAE64A400CE8F6C /* Products */,
  271 + );
  272 + sourceTree = "<group>";
  273 + };
  274 + 3C1231E61AAE64A400CE8F6C /* Products */ = {
  275 + isa = PBXGroup;
  276 + children = (
  277 + 3C1231E51AAE64A400CE8F6C /* srs_xcode */,
  278 + );
  279 + name = Products;
  280 + sourceTree = "<group>";
  281 + };
  282 + 3C1231E71AAE64A400CE8F6C /* srs_xcode */ = {
  283 + isa = PBXGroup;
  284 + children = (
  285 + 3C1232EF1AAEAC5800CE8F6C /* etc */,
  286 + 3C1232B81AAE824500CE8F6C /* configure */,
  287 + 3C1232BA1AAE826F00CE8F6C /* auto */,
  288 + 3C1232B91AAE825100CE8F6C /* scripts */,
  289 + 3C12324B1AAE81CE00CE8F6C /* app */,
  290 + 3C12322C1AAE819900CE8F6C /* protocol */,
  291 + 3C1232071AAE814200CE8F6C /* kernel */,
  292 + 3C1232041AAE80CB00CE8F6C /* main */,
  293 + 3C1231F91AAE670E00CE8F6C /* objs */,
  294 + 3C1231EF1AAE651100CE8F6C /* core */,
  295 + );
  296 + path = srs_xcode;
  297 + sourceTree = "<group>";
  298 + };
  299 + 3C1231EF1AAE651100CE8F6C /* core */ = {
  300 + isa = PBXGroup;
  301 + children = (
  302 + 3C1231F01AAE652C00CE8F6C /* srs_core_autofree.cpp */,
  303 + 3C1231F11AAE652C00CE8F6C /* srs_core_autofree.hpp */,
  304 + 3C1231F21AAE652C00CE8F6C /* srs_core_performance.cpp */,
  305 + 3C1231F31AAE652C00CE8F6C /* srs_core_performance.hpp */,
  306 + 3C1231F41AAE652D00CE8F6C /* srs_core.cpp */,
  307 + 3C1231F51AAE652D00CE8F6C /* srs_core.hpp */,
  308 + );
  309 + name = core;
  310 + sourceTree = "<group>";
  311 + };
  312 + 3C1231F91AAE670E00CE8F6C /* objs */ = {
  313 + isa = PBXGroup;
  314 + children = (
  315 + 3C1231FB1AAE673100CE8F6C /* srs_auto_headers.hpp */,
  316 + );
  317 + name = objs;
  318 + sourceTree = "<group>";
  319 + };
  320 + 3C1232041AAE80CB00CE8F6C /* main */ = {
  321 + isa = PBXGroup;
  322 + children = (
  323 + 3C1232051AAE812C00CE8F6C /* srs_main_server.cpp */,
  324 + );
  325 + name = main;
  326 + sourceTree = "<group>";
  327 + };
  328 + 3C1232071AAE814200CE8F6C /* kernel */ = {
  329 + isa = PBXGroup;
  330 + children = (
  331 + 3C1232081AAE814D00CE8F6C /* srs_kernel_aac.cpp */,
  332 + 3C1232091AAE814D00CE8F6C /* srs_kernel_aac.hpp */,
  333 + 3C12320A1AAE814D00CE8F6C /* srs_kernel_buffer.cpp */,
  334 + 3C12320B1AAE814D00CE8F6C /* srs_kernel_buffer.hpp */,
  335 + 3C12320C1AAE814D00CE8F6C /* srs_kernel_codec.cpp */,
  336 + 3C12320D1AAE814D00CE8F6C /* srs_kernel_codec.hpp */,
  337 + 3C12320E1AAE814D00CE8F6C /* srs_kernel_consts.cpp */,
  338 + 3C12320F1AAE814D00CE8F6C /* srs_kernel_consts.hpp */,
  339 + 3C1232101AAE814D00CE8F6C /* srs_kernel_error.cpp */,
  340 + 3C1232111AAE814D00CE8F6C /* srs_kernel_error.hpp */,
  341 + 3C1232121AAE814D00CE8F6C /* srs_kernel_file.cpp */,
  342 + 3C1232131AAE814D00CE8F6C /* srs_kernel_file.hpp */,
  343 + 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */,
  344 + 3C1232151AAE814D00CE8F6C /* srs_kernel_flv.hpp */,
  345 + 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */,
  346 + 3C1232171AAE814D00CE8F6C /* srs_kernel_log.hpp */,
  347 + 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */,
  348 + 3C1232191AAE814D00CE8F6C /* srs_kernel_mp3.hpp */,
  349 + 3C12321A1AAE814D00CE8F6C /* srs_kernel_stream.cpp */,
  350 + 3C12321B1AAE814D00CE8F6C /* srs_kernel_stream.hpp */,
  351 + 3C12321C1AAE814D00CE8F6C /* srs_kernel_ts.cpp */,
  352 + 3C12321D1AAE814D00CE8F6C /* srs_kernel_ts.hpp */,
  353 + 3C12321E1AAE814D00CE8F6C /* srs_kernel_utility.cpp */,
  354 + 3C12321F1AAE814D00CE8F6C /* srs_kernel_utility.hpp */,
  355 + );
  356 + name = kernel;
  357 + sourceTree = "<group>";
  358 + };
  359 + 3C12322C1AAE819900CE8F6C /* protocol */ = {
  360 + isa = PBXGroup;
  361 + children = (
  362 + 3C12322D1AAE81A400CE8F6C /* srs_raw_avc.cpp */,
  363 + 3C12322E1AAE81A400CE8F6C /* srs_raw_avc.hpp */,
  364 + 3C12322F1AAE81A400CE8F6C /* srs_rtmp_amf0.cpp */,
  365 + 3C1232301AAE81A400CE8F6C /* srs_rtmp_amf0.hpp */,
  366 + 3C1232311AAE81A400CE8F6C /* srs_rtmp_buffer.cpp */,
  367 + 3C1232321AAE81A400CE8F6C /* srs_rtmp_buffer.hpp */,
  368 + 3C1232331AAE81A400CE8F6C /* srs_rtmp_handshake.cpp */,
  369 + 3C1232341AAE81A400CE8F6C /* srs_rtmp_handshake.hpp */,
  370 + 3C1232351AAE81A400CE8F6C /* srs_rtmp_io.cpp */,
  371 + 3C1232361AAE81A400CE8F6C /* srs_rtmp_io.hpp */,
  372 + 3C1232371AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp */,
  373 + 3C1232381AAE81A400CE8F6C /* srs_rtmp_msg_array.hpp */,
  374 + 3C1232391AAE81A400CE8F6C /* srs_rtmp_sdk.cpp */,
  375 + 3C12323A1AAE81A400CE8F6C /* srs_rtmp_sdk.hpp */,
  376 + 3C12323B1AAE81A400CE8F6C /* srs_rtmp_stack.cpp */,
  377 + 3C12323C1AAE81A400CE8F6C /* srs_rtmp_stack.hpp */,
  378 + 3C12323D1AAE81A400CE8F6C /* srs_rtmp_utility.cpp */,
  379 + 3C12323E1AAE81A400CE8F6C /* srs_rtmp_utility.hpp */,
  380 + 3C12323F1AAE81A400CE8F6C /* srs_rtsp_stack.cpp */,
  381 + 3C1232401AAE81A400CE8F6C /* srs_rtsp_stack.hpp */,
  382 + );
  383 + name = protocol;
  384 + sourceTree = "<group>";
  385 + };
  386 + 3C12324B1AAE81CE00CE8F6C /* app */ = {
  387 + isa = PBXGroup;
  388 + children = (
  389 + 3C12324C1AAE81D900CE8F6C /* srs_app_bandwidth.cpp */,
  390 + 3C12324D1AAE81D900CE8F6C /* srs_app_bandwidth.hpp */,
  391 + 3C12324E1AAE81D900CE8F6C /* srs_app_config.cpp */,
  392 + 3C12324F1AAE81D900CE8F6C /* srs_app_config.hpp */,
  393 + 3C1232501AAE81D900CE8F6C /* srs_app_conn.cpp */,
  394 + 3C1232511AAE81D900CE8F6C /* srs_app_conn.hpp */,
  395 + 3C1232521AAE81D900CE8F6C /* srs_app_dvr.cpp */,
  396 + 3C1232531AAE81D900CE8F6C /* srs_app_dvr.hpp */,
  397 + 3C1232541AAE81D900CE8F6C /* srs_app_edge.cpp */,
  398 + 3C1232551AAE81D900CE8F6C /* srs_app_edge.hpp */,
  399 + 3C1232561AAE81D900CE8F6C /* srs_app_empty.cpp */,
  400 + 3C1232571AAE81D900CE8F6C /* srs_app_empty.hpp */,
  401 + 3C1232581AAE81D900CE8F6C /* srs_app_encoder.cpp */,
  402 + 3C1232591AAE81D900CE8F6C /* srs_app_encoder.hpp */,
  403 + 3C12325A1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp */,
  404 + 3C12325B1AAE81D900CE8F6C /* srs_app_ffmpeg.hpp */,
  405 + 3C12325C1AAE81D900CE8F6C /* srs_app_forward.cpp */,
  406 + 3C12325D1AAE81D900CE8F6C /* srs_app_forward.hpp */,
  407 + 3C12325E1AAE81D900CE8F6C /* srs_app_heartbeat.cpp */,
  408 + 3C12325F1AAE81D900CE8F6C /* srs_app_heartbeat.hpp */,
  409 + 3C1232601AAE81D900CE8F6C /* srs_app_hls.cpp */,
  410 + 3C1232611AAE81D900CE8F6C /* srs_app_hls.hpp */,
  411 + 3C1232621AAE81D900CE8F6C /* srs_app_http_api.cpp */,
  412 + 3C1232631AAE81D900CE8F6C /* srs_app_http_api.hpp */,
  413 + 3C1232641AAE81D900CE8F6C /* srs_app_http_client.cpp */,
  414 + 3C1232651AAE81D900CE8F6C /* srs_app_http_client.hpp */,
  415 + 3C1232661AAE81D900CE8F6C /* srs_app_http_conn.cpp */,
  416 + 3C1232671AAE81D900CE8F6C /* srs_app_http_conn.hpp */,
  417 + 3C1232681AAE81D900CE8F6C /* srs_app_http_hooks.cpp */,
  418 + 3C1232691AAE81D900CE8F6C /* srs_app_http_hooks.hpp */,
  419 + 3C12326A1AAE81D900CE8F6C /* srs_app_http.cpp */,
  420 + 3C12326B1AAE81D900CE8F6C /* srs_app_http.hpp */,
  421 + 3C12326C1AAE81D900CE8F6C /* srs_app_ingest.cpp */,
  422 + 3C12326D1AAE81D900CE8F6C /* srs_app_ingest.hpp */,
  423 + 3C12326E1AAE81D900CE8F6C /* srs_app_json.cpp */,
  424 + 3C12326F1AAE81D900CE8F6C /* srs_app_json.hpp */,
  425 + 3C1232701AAE81D900CE8F6C /* srs_app_kbps.cpp */,
  426 + 3C1232711AAE81D900CE8F6C /* srs_app_kbps.hpp */,
  427 + 3C1232721AAE81D900CE8F6C /* srs_app_listener.cpp */,
  428 + 3C1232731AAE81D900CE8F6C /* srs_app_listener.hpp */,
  429 + 3C1232741AAE81D900CE8F6C /* srs_app_log.cpp */,
  430 + 3C1232751AAE81D900CE8F6C /* srs_app_log.hpp */,
  431 + 3C1232761AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp */,
  432 + 3C1232771AAE81D900CE8F6C /* srs_app_mpegts_udp.hpp */,
  433 + 3C1232781AAE81D900CE8F6C /* srs_app_pithy_print.cpp */,
  434 + 3C1232791AAE81D900CE8F6C /* srs_app_pithy_print.hpp */,
  435 + 3C12327A1AAE81D900CE8F6C /* srs_app_recv_thread.cpp */,
  436 + 3C12327B1AAE81D900CE8F6C /* srs_app_recv_thread.hpp */,
  437 + 3C12327C1AAE81D900CE8F6C /* srs_app_refer.cpp */,
  438 + 3C12327D1AAE81D900CE8F6C /* srs_app_refer.hpp */,
  439 + 3C12327E1AAE81D900CE8F6C /* srs_app_reload.cpp */,
  440 + 3C12327F1AAE81D900CE8F6C /* srs_app_reload.hpp */,
  441 + 3C1232801AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp */,
  442 + 3C1232811AAE81D900CE8F6C /* srs_app_rtmp_conn.hpp */,
  443 + 3C1232821AAE81D900CE8F6C /* srs_app_rtsp.cpp */,
  444 + 3C1232831AAE81D900CE8F6C /* srs_app_rtsp.hpp */,
  445 + 3C1232841AAE81D900CE8F6C /* srs_app_security.cpp */,
  446 + 3C1232851AAE81D900CE8F6C /* srs_app_security.hpp */,
  447 + 3C1232861AAE81D900CE8F6C /* srs_app_server.cpp */,
  448 + 3C1232871AAE81D900CE8F6C /* srs_app_server.hpp */,
  449 + 3C1232881AAE81D900CE8F6C /* srs_app_source.cpp */,
  450 + 3C1232891AAE81D900CE8F6C /* srs_app_source.hpp */,
  451 + 3C12328A1AAE81D900CE8F6C /* srs_app_st_socket.cpp */,
  452 + 3C12328B1AAE81D900CE8F6C /* srs_app_st_socket.hpp */,
  453 + 3C12328C1AAE81D900CE8F6C /* srs_app_st.cpp */,
  454 + 3C12328D1AAE81D900CE8F6C /* srs_app_st.hpp */,
  455 + 3C12328E1AAE81D900CE8F6C /* srs_app_statistic.cpp */,
  456 + 3C12328F1AAE81D900CE8F6C /* srs_app_statistic.hpp */,
  457 + 3C1232901AAE81D900CE8F6C /* srs_app_thread.cpp */,
  458 + 3C1232911AAE81D900CE8F6C /* srs_app_thread.hpp */,
  459 + 3C1232921AAE81D900CE8F6C /* srs_app_utility.cpp */,
  460 + 3C1232931AAE81D900CE8F6C /* srs_app_utility.hpp */,
  461 + );
  462 + name = app;
  463 + sourceTree = "<group>";
  464 + };
  465 + 3C1232B91AAE825100CE8F6C /* scripts */ = {
  466 + isa = PBXGroup;
  467 + children = (
  468 + 3C1232C81AAE833300CE8F6C /* _log.sh */,
  469 + 3C1232C91AAE833300CE8F6C /* build.sh */,
  470 + 3C1232CA1AAE833300CE8F6C /* git.commit.sh */,
  471 + 3C1232CB1AAE833300CE8F6C /* git2unix.sh */,
  472 + 3C1232CC1AAE833300CE8F6C /* install.sh */,
  473 + 3C1232CD1AAE833300CE8F6C /* package.sh */,
  474 + 3C1232CE1AAE833300CE8F6C /* run.sh */,
  475 + 3C1232CF1AAE833300CE8F6C /* srs.test */,
  476 + 3C1232D01AAE833300CE8F6C /* stop.sh */,
  477 + 3C1232D11AAE833300CE8F6C /* test_configure.sh */,
  478 + );
  479 + name = scripts;
  480 + sourceTree = "<group>";
  481 + };
  482 + 3C1232BA1AAE826F00CE8F6C /* auto */ = {
  483 + isa = PBXGroup;
  484 + children = (
  485 + 3C1232BB1AAE827E00CE8F6C /* apps.sh */,
  486 + 3C1232BC1AAE827E00CE8F6C /* auto_headers.sh */,
  487 + 3C1232BD1AAE827E00CE8F6C /* build_ffmpeg.sh */,
  488 + 3C1232BE1AAE827E00CE8F6C /* depends.sh */,
  489 + 3C1232BF1AAE827E00CE8F6C /* generate_header.sh */,
  490 + 3C1232C01AAE827E00CE8F6C /* generate-srs-librtmp-project.sh */,
  491 + 3C1232C11AAE827E00CE8F6C /* generate-srs-librtmp-single.sh */,
  492 + 3C1232C21AAE827E00CE8F6C /* libs.sh */,
  493 + 3C1232C31AAE827E00CE8F6C /* local_ip.sh */,
  494 + 3C1232C41AAE827E00CE8F6C /* modules.sh */,
  495 + 3C1232C51AAE827E00CE8F6C /* options.sh */,
  496 + 3C1232C61AAE827E00CE8F6C /* summary.sh */,
  497 + 3C1232C71AAE827E00CE8F6C /* utest.sh */,
  498 + );
  499 + name = auto;
  500 + sourceTree = "<group>";
  501 + };
  502 + 3C1232EE1AAEA71C00CE8F6C /* links */ = {
  503 + isa = PBXGroup;
  504 + children = (
  505 + 3C1232EC1AAEA70F00CE8F6C /* libhttp_parser.a */,
  506 + 3C1232D21AAEA56B00CE8F6C /* libst.a */,
  507 + 3C1232E81AAEA5D000CE8F6C /* libssl.a */,
  508 + 3C1232E71AAEA5D000CE8F6C /* libcrypto.a */,
  509 + );
  510 + name = links;
  511 + sourceTree = "<group>";
  512 + };
  513 + 3C1232EF1AAEAC5800CE8F6C /* etc */ = {
  514 + isa = PBXGroup;
  515 + children = (
  516 + 3C1232F01AAEAC5D00CE8F6C /* init.d */,
  517 + );
  518 + name = etc;
  519 + sourceTree = "<group>";
  520 + };
  521 + 3C1232F01AAEAC5D00CE8F6C /* init.d */ = {
  522 + isa = PBXGroup;
  523 + children = (
  524 + 3C1232F11AAEAC7000CE8F6C /* srs */,
  525 + 3C1232F21AAEAC7000CE8F6C /* srs-api */,
  526 + 3C1232F31AAEAC7000CE8F6C /* srs-demo */,
  527 + 3C1232F41AAEAC7000CE8F6C /* srs-demo-19350 */,
  528 + );
  529 + name = init.d;
  530 + sourceTree = "<group>";
  531 + };
  532 +/* End PBXGroup section */
  533 +
  534 +/* Begin PBXNativeTarget section */
  535 + 3C1231E41AAE64A400CE8F6C /* srs_xcode */ = {
  536 + isa = PBXNativeTarget;
  537 + buildConfigurationList = 3C1231EC1AAE64A400CE8F6C /* Build configuration list for PBXNativeTarget "srs_xcode" */;
  538 + buildPhases = (
  539 + 3C1231E11AAE64A400CE8F6C /* Sources */,
  540 + 3C1231E21AAE64A400CE8F6C /* Frameworks */,
  541 + 3C1231E31AAE64A400CE8F6C /* CopyFiles */,
  542 + );
  543 + buildRules = (
  544 + );
  545 + dependencies = (
  546 + );
  547 + name = srs_xcode;
  548 + productName = srs_xcode;
  549 + productReference = 3C1231E51AAE64A400CE8F6C /* srs_xcode */;
  550 + productType = "com.apple.product-type.tool";
  551 + };
  552 +/* End PBXNativeTarget section */
  553 +
  554 +/* Begin PBXProject section */
  555 + 3C1231DD1AAE64A400CE8F6C /* Project object */ = {
  556 + isa = PBXProject;
  557 + attributes = {
  558 + LastUpgradeCheck = 0610;
  559 + ORGANIZATIONNAME = winlin;
  560 + TargetAttributes = {
  561 + 3C1231E41AAE64A400CE8F6C = {
  562 + CreatedOnToolsVersion = 6.1.1;
  563 + };
  564 + };
  565 + };
  566 + buildConfigurationList = 3C1231E01AAE64A400CE8F6C /* Build configuration list for PBXProject "srs_xcode" */;
  567 + compatibilityVersion = "Xcode 3.2";
  568 + developmentRegion = English;
  569 + hasScannedForEncodings = 0;
  570 + knownRegions = (
  571 + en,
  572 + );
  573 + mainGroup = 3C1231DC1AAE64A400CE8F6C;
  574 + productRefGroup = 3C1231E61AAE64A400CE8F6C /* Products */;
  575 + projectDirPath = "";
  576 + projectRoot = "";
  577 + targets = (
  578 + 3C1231E41AAE64A400CE8F6C /* srs_xcode */,
  579 + );
  580 + };
  581 +/* End PBXProject section */
  582 +
  583 +/* Begin PBXSourcesBuildPhase section */
  584 + 3C1231E11AAE64A400CE8F6C /* Sources */ = {
  585 + isa = PBXSourcesBuildPhase;
  586 + buildActionMask = 2147483647;
  587 + files = (
  588 + 3C1232951AAE81D900CE8F6C /* srs_app_config.cpp in Sources */,
  589 + 3C1232961AAE81D900CE8F6C /* srs_app_conn.cpp in Sources */,
  590 + 3C12322A1AAE814D00CE8F6C /* srs_kernel_ts.cpp in Sources */,
  591 + 3C12329E1AAE81D900CE8F6C /* srs_app_hls.cpp in Sources */,
  592 + 3C1232971AAE81D900CE8F6C /* srs_app_dvr.cpp in Sources */,
  593 + 3C1232271AAE814D00CE8F6C /* srs_kernel_log.cpp in Sources */,
  594 + 3C1232A81AAE81D900CE8F6C /* srs_app_log.cpp in Sources */,
  595 + 3C1232A41AAE81D900CE8F6C /* srs_app_ingest.cpp in Sources */,
  596 + 3C1232B41AAE81D900CE8F6C /* srs_app_st.cpp in Sources */,
  597 + 3C1232481AAE81A400CE8F6C /* srs_rtmp_stack.cpp in Sources */,
  598 + 3C1232B01AAE81D900CE8F6C /* srs_app_security.cpp in Sources */,
  599 + 3C12322B1AAE814D00CE8F6C /* srs_kernel_utility.cpp in Sources */,
  600 + 3C12324A1AAE81A400CE8F6C /* srs_rtsp_stack.cpp in Sources */,
  601 + 3C1232A51AAE81D900CE8F6C /* srs_app_json.cpp in Sources */,
  602 + 3C12329F1AAE81D900CE8F6C /* srs_app_http_api.cpp in Sources */,
  603 + 3C1232A11AAE81D900CE8F6C /* srs_app_http_conn.cpp in Sources */,
  604 + 3C1232AC1AAE81D900CE8F6C /* srs_app_refer.cpp in Sources */,
  605 + 3C1232991AAE81D900CE8F6C /* srs_app_empty.cpp in Sources */,
  606 + 3C1232201AAE814D00CE8F6C /* srs_kernel_aac.cpp in Sources */,
  607 + 3C1232941AAE81D900CE8F6C /* srs_app_bandwidth.cpp in Sources */,
  608 + 3C1232221AAE814D00CE8F6C /* srs_kernel_codec.cpp in Sources */,
  609 + 3C1232B71AAE81D900CE8F6C /* srs_app_utility.cpp in Sources */,
  610 + 3C1232AB1AAE81D900CE8F6C /* srs_app_recv_thread.cpp in Sources */,
  611 + 3C1231F61AAE652D00CE8F6C /* srs_core_autofree.cpp in Sources */,
  612 + 3C1232411AAE81A400CE8F6C /* srs_raw_avc.cpp in Sources */,
  613 + 3C1232491AAE81A400CE8F6C /* srs_rtmp_utility.cpp in Sources */,
  614 + 3C1232A01AAE81D900CE8F6C /* srs_app_http_client.cpp in Sources */,
  615 + 3C12329B1AAE81D900CE8F6C /* srs_app_ffmpeg.cpp in Sources */,
  616 + 3C1232421AAE81A400CE8F6C /* srs_rtmp_amf0.cpp in Sources */,
  617 + 3C1232AA1AAE81D900CE8F6C /* srs_app_pithy_print.cpp in Sources */,
  618 + 3C12329C1AAE81D900CE8F6C /* srs_app_forward.cpp in Sources */,
  619 + 3C1232251AAE814D00CE8F6C /* srs_kernel_file.cpp in Sources */,
  620 + 3C1232AD1AAE81D900CE8F6C /* srs_app_reload.cpp in Sources */,
  621 + 3C1231F81AAE652D00CE8F6C /* srs_core.cpp in Sources */,
  622 + 3C1232A21AAE81D900CE8F6C /* srs_app_http_hooks.cpp in Sources */,
  623 + 3C1232B11AAE81D900CE8F6C /* srs_app_server.cpp in Sources */,
  624 + 3C1232B31AAE81D900CE8F6C /* srs_app_st_socket.cpp in Sources */,
  625 + 3C1232061AAE812C00CE8F6C /* srs_main_server.cpp in Sources */,
  626 + 3C1232281AAE814D00CE8F6C /* srs_kernel_mp3.cpp in Sources */,
  627 + 3C1232B21AAE81D900CE8F6C /* srs_app_source.cpp in Sources */,
  628 + 3C1231F71AAE652D00CE8F6C /* srs_core_performance.cpp in Sources */,
  629 + 3C1232981AAE81D900CE8F6C /* srs_app_edge.cpp in Sources */,
  630 + 3C1232461AAE81A400CE8F6C /* srs_rtmp_msg_array.cpp in Sources */,
  631 + 3C1232A71AAE81D900CE8F6C /* srs_app_listener.cpp in Sources */,
  632 + 3C1232261AAE814D00CE8F6C /* srs_kernel_flv.cpp in Sources */,
  633 + 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */,
  634 + 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */,
  635 + 3C1232291AAE814D00CE8F6C /* srs_kernel_stream.cpp in Sources */,
  636 + 3C1232B61AAE81D900CE8F6C /* srs_app_thread.cpp in Sources */,
  637 + 3C1232A91AAE81D900CE8F6C /* srs_app_mpegts_udp.cpp in Sources */,
  638 + 3C1232AE1AAE81D900CE8F6C /* srs_app_rtmp_conn.cpp in Sources */,
  639 + 3C1232B51AAE81D900CE8F6C /* srs_app_statistic.cpp in Sources */,
  640 + 3C1232451AAE81A400CE8F6C /* srs_rtmp_io.cpp in Sources */,
  641 + 3C1232431AAE81A400CE8F6C /* srs_rtmp_buffer.cpp in Sources */,
  642 + 3C1232211AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */,
  643 + 3C1232471AAE81A400CE8F6C /* srs_rtmp_sdk.cpp in Sources */,
  644 + 3C1232A61AAE81D900CE8F6C /* srs_app_kbps.cpp in Sources */,
  645 + 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */,
  646 + 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */,
  647 + 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */,
  648 + 3C1232A31AAE81D900CE8F6C /* srs_app_http.cpp in Sources */,
  649 + 3C12329A1AAE81D900CE8F6C /* srs_app_encoder.cpp in Sources */,
  650 + );
  651 + runOnlyForDeploymentPostprocessing = 0;
  652 + };
  653 +/* End PBXSourcesBuildPhase section */
  654 +
  655 +/* Begin XCBuildConfiguration section */
  656 + 3C1231EA1AAE64A400CE8F6C /* Debug */ = {
  657 + isa = XCBuildConfiguration;
  658 + buildSettings = {
  659 + ALWAYS_SEARCH_USER_PATHS = NO;
  660 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  661 + CLANG_CXX_LIBRARY = "libc++";
  662 + CLANG_ENABLE_MODULES = YES;
  663 + CLANG_ENABLE_OBJC_ARC = YES;
  664 + CLANG_WARN_BOOL_CONVERSION = YES;
  665 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  666 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  667 + CLANG_WARN_EMPTY_BODY = YES;
  668 + CLANG_WARN_ENUM_CONVERSION = YES;
  669 + CLANG_WARN_INT_CONVERSION = YES;
  670 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  671 + CLANG_WARN_UNREACHABLE_CODE = YES;
  672 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  673 + COPY_PHASE_STRIP = NO;
  674 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  675 + GCC_C_LANGUAGE_STANDARD = gnu99;
  676 + GCC_DYNAMIC_NO_PIC = NO;
  677 + GCC_OPTIMIZATION_LEVEL = 0;
  678 + GCC_PREPROCESSOR_DEFINITIONS = (
  679 + "DEBUG=1",
  680 + "$(inherited)",
  681 + );
  682 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
  683 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  684 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  685 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  686 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  687 + GCC_WARN_UNUSED_FUNCTION = YES;
  688 + GCC_WARN_UNUSED_VARIABLE = YES;
  689 + MACOSX_DEPLOYMENT_TARGET = 10.10;
  690 + MTL_ENABLE_DEBUG_INFO = YES;
  691 + ONLY_ACTIVE_ARCH = YES;
  692 + SDKROOT = macosx;
  693 + };
  694 + name = Debug;
  695 + };
  696 + 3C1231EB1AAE64A400CE8F6C /* Release */ = {
  697 + isa = XCBuildConfiguration;
  698 + buildSettings = {
  699 + ALWAYS_SEARCH_USER_PATHS = NO;
  700 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  701 + CLANG_CXX_LIBRARY = "libc++";
  702 + CLANG_ENABLE_MODULES = YES;
  703 + CLANG_ENABLE_OBJC_ARC = YES;
  704 + CLANG_WARN_BOOL_CONVERSION = YES;
  705 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  706 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  707 + CLANG_WARN_EMPTY_BODY = YES;
  708 + CLANG_WARN_ENUM_CONVERSION = YES;
  709 + CLANG_WARN_INT_CONVERSION = YES;
  710 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  711 + CLANG_WARN_UNREACHABLE_CODE = YES;
  712 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  713 + COPY_PHASE_STRIP = YES;
  714 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  715 + ENABLE_NS_ASSERTIONS = NO;
  716 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  717 + GCC_C_LANGUAGE_STANDARD = gnu99;
  718 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  719 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  720 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  721 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  722 + GCC_WARN_UNUSED_FUNCTION = YES;
  723 + GCC_WARN_UNUSED_VARIABLE = YES;
  724 + MACOSX_DEPLOYMENT_TARGET = 10.10;
  725 + MTL_ENABLE_DEBUG_INFO = NO;
  726 + SDKROOT = macosx;
  727 + };
  728 + name = Release;
  729 + };
  730 + 3C1231ED1AAE64A400CE8F6C /* Debug */ = {
  731 + isa = XCBuildConfiguration;
  732 + buildSettings = {
  733 + ALWAYS_SEARCH_USER_PATHS = YES;
  734 + CLANG_CXX_LANGUAGE_STANDARD = "c++98";
  735 + CLANG_CXX_LIBRARY = "libstdc++";
  736 + LIBRARY_SEARCH_PATHS = (
  737 + "../../objs/**",
  738 + "/Users/winlin/Desktop/git/simple-rtmp-server/trunk/objs/http-parser-2.1",
  739 + );
  740 + PRODUCT_NAME = "$(TARGET_NAME)";
  741 + "USER_HEADER_SEARCH_PATHS[arch=*]" = "../../src/** ../../objs ../../objs/st ../../objs/hp ../../objs/openssl";
  742 + };
  743 + name = Debug;
  744 + };
  745 + 3C1231EE1AAE64A400CE8F6C /* Release */ = {
  746 + isa = XCBuildConfiguration;
  747 + buildSettings = {
  748 + ALWAYS_SEARCH_USER_PATHS = YES;
  749 + CLANG_CXX_LANGUAGE_STANDARD = "c++98";
  750 + CLANG_CXX_LIBRARY = "libstdc++";
  751 + LIBRARY_SEARCH_PATHS = (
  752 + "../../objs/**",
  753 + "/Users/winlin/Desktop/git/simple-rtmp-server/trunk/objs/http-parser-2.1",
  754 + );
  755 + PRODUCT_NAME = "$(TARGET_NAME)";
  756 + };
  757 + name = Release;
  758 + };
  759 +/* End XCBuildConfiguration section */
  760 +
  761 +/* Begin XCConfigurationList section */
  762 + 3C1231E01AAE64A400CE8F6C /* Build configuration list for PBXProject "srs_xcode" */ = {
  763 + isa = XCConfigurationList;
  764 + buildConfigurations = (
  765 + 3C1231EA1AAE64A400CE8F6C /* Debug */,
  766 + 3C1231EB1AAE64A400CE8F6C /* Release */,
  767 + );
  768 + defaultConfigurationIsVisible = 0;
  769 + defaultConfigurationName = Release;
  770 + };
  771 + 3C1231EC1AAE64A400CE8F6C /* Build configuration list for PBXNativeTarget "srs_xcode" */ = {
  772 + isa = XCConfigurationList;
  773 + buildConfigurations = (
  774 + 3C1231ED1AAE64A400CE8F6C /* Debug */,
  775 + 3C1231EE1AAE64A400CE8F6C /* Release */,
  776 + );
  777 + defaultConfigurationIsVisible = 0;
  778 + defaultConfigurationName = Release;
  779 + };
  780 +/* End XCConfigurationList section */
  781 + };
  782 + rootObject = 3C1231DD1AAE64A400CE8F6C /* Project object */;
  783 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:srs_xcode.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +the xcode project for osx.
@@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 #include <srs_kernel_error.hpp> 26 #include <srs_kernel_error.hpp>
27 #include <srs_kernel_log.hpp> 27 #include <srs_kernel_log.hpp>
28 28
  29 +#ifndef SRS_OSX
29 #include <sys/epoll.h> 30 #include <sys/epoll.h>
30 bool srs_st_epoll_is_supported(void) 31 bool srs_st_epoll_is_supported(void)
31 { 32 {
@@ -38,11 +39,13 @@ bool srs_st_epoll_is_supported(void) @@ -38,11 +39,13 @@ bool srs_st_epoll_is_supported(void)
38 39
39 return (errno != ENOSYS); 40 return (errno != ENOSYS);
40 } 41 }
  42 +#endif
41 43
42 int srs_init_st() 44 int srs_init_st()
43 { 45 {
44 int ret = ERROR_SUCCESS; 46 int ret = ERROR_SUCCESS;
45 47
  48 +#ifndef SRS_OSX
46 // check epoll, some old linux donot support epoll. 49 // check epoll, some old linux donot support epoll.
47 // @see https://github.com/winlinvip/simple-rtmp-server/issues/162 50 // @see https://github.com/winlinvip/simple-rtmp-server/issues/162
48 if (!srs_st_epoll_is_supported()) { 51 if (!srs_st_epoll_is_supported()) {
@@ -58,6 +61,7 @@ int srs_init_st() @@ -58,6 +61,7 @@ int srs_init_st()
58 return ret; 61 return ret;
59 } 62 }
60 srs_verbose("st_set_eventsys use linux epoll success"); 63 srs_verbose("st_set_eventsys use linux epoll success");
  64 +#endif
61 65
62 if(st_init() != 0){ 66 if(st_init() != 0){
63 ret = ERROR_ST_INITIALIZE; 67 ret = ERROR_ST_INITIALIZE;
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR 2 32 #define VERSION_MAJOR 2
33 #define VERSION_MINOR 0 33 #define VERSION_MINOR 0
34 -#define VERSION_REVISION 136 34 +#define VERSION_REVISION 137
35 35
36 // server info. 36 // server info.
37 #define RTMP_SIG_SRS_KEY "SRS" 37 #define RTMP_SIG_SRS_KEY "SRS"
@@ -437,7 +437,9 @@ u_int32_t srs_crc32(const void* buf, int size) @@ -437,7 +437,9 @@ u_int32_t srs_crc32(const void* buf, int size)
437 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 437 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
438 */ 438 */
439 439
  440 +#ifndef UINT_MAX
440 #define UINT_MAX 0xffffffff 441 #define UINT_MAX 0xffffffff
  442 +#endif
441 443
442 #ifndef AV_RB32 444 #ifndef AV_RB32
443 # define AV_RB32(x) \ 445 # define AV_RB32(x) \
@@ -177,6 +177,23 @@ void show_macro_features() @@ -177,6 +177,23 @@ void show_macro_features()
177 177
178 void check_macro_features() 178 void check_macro_features()
179 { 179 {
  180 + // important preset.
  181 +#ifdef SRS_OSX
  182 + srs_trace("SRS for OSX");
  183 +#endif
  184 +#ifdef SRS_PI
  185 + srs_trace("SRS for pi");
  186 +#endif
  187 +#ifdef SRS_CUBIE
  188 + srs_trace("SRS for cubieboard");
  189 +#endif
  190 +#ifdef SRS_ARM_UBUNTU12
  191 + srs_trace("SRS for arm(build on ubuntu)");
  192 +#endif
  193 +#ifdef SRS_MIPS_UBUNTU12
  194 + srs_trace("SRS for mips(build on ubuntu)");
  195 +#endif
  196 +
180 // for special features. 197 // for special features.
181 #ifndef SRS_PERF_MERGED_READ 198 #ifndef SRS_PERF_MERGED_READ
182 srs_warn("MR(merged-read) is disabled, hurts read performance. @see %s", RTMP_SIG_SRS_ISSUES(241)); 199 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) @@ -252,8 +269,8 @@ int main(int argc, char** argv)
252 srs_trace("conf: %s, limit: %d", _srs_config->config().c_str(), _srs_config->get_max_connections()); 269 srs_trace("conf: %s, limit: %d", _srs_config->config().c_str(), _srs_config->get_max_connections());
253 270
254 // features 271 // features
255 - show_macro_features();  
256 check_macro_features(); 272 check_macro_features();
  273 + show_macro_features();
257 274
258 /** 275 /**
259 * we do nothing in the constructor of server, 276 * we do nothing in the constructor of server,
@@ -73,7 +73,7 @@ namespace _srs_internal @@ -73,7 +73,7 @@ namespace _srs_internal
73 int __openssl_HMACsha256(HMAC_CTX* ctx, const void* data, int data_size, void* digest, unsigned int* digest_size) 73 int __openssl_HMACsha256(HMAC_CTX* ctx, const void* data, int data_size, void* digest, unsigned int* digest_size)
74 { 74 {
75 int ret = ERROR_SUCCESS; 75 int ret = ERROR_SUCCESS;
76 - 76 +#ifndef SRS_OSX
77 if (HMAC_Update(ctx, (unsigned char *) data, data_size) < 0) { 77 if (HMAC_Update(ctx, (unsigned char *) data, data_size) < 0) {
78 ret = ERROR_OpenSslSha256Update; 78 ret = ERROR_OpenSslSha256Update;
79 return ret; 79 return ret;
@@ -83,6 +83,10 @@ namespace _srs_internal @@ -83,6 +83,10 @@ namespace _srs_internal
83 ret = ERROR_OpenSslSha256Final; 83 ret = ERROR_OpenSslSha256Final;
84 return ret; 84 return ret;
85 } 85 }
  86 +#else
  87 + HMAC_Update(ctx, (unsigned char *) data, data_size);
  88 + HMAC_Final(ctx, (unsigned char *) digest, digest_size);
  89 +#endif
86 90
87 return ret; 91 return ret;
88 } 92 }
@@ -117,10 +121,14 @@ namespace _srs_internal @@ -117,10 +121,14 @@ namespace _srs_internal
117 // for instance, in python, hashlib.sha256(data).digest(). 121 // for instance, in python, hashlib.sha256(data).digest().
118 HMAC_CTX_init(&ctx); 122 HMAC_CTX_init(&ctx);
119 123
  124 +#ifndef SRS_OSX
120 if (HMAC_Init_ex(&ctx, __key, key_size, EVP_sha256(), NULL) < 0) { 125 if (HMAC_Init_ex(&ctx, __key, key_size, EVP_sha256(), NULL) < 0) {
121 ret = ERROR_OpenSslSha256Init; 126 ret = ERROR_OpenSslSha256Init;
122 return ret; 127 return ret;
123 } 128 }
  129 +#else
  130 + HMAC_Init_ex(&ctx, __key, key_size, EVP_sha256(), NULL);
  131 +#endif
124 132
125 ret = __openssl_HMACsha256(&ctx, data, data_size, __digest, &digest_size); 133 ret = __openssl_HMACsha256(&ctx, data, data_size, __digest, &digest_size);
126 HMAC_CTX_cleanup(&ctx); 134 HMAC_CTX_cleanup(&ctx);