1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #299, refine code.

This commit is contained in:
winlin 2017-03-25 17:21:39 +08:00
parent 62b7204514
commit f32aab3d92
175 changed files with 15529 additions and 15935 deletions

View file

@ -1,10 +1,10 @@
/* /*
# see: https://github.com/ossrs/srs/issues/190 # see: https://github.com/ossrs/srs/issues/190
# see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLinuxArm # see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLinuxArm
g++ -g -O0 -o jmp_sp jmp_sp.cpp g++ -g -O0 -o jmp_sp jmp_sp.cpp
arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
arm-linux-gnueabi-strip jmp_sp arm-linux-gnueabi-strip jmp_sp
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <setjmp.h> #include <setjmp.h>
@ -14,14 +14,14 @@ jmp_buf context;
void do_longjmp() void do_longjmp()
{ {
/** /**
the definition of jmp_buf: the definition of jmp_buf:
typedef struct __jmp_buf_tag jmp_buf[1]; typedef struct __jmp_buf_tag jmp_buf[1];
struct __jmp_buf_tag { struct __jmp_buf_tag {
__jmp_buf __jmpbuf; __jmp_buf __jmpbuf;
int __mask_was_saved; int __mask_was_saved;
__sigset_t __saved_mask; __sigset_t __saved_mask;
}; };
*/ */
#if defined(__amd64__) || defined(__x86_64__) #if defined(__amd64__) || defined(__x86_64__)
// http://ftp.gnu.org/gnu/glibc/glibc-2.12.2.tar.xz // http://ftp.gnu.org/gnu/glibc/glibc-2.12.2.tar.xz
// http://ftp.gnu.org/gnu/glibc/glibc-2.12.1.tar.gz // http://ftp.gnu.org/gnu/glibc/glibc-2.12.1.tar.gz
@ -38,21 +38,21 @@ void do_longjmp()
*/ */
// for glibc 2.4+, it's not possible to get and set the sp in jmp_buf // for glibc 2.4+, it's not possible to get and set the sp in jmp_buf
/** /**
for example, the following is show the jmp_buf when setjmp: for example, the following is show the jmp_buf when setjmp:
(gdb) x /64xb context[0].__jmpbuf (gdb) x /64xb context[0].__jmpbuf
0x600ca0 <context>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x600ca0 <context>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x600ca8 <context+8>: 0xf8 0xc1 0x71 0xe5 0xa8 0x88 0xb4 0x15 0x600ca8 <context+8>: 0xf8 0xc1 0x71 0xe5 0xa8 0x88 0xb4 0x15
0x600cb0 <context+16>: 0xa0 0x05 0x40 0x00 0x00 0x00 0x00 0x00 0x600cb0 <context+16>: 0xa0 0x05 0x40 0x00 0x00 0x00 0x00 0x00
0x600cb8 <context+24>: 0x90 0xe4 0xff 0xff 0xff 0x7f 0x00 0x00 0x600cb8 <context+24>: 0x90 0xe4 0xff 0xff 0xff 0x7f 0x00 0x00
0x600cc0 <context+32>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x600cc0 <context+32>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x600cc8 <context+40>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x600cc8 <context+40>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x600cd0 <context+48>: 0xf8 0xc1 0x51 0xe5 0xa8 0x88 0xb4 0x15 0x600cd0 <context+48>: 0xf8 0xc1 0x51 0xe5 0xa8 0x88 0xb4 0x15
0x600cd8 <context+56>: 0xf8 0xc1 0xd9 0x2f 0xd7 0x77 0x4b 0xea 0x600cd8 <context+56>: 0xf8 0xc1 0xd9 0x2f 0xd7 0x77 0x4b 0xea
(gdb) p /x $sp (gdb) p /x $sp
$4 = 0x7fffffffe380 $4 = 0x7fffffffe380
we cannot finger the sp out. we cannot finger the sp out.
where the glibc is 2.12. where the glibc is 2.12.
*/ */
register long int rsp0 asm("rsp"); register long int rsp0 asm("rsp");
int ret = setjmp(context); int ret = setjmp(context);
@ -67,43 +67,43 @@ void do_longjmp()
#if defined(__arm__) #if defined(__arm__)
/** /**
/usr/arm-linux-gnueabi/include/bits/setjmp.h /usr/arm-linux-gnueabi/include/bits/setjmp.h
#ifndef _ASM #ifndef _ASM
The exact set of registers saved may depend on the particular core The exact set of registers saved may depend on the particular core
in use, as some coprocessor registers may need to be saved. The C in use, as some coprocessor registers may need to be saved. The C
Library ABI requires that the buffer be 8-byte aligned, and Library ABI requires that the buffer be 8-byte aligned, and
recommends that the buffer contain 64 words. The first 28 words recommends that the buffer contain 64 words. The first 28 words
are occupied by v1-v6, sl, fp, sp, pc, d8-d15, and fpscr. (Note are occupied by v1-v6, sl, fp, sp, pc, d8-d15, and fpscr. (Note
that d8-15 require 17 words, due to the use of fstmx.) that d8-15 require 17 words, due to the use of fstmx.)
typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); typedef int __jmp_buf[64] __attribute__((__aligned__ (8)));
the layout of setjmp for arm: the layout of setjmp for arm:
0-5: v1-v6 0-5: v1-v6
6: sl 6: sl
7: fp 7: fp
8: sp 8: sp
9: pc 9: pc
10-26: d8-d15 17words 10-26: d8-d15 17words
27: fpscr 27: fpscr
*/ */
/** /**
For example, on raspberry-pi, armv6 cpu: For example, on raspberry-pi, armv6 cpu:
(gdb) x /64xb (char*)context[0].__jmpbuf (gdb) x /64xb (char*)context[0].__jmpbuf
v1, 0: 0x00 0x00 0x00 0x00 v1, 0: 0x00 0x00 0x00 0x00
v2, 1: 0x00 0x00 0x00 0x00 v2, 1: 0x00 0x00 0x00 0x00
v3, 2: 0x2c 0x84 0x00 0x00 v3, 2: 0x2c 0x84 0x00 0x00
v4, 3: 0x00 0x00 0x00 0x00 v4, 3: 0x00 0x00 0x00 0x00
v5, 4: 0x00 0x00 0x00 0x00 v5, 4: 0x00 0x00 0x00 0x00
v6, 5: 0x00 0x00 0x00 0x00 v6, 5: 0x00 0x00 0x00 0x00
sl, 6: 0x00 0xf0 0xff 0xb6 sl, 6: 0x00 0xf0 0xff 0xb6
fp, 7: 0x9c 0xfb 0xff 0xbe fp, 7: 0x9c 0xfb 0xff 0xbe
sp, 8: 0x88 0xfb 0xff 0xbe sp, 8: 0x88 0xfb 0xff 0xbe
pc, 9: 0x08 0x85 0x00 0x00 pc, 9: 0x08 0x85 0x00 0x00
(gdb) p /x $sp (gdb) p /x $sp
$5 = 0xbefffb88 $5 = 0xbefffb88
(gdb) p /x $pc (gdb) p /x $pc
$4 = 0x850c $4 = 0x850c
*/ */
int ret = setjmp(context); int ret = setjmp(context);
printf("setjmp func1 ret=%d\n", ret); printf("setjmp func1 ret=%d\n", ret);
@ -120,14 +120,14 @@ int main(int argc, char** argv)
{ {
#if defined(__amd64__) || defined(__x86_64__) #if defined(__amd64__) || defined(__x86_64__)
printf("x86_64 sizeof(long int)=%d, sizeof(long)=%d, " printf("x86_64 sizeof(long int)=%d, sizeof(long)=%d, "
"sizeof(int)=%d, __WORDSIZE=%d, __GLIBC__=%d, __GLIBC_MINOR__=%d\n", "sizeof(int)=%d, __WORDSIZE=%d, __GLIBC__=%d, __GLIBC_MINOR__=%d\n",
(int)sizeof(long int), (int)sizeof(long), (int)sizeof(int), (int)sizeof(long int), (int)sizeof(long), (int)sizeof(int),
(int)__WORDSIZE, (int)__GLIBC__, (int)__GLIBC_MINOR__); (int)__WORDSIZE, (int)__GLIBC__, (int)__GLIBC_MINOR__);
#else #else
printf("arm sizeof(long int)=%d, sizeof(long)=%d, " printf("arm sizeof(long int)=%d, sizeof(long)=%d, "
"sizeof(int)=%d, __GLIBC__=%d,__GLIBC_MINOR__=%d\n", "sizeof(int)=%d, __GLIBC__=%d,__GLIBC_MINOR__=%d\n",
(int)sizeof(long int), (int)sizeof(long), (int)sizeof(int), (int)sizeof(long int), (int)sizeof(long), (int)sizeof(int),
(int)__GLIBC__, (int)__GLIBC_MINOR__); (int)__GLIBC__, (int)__GLIBC_MINOR__);
#endif #endif
do_longjmp(); do_longjmp();

View file

@ -1,6 +1,6 @@
/** /**
g++ memory.error.notcmalloc.cpp -g -O0 -o memory.error.notcmalloc g++ memory.error.notcmalloc.cpp -g -O0 -o memory.error.notcmalloc
*/ */
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>

View file

@ -1,6 +1,6 @@
/** /**
g++ memory.error.notcmalloc.cpp -g -O0 -o memory.error.notcmalloc g++ memory.error.notcmalloc.cpp -g -O0 -o memory.error.notcmalloc
*/ */
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>

View file

@ -164,10 +164,7 @@ int main(int argc, char** argv)
timestamp += time_delta; timestamp += time_delta;
int ret = 0; int ret = 0;
if ((ret = srs_audio_write_raw_frame(rtmp, if ((ret = srs_audio_write_raw_frame(rtmp, sound_format, sound_rate, sound_size, sound_type, data, size, timestamp)) != 0) {
sound_format, sound_rate, sound_size, sound_type,
data, size, timestamp)) != 0
) {
srs_human_trace("send audio raw data failed. ret=%d", ret); srs_human_trace("send audio raw data failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }

View file

@ -43,8 +43,7 @@ int read_audio_frame(char* audio_raw, int file_size, char** pp, char** pdata, in
char* p = *pp; char* p = *pp;
if (file_size - (p - audio_raw) < 168) { if (file_size - (p - audio_raw) < 168) {
srs_human_trace("audio must be 160+8 bytes. left %d bytes.", srs_human_trace("audio must be 160+8 bytes. left %d bytes.", (int)(file_size - (p - audio_raw)));
(int)(file_size - (p - audio_raw)));
return - 1; return - 1;
} }
@ -161,10 +160,7 @@ int main(int argc, char** argv)
timestamp += time_delta; timestamp += time_delta;
if (srs_audio_write_raw_frame(rtmp, if (srs_audio_write_raw_frame(rtmp, sound_format, sound_rate, sound_size, sound_type, data, size, timestamp) != 0) {
sound_format, sound_rate, sound_size, sound_type,
data, size, timestamp) != 0
) {
srs_human_trace("send audio raw data failed."); srs_human_trace("send audio raw data failed.");
goto rtmp_destroy; goto rtmp_destroy;
} }

View file

@ -71,8 +71,8 @@ int do_check(srs_rtmp_t rtmp)
} }
if ((ret = srs_rtmp_bandwidth_check(rtmp, if ((ret = srs_rtmp_bandwidth_check(rtmp,
&start_time, &end_time, &play_kbps, &publish_kbps, &start_time, &end_time, &play_kbps, &publish_kbps, &play_bytes, &publish_bytes,
&play_bytes, &publish_bytes, &play_duration, &publish_duration)) != 0 &play_duration, &publish_duration)) != 0
) { ) {
srs_human_trace("bandwidth check/test failed."); srs_human_trace("bandwidth check/test failed.");
return ret; return ret;

View file

@ -63,18 +63,18 @@ int main(int argc, char** argv)
if (argc <= 3) { if (argc <= 3) {
printf("detect stream on RTMP server, print result to stderr.\n" printf("detect stream on RTMP server, print result to stderr.\n"
"Usage: %s <rtmp_url> <duration> <timeout> [url_schema]\n" "Usage: %s <rtmp_url> <duration> <timeout> [url_schema]\n"
" rtmp_url RTMP stream url to play\n" " rtmp_url RTMP stream url to play\n"
" duration how long to play, in seconds, stream time.\n" " duration how long to play, in seconds, stream time.\n"
" timeout how long to timeout, in seconds, system time.\n" " timeout how long to timeout, in seconds, system time.\n"
" url_schema the schema of url, default to vis, can be:\n" " url_schema the schema of url, default to vis, can be:\n"
" normal: rtmp://vhost:port/app/stream\n" " normal: rtmp://vhost:port/app/stream\n"
" via : rtmp://ip:port/vhost/app/stream\n" " via : rtmp://ip:port/vhost/app/stream\n"
" vis : rtmp://ip:port/app/stream?vhost=xxx\n" " vis : rtmp://ip:port/app/stream?vhost=xxx\n"
" vis2 : rtmp://ip:port/app/stream?domain=xxx\n" " vis2 : rtmp://ip:port/app/stream?domain=xxx\n"
"For example:\n" "For example:\n"
" %s rtmp://127.0.0.1:1935/bravo.chnvideo.com/live/livestream 3 10\n", " %s rtmp://127.0.0.1:1935/bravo.chnvideo.com/live/livestream 3 10\n",
argv[0], argv[0]); argv[0], argv[0]);
exit(-1); exit(-1);
} }
@ -164,8 +164,7 @@ int main(int argc, char** argv)
srs_human_trace("read packet failed. ret=%d", ret); srs_human_trace("read packet failed. ret=%d", ret);
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_human_trace("got packet: type=%s, time=%d, size=%d", srs_human_trace("got packet: type=%s, time=%d, size=%d", srs_human_flv_tag_type2string(type), timestamp, size);
srs_human_flv_tag_type2string(type), timestamp, size);
if (SRS_RTMP_TYPE_VIDEO == type || SRS_RTMP_TYPE_AUDIO == type) { if (SRS_RTMP_TYPE_VIDEO == type || SRS_RTMP_TYPE_AUDIO == type) {
if (time_first_packet <= 0) { if (time_first_packet <= 0) {
@ -231,7 +230,7 @@ rtmp_destroy:
"\"remark0\": \"total = dns + tcp_connect + start_play + first_packet + last_packet\"", "\"remark0\": \"total = dns + tcp_connect + start_play + first_packet + last_packet\"",
"\"remark1\": \"delay = stream - (time_cleanup - time_first_packet)\"", "\"remark1\": \"delay = stream - (time_cleanup - time_first_packet)\"",
"\"remark2\": \"if code is not 0, user must ignore all data\"" "\"remark2\": \"if code is not 0, user must ignore all data\""
); );
srs_human_trace(" "); srs_human_trace(" ");
srs_human_trace("completed"); srs_human_trace("completed");

View file

@ -136,9 +136,9 @@ int process(const char* in_flv_file, const char* out_flv_file, srs_flv_t* pic, s
*poc = oc; *poc = oc;
/** /**
* we use two roundtrip to avoid the paddings of metadata, * we use two roundtrip to avoid the paddings of metadata,
* to support large keyframes videos without padding fields. * to support large keyframes videos without padding fields.
*/ */
// build keyframes offset to metadata. // build keyframes offset to metadata.
if ((ret = build_keyframes(ic, &amf0_name, &amf0_data, &filepositions, &metadata_end_offset)) != 0) { if ((ret = build_keyframes(ic, &amf0_name, &amf0_data, &filepositions, &metadata_end_offset)) != 0) {
return ret; return ret;

View file

@ -168,8 +168,7 @@ int parse_flv(srs_flv_t flv)
char hbuf[48]; char tbuf[48]; char hbuf[48]; char tbuf[48];
parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16); parse_bytes(data, size, hbuf, sizeof(hbuf), tbuf, sizeof(tbuf), 16);
srs_human_raw("offset=%d, first and last 16 bytes:\n" srs_human_raw("offset=%d, first and last 16 bytes:\n[+00, +15] %s\n[-15, EOF] %s\n", (int)offset, hbuf, tbuf);
"[+00, +15] %s\n[-15, EOF] %s\n", (int)offset, hbuf, tbuf);
} else { } else {
srs_human_trace("print packet failed. ret=%d", ret); srs_human_trace("print packet failed. ret=%d", ret);
} }

View file

@ -33,7 +33,7 @@
#include "../../objs/include/srs_librtmp.h" #include "../../objs/include/srs_librtmp.h"
int read_h264_frame(char* data, int size, char** pp, int* pnb_start_code, int fps, int read_h264_frame(char* data, int size, char** pp, int* pnb_start_code, int fps,
char** frame, int* frame_size, int* dts, int* pts) char** frame, int* frame_size, int* dts, int* pts)
{ {
char* p = *pp; char* p = *pp;
@ -122,7 +122,7 @@ int main(int argc, char** argv)
ssize_t nb_read = 0; ssize_t nb_read = 0;
if ((nb_read = read(raw_fd, h264_raw, file_size)) != file_size) { if ((nb_read = read(raw_fd, h264_raw, file_size)) != file_size) {
srs_human_trace("buffer %s failed, expect=%dKB, actual=%dKB.", srs_human_trace("buffer %s failed, expect=%dKB, actual=%dKB.",
raw_file, (int)(file_size / 1024), (int)(nb_read / 1024)); raw_file, (int)(file_size / 1024), (int)(nb_read / 1024));
goto rtmp_destroy; goto rtmp_destroy;
} }

View file

@ -1,25 +1,25 @@
/* /*
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2013-2017 SRS(ossrs) Copyright (c) 2013-2017 SRS(ossrs)
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: subject to the following conditions:
The above copyright notice and this permission notice shall be included in all The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -267,8 +267,7 @@ void re_cleanup(int64_t re, int32_t starttime, uint32_t time)
int64_t now = srs_utils_time_ms(); int64_t now = srs_utils_time_ms();
int64_t diff = time - starttime - (now -re); int64_t diff = time - starttime - (now -re);
if (diff > 0) { if (diff > 0) {
srs_human_trace("re_cleanup, diff=%d, start=%d, last=%d ms", srs_human_trace("re_cleanup, diff=%d, start=%d, last=%d ms", (int)diff, starttime, time);
(int)diff, starttime, time);
usleep((useconds_t)(diff * 1000)); usleep((useconds_t)(diff * 1000));
} }
} }

View file

@ -39,13 +39,13 @@ int main(int argc, char** argv)
if (argc <= 2) { if (argc <= 2) {
printf("Ingest mp4 file and publish to RTMP server\n" printf("Ingest mp4 file and publish to RTMP server\n"
"Usage: %s <-i in_mp4_file> <-y out_rtmp_url>\n" "Usage: %s <-i in_mp4_file> <-y out_rtmp_url>\n"
" in_mp4_file input mp4 file, ingest from this file.\n" " in_mp4_file input mp4 file, ingest from this file.\n"
" out_rtmp_url output rtmp url, publish to this url.\n" " out_rtmp_url output rtmp url, publish to this url.\n"
"@remark Only support non-seek mp4, see https://github.com/ossrs/srs/issues/738#issuecomment-276343669\n" "@remark Only support non-seek mp4, see https://github.com/ossrs/srs/issues/738#issuecomment-276343669\n"
"For example:\n" "For example:\n"
" %s -i avatar.mp4 -y rtmp://127.0.0.1/live/livestream\n", " %s -i avatar.mp4 -y rtmp://127.0.0.1/live/livestream\n",
argv[0], argv[0]); argv[0], argv[0]);
exit(-1); exit(-1);
} }

View file

@ -49,7 +49,7 @@ int main(int argc, char** argv)
srs_rtmp_t irtmp, ortmp; srs_rtmp_t irtmp, ortmp;
printf("Ingest RTMP to server like FFMPEG over srs-librtmp %d.%d.%d\n", printf("Ingest RTMP to server like FFMPEG over srs-librtmp %d.%d.%d\n",
srs_version_major(), srs_version_minor(), srs_version_revision()); srs_version_major(), srs_version_minor(), srs_version_revision());
if (argc <= 2) { if (argc <= 2) {
printf("ingest RTMP and publish to RTMP server\n" printf("ingest RTMP and publish to RTMP server\n"
@ -57,9 +57,9 @@ int main(int argc, char** argv)
" in_rtmp_url input rtmp url, ingest from this url.\n" " in_rtmp_url input rtmp url, ingest from this url.\n"
" out_rtmp_url output rtmp url, publish to this url.\n" " out_rtmp_url output rtmp url, publish to this url.\n"
" verbose output verbose log.\n" " verbose output verbose log.\n"
"For example:\n" "For example:\n"
" %s -i rtmp://127.0.0.1/live/livestream -y rtmp://127.0.0.1/live/demo\n" " %s -i rtmp://127.0.0.1/live/livestream -y rtmp://127.0.0.1/live/demo\n"
" %s -i rtmp://127.0.0.1/live/livestream -y rtmp://127.0.0.1/live/demo -v verbose\n", " %s -i rtmp://127.0.0.1/live/livestream -y rtmp://127.0.0.1/live/demo -v verbose\n",
argv[0], argv[0], argv[0]); argv[0], argv[0], argv[0]);
exit(-1); exit(-1);
} }
@ -162,10 +162,10 @@ int proxy(srs_rtmp_t irtmp, srs_rtmp_t ortmp)
if (verbose) { if (verbose) {
srs_human_trace("ortmp sent packet: type=%s, time=%d, size=%d", srs_human_trace("ortmp sent packet: type=%s, time=%d, size=%d",
srs_human_flv_tag_type2string(type), timestamp, size); srs_human_flv_tag_type2string(type), timestamp, size);
} else { } else {
srs_human_verbose("ortmp sent packet: type=%s, time=%d, size=%d", srs_human_verbose("ortmp sent packet: type=%s, time=%d, size=%d",
srs_human_flv_tag_type2string(type), timestamp, size); srs_human_flv_tag_type2string(type), timestamp, size);
} }
} }
@ -210,7 +210,7 @@ int connect_ic(srs_rtmp_t irtmp)
return ret; return ret;
} }
srs_human_trace("irtmp connect ok, ip=%s, server=%s/%d.%d.%d.%d, pid=%d, cid=%d", srs_human_trace("irtmp connect ok, ip=%s, server=%s/%d.%d.%d.%d, pid=%d, cid=%d",
ip, sig, major, minor, revision, build, pid, cid); ip, sig, major, minor, revision, build, pid, cid);
if ((ret = srs_rtmp_play_stream(irtmp)) != 0) { if ((ret = srs_rtmp_play_stream(irtmp)) != 0) {
srs_human_trace("irtmp play stream failed. ret=%d", ret); srs_human_trace("irtmp play stream failed. ret=%d", ret);
@ -263,7 +263,7 @@ int connect_oc(srs_rtmp_t ortmp)
return ret; return ret;
} }
srs_human_trace("ortmp connect ok, ip=%s, server=%s/%d.%d.%d.%d, pid=%d, cid=%d", srs_human_trace("ortmp connect ok, ip=%s, server=%s/%d.%d.%d.%d, pid=%d, cid=%d",
ip, sig, major, minor, revision, build, pid, cid); ip, sig, major, minor, revision, build, pid, cid);
if ((ret = srs_rtmp_publish_stream(ortmp)) != 0) { if ((ret = srs_rtmp_publish_stream(ortmp)) != 0) {
srs_human_trace("ortmp publish stream failed. ret=%d", ret); srs_human_trace("ortmp publish stream failed. ret=%d", ret);

View file

@ -81,8 +81,7 @@ int main(int argc, char** argv)
if (srs_rtmp_write_packet(rtmp, type, timestamp, data, size) != 0) { if (srs_rtmp_write_packet(rtmp, type, timestamp, data, size) != 0) {
goto rtmp_destroy; goto rtmp_destroy;
} }
srs_human_trace("sent packet: type=%s, time=%d, size=%d", srs_human_trace("sent packet: type=%s, time=%d, size=%d", srs_human_flv_tag_type2string(type), timestamp, size);
srs_human_flv_tag_type2string(type), timestamp, size);
usleep(40 * 1000); usleep(40 * 1000);
} }

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_async_call.hpp> #include <srs_app_async_call.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_ASYNC_CALL_HPP #ifndef SRS_APP_ASYNC_CALL_HPP
#define SRS_APP_ASYNC_CALL_HPP #define SRS_APP_ASYNC_CALL_HPP
/*
#include <srs_app_async_call.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,26 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
Copyright (c) 2013-2017 SRS(ossrs) *
* Permission is hereby granted, free of charge, to any person obtaining a copy of
Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in
this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to
the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so,
the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions:
subject to the following conditions: *
* The above copyright notice and this permission notice shall be included in all
The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software.
copies or substantial portions of the Software. *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
*/
#include <srs_app_bandwidth.hpp> #include <srs_app_bandwidth.hpp>
@ -69,8 +68,8 @@ void SrsBandwidthSample::calc_kbps(int _bytes, int _duration)
} }
/** /**
* recv bandwidth helper. * recv bandwidth helper.
*/ */
typedef bool (*_CheckPacketType)(SrsBandwidthPacket* pkt); typedef bool (*_CheckPacketType)(SrsBandwidthPacket* pkt);
bool _bandwidth_is_final(SrsBandwidthPacket* pkt) bool _bandwidth_is_final(SrsBandwidthPacket* pkt)
{ {
@ -140,7 +139,7 @@ int SrsBandwidth::bandwidth_check(SrsRtmpServer* rtmp, ISrsProtocolStatistic* io
if (_req->tcUrl.find(key) == std::string::npos) { if (_req->tcUrl.find(key) == std::string::npos) {
ret = ERROR_SYSTEM_BANDWIDTH_KEY; ret = ERROR_SYSTEM_BANDWIDTH_KEY;
srs_error("check the vhost=%s %s failed, tcUrl=%s, ret=%d", srs_error("check the vhost=%s %s failed, tcUrl=%s, ret=%d",
_req->vhost.c_str(), key.c_str(), _req->tcUrl.c_str(), ret); _req->vhost.c_str(), key.c_str(), _req->tcUrl.c_str(), ret);
return ret; return ret;
} }
@ -157,8 +156,8 @@ int SrsBandwidth::bandwidth_check(SrsRtmpServer* rtmp, ISrsProtocolStatistic* io
if (last_check_time > 0 && time_now - last_check_time < interval_ms) { if (last_check_time > 0 && time_now - last_check_time < interval_ms) {
ret = ERROR_SYSTEM_BANDWIDTH_DENIED; ret = ERROR_SYSTEM_BANDWIDTH_DENIED;
srs_trace("reject, " srs_trace("reject, "
"last_check=%"PRId64", now=%"PRId64", interval=%d", "last_check=%"PRId64", now=%"PRId64", interval=%d",
last_check_time, time_now, interval_ms); last_check_time, time_now, interval_ms);
_rtmp->response_connect_reject(_req, "bandcheck rejected"); _rtmp->response_connect_reject(_req, "bandcheck rejected");
return ret; return ret;
@ -238,9 +237,9 @@ int SrsBandwidth::do_bandwidth_check(SrsKbpsLimit* limit)
int64_t end_time = srs_get_system_time_ms(); int64_t end_time = srs_get_system_time_ms();
srs_trace("bandwidth ok. duartion=%dms(%d+%d), play=%dkbps, publish=%dkbps", srs_trace("bandwidth ok. duartion=%dms(%d+%d), play=%dkbps, publish=%dkbps",
(int)(end_time - start_time), play_sample.actual_duration_ms, (int)(end_time - start_time), play_sample.actual_duration_ms,
publish_sample.actual_duration_ms, play_sample.kbps, publish_sample.actual_duration_ms, play_sample.kbps,
publish_sample.kbps); publish_sample.kbps);
if ((ret = finial(play_sample, publish_sample, start_time, end_time)) != ERROR_SUCCESS) { if ((ret = finial(play_sample, publish_sample, start_time, end_time)) != ERROR_SUCCESS) {
return ret; return ret;

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
Copyright (c) 2013-2017 SRS(ossrs) *
* Permission is hereby granted, free of charge, to any person obtaining a copy of
Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in
this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to
the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so,
the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions:
subject to the following conditions: *
* The above copyright notice and this permission notice shall be included in all
The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software.
copies or substantial portions of the Software. *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
*/
#ifndef SRS_APP_BANDWIDTH_HPP #ifndef SRS_APP_BANDWIDTH_HPP
#define SRS_APP_BANDWIDTH_HPP #define SRS_APP_BANDWIDTH_HPP
/*
#include <srs_app_bandwidth.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -41,84 +37,84 @@ class SrsKbpsLimit;
class ISrsProtocolStatistic; class ISrsProtocolStatistic;
/** /**
* bandwidth check/test sample. * bandwidth check/test sample.
*/ */
class SrsBandwidthSample class SrsBandwidthSample
{ {
public: public:
/** /**
* the plan, how long to do the test, in ms, * the plan, how long to do the test, in ms,
* if exceed the duration, abort the test. * if exceed the duration, abort the test.
*/ */
int duration_ms; int duration_ms;
/** /**
* the plan, interval for each check/test packet, in ms * the plan, interval for each check/test packet, in ms
*/ */
int interval_ms; int interval_ms;
public: public:
/** /**
* the actual test duration, in ms. * the actual test duration, in ms.
*/ */
int actual_duration_ms; int actual_duration_ms;
/** /**
* the actual test bytes * the actual test bytes
*/ */
int bytes; int bytes;
/** /**
* the actual test kbps * the actual test kbps
*/ */
int kbps; int kbps;
public: public:
SrsBandwidthSample(); SrsBandwidthSample();
virtual ~SrsBandwidthSample(); virtual ~SrsBandwidthSample();
public: public:
/** /**
* update the bytes and actual duration, then calc the kbps. * update the bytes and actual duration, then calc the kbps.
* @param _bytes update the sample bytes. * @param _bytes update the sample bytes.
* @param _duration update the actual duration, in ms. * @param _duration update the actual duration, in ms.
*/ */
virtual void calc_kbps(int _bytes, int _duration); virtual void calc_kbps(int _bytes, int _duration);
}; };
/** /**
* bandwidth test agent which provides the interfaces for bandwidth check. * bandwidth test agent which provides the interfaces for bandwidth check.
* 1. if vhost disabled bandwidth check, ignore. * 1. if vhost disabled bandwidth check, ignore.
* 2. otherwise, check the key, error if verify failed. * 2. otherwise, check the key, error if verify failed.
* 3. check the interval limit, error if bandwidth in the interval window. * 3. check the interval limit, error if bandwidth in the interval window.
* 4. check the bandwidth under the max kbps. * 4. check the bandwidth under the max kbps.
* 5. send the bandwidth data to client. * 5. send the bandwidth data to client.
* bandwidth workflow: * bandwidth workflow:
* +------------+ +----------+ * +------------+ +----------+
* | Client | | Server | * | Client | | Server |
* +-----+------+ +-----+----+ * +-----+------+ +-----+----+
* | | * | |
* | connect vhost------> | if vhost enable bandwidth, * | connect vhost------> | if vhost enable bandwidth,
* | <-----result(success) | do bandwidth check. * | <-----result(success) | do bandwidth check.
* | | * | |
* | <----call(start play) | onSrsBandCheckStartPlayBytes * | <----call(start play) | onSrsBandCheckStartPlayBytes
* | result(playing)-----> | onSrsBandCheckStartingPlayBytes * | result(playing)-----> | onSrsBandCheckStartingPlayBytes
* | <-------data(playing) | onSrsBandCheckStartingPlayBytes * | <-------data(playing) | onSrsBandCheckStartingPlayBytes
* | <-----call(stop play) | onSrsBandCheckStopPlayBytes * | <-----call(stop play) | onSrsBandCheckStopPlayBytes
* | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes * | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes
* | | * | |
* | <-call(start publish) | onSrsBandCheckStartPublishBytes * | <-call(start publish) | onSrsBandCheckStartPublishBytes
* | result(publishing)--> | onSrsBandCheckStartingPublishBytes * | result(publishing)--> | onSrsBandCheckStartingPublishBytes
* | data(publishing)(3)-> | onSrsBandCheckStartingPublishBytes * | data(publishing)(3)-> | onSrsBandCheckStartingPublishBytes
* | <--call(stop publish) | onSrsBandCheckStopPublishBytes * | <--call(stop publish) | onSrsBandCheckStopPublishBytes
* | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes * | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes
* | | * | |
* | <--------------report | * | <--------------report |
* | final(2)------------> | finalClientPacket * | final(2)------------> | finalClientPacket
* | <END> | * | <END> |
* *
* 1. when flash client, server never wait the stop publish response, * 1. when flash client, server never wait the stop publish response,
* for the flash client queue is fullfill with other packets. * for the flash client queue is fullfill with other packets.
* 2. when flash client, server never wait the final packet, * 2. when flash client, server never wait the final packet,
* for the flash client directly close when got report packet. * for the flash client directly close when got report packet.
* 3. for linux client, it will send the publish data then send a stop publish, * 3. for linux client, it will send the publish data then send a stop publish,
* for the linux client donot know when to stop the publish. * for the linux client donot know when to stop the publish.
* when server got publishing and stop publish, stop publish. * when server got publishing and stop publish, stop publish.
*/ */
class SrsBandwidth class SrsBandwidth
{ {
private: private:
@ -129,74 +125,74 @@ public:
virtual ~SrsBandwidth(); virtual ~SrsBandwidth();
public: public:
/** /**
* do the bandwidth check. * do the bandwidth check.
* @param rtmp, server RTMP protocol object, send/recv RTMP packet to/from client. * @param rtmp, server RTMP protocol object, send/recv RTMP packet to/from client.
* @param io_stat, the underlayer io statistic, provides send/recv bytes count. * @param io_stat, the underlayer io statistic, provides send/recv bytes count.
* @param req, client request object, specifies the request info from client. * @param req, client request object, specifies the request info from client.
* @param local_ip, the ip of server which client connected at * @param local_ip, the ip of server which client connected at
*/ */
virtual int bandwidth_check(SrsRtmpServer* rtmp, ISrsProtocolStatistic* io_stat, SrsRequest* req, std::string local_ip); virtual int bandwidth_check(SrsRtmpServer* rtmp, ISrsProtocolStatistic* io_stat, SrsRequest* req, std::string local_ip);
private: private:
/** /**
* used to process band width check from client. * used to process band width check from client.
* @param limit, the bandwidth limit object, to slowdown if exceed the kbps. * @param limit, the bandwidth limit object, to slowdown if exceed the kbps.
*/ */
virtual int do_bandwidth_check(SrsKbpsLimit* limit); virtual int do_bandwidth_check(SrsKbpsLimit* limit);
// play check/test, downloading bandwidth kbps. // play check/test, downloading bandwidth kbps.
private: private:
/** /**
* start play/download bandwidth check/test, * start play/download bandwidth check/test,
* send start-play command to client, client must response starting-play * send start-play command to client, client must response starting-play
* to start the test. * to start the test.
*/ */
virtual int play_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int play_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
/** /**
* do play/download bandwidth check/test, * do play/download bandwidth check/test,
* server send call messages to client in specified time, * server send call messages to client in specified time,
* calc the time and bytes sent, then we got the kbps. * calc the time and bytes sent, then we got the kbps.
*/ */
virtual int play_checking(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int play_checking(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
/** /**
* stop play/download bandwidth check/test, * stop play/download bandwidth check/test,
* send stop-play command to client, client must response stopped-play * send stop-play command to client, client must response stopped-play
* to stop the test. * to stop the test.
*/ */
virtual int play_stop(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int play_stop(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
// publish check/test, publishing bandwidth kbps. // publish check/test, publishing bandwidth kbps.
private: private:
/** /**
* start publish/upload bandwidth check/test, * start publish/upload bandwidth check/test,
* send start-publish command to client, client must response starting-publish * send start-publish command to client, client must response starting-publish
* to start the test. * to start the test.
*/ */
virtual int publish_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int publish_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
/** /**
* do publish/upload bandwidth check/test, * do publish/upload bandwidth check/test,
* client send call messages to client in specified time, * client send call messages to client in specified time,
* server calc the time and bytes received, then we got the kbps. * server calc the time and bytes received, then we got the kbps.
* @remark, for linux client, it will send a stop publish client, server will stop publishing. * @remark, for linux client, it will send a stop publish client, server will stop publishing.
* then enter the publish-stop stage with client. * then enter the publish-stop stage with client.
* @remark, for flash client, it will send many many call messages, that is, * @remark, for flash client, it will send many many call messages, that is,
* the send queue is fullfill with call messages, so we should never expect the * the send queue is fullfill with call messages, so we should never expect the
* response message in the publish-stop stage. * response message in the publish-stop stage.
*/ */
virtual int publish_checking(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int publish_checking(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
/** /**
* stop publish/upload bandwidth check/test, * stop publish/upload bandwidth check/test,
* send stop-publish command to client, * send stop-publish command to client,
* for linux client, always expect a stopped-publish response from client, * for linux client, always expect a stopped-publish response from client,
* for flash client, the sent queue is fullfill with publishing call messages, * for flash client, the sent queue is fullfill with publishing call messages,
* so server never expect the stopped-publish from it. * so server never expect the stopped-publish from it.
*/ */
virtual int publish_stop(SrsBandwidthSample* sample, SrsKbpsLimit* limit); virtual int publish_stop(SrsBandwidthSample* sample, SrsKbpsLimit* limit);
private: private:
/** /**
* report and final packet * report and final packet
* report a finish packet, with the bytes/time/kbps bandwidth check/test result, * report a finish packet, with the bytes/time/kbps bandwidth check/test result,
* for linux client, server always expect a final packet from client, * for linux client, server always expect a final packet from client,
* for flash client, the sent queue is fullfill with publishing call messages, * for flash client, the sent queue is fullfill with publishing call messages,
* so server never expect the final packet from it. * so server never expect the final packet from it.
*/ */
virtual int finial(SrsBandwidthSample& play_sample, SrsBandwidthSample& publish_sample, int64_t start_time, int64_t& end_time); virtual int finial(SrsBandwidthSample& play_sample, SrsBandwidthSample& publish_sample, int64_t start_time, int64_t& end_time);
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_caster_flv.hpp> #include <srs_app_caster_flv.hpp>
@ -118,7 +118,7 @@ int SrsAppCasterFlv::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
} }
SrsDynamicHttpConn::SrsDynamicHttpConn(IConnectionManager* cm, st_netfd_t fd, SrsHttpServeMux* m, string cip) SrsDynamicHttpConn::SrsDynamicHttpConn(IConnectionManager* cm, st_netfd_t fd, SrsHttpServeMux* m, string cip)
: SrsHttpConn(cm, fd, m, cip) : SrsHttpConn(cm, fd, m, cip)
{ {
sdk = NULL; sdk = NULL;
pprint = SrsPithyPrint::create_caster(); pprint = SrsPithyPrint::create_caster();

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_CASTER_FLV_HPP #ifndef SRS_APP_CASTER_FLV_HPP
#define SRS_APP_CASTER_FLV_HPP #define SRS_APP_CASTER_FLV_HPP
/*
#include <srs_app_caster_flv.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -56,7 +52,7 @@ class SrsSimpleRtmpClient;
* the stream caster for flv stream over HTTP POST. * the stream caster for flv stream over HTTP POST.
*/ */
class SrsAppCasterFlv : virtual public ISrsTcpHandler class SrsAppCasterFlv : virtual public ISrsTcpHandler
, virtual public IConnectionManager, virtual public ISrsHttpHandler , virtual public IConnectionManager, virtual public ISrsHttpHandler
{ {
private: private:
std::string output; std::string output;
@ -67,13 +63,13 @@ public:
virtual ~SrsAppCasterFlv(); virtual ~SrsAppCasterFlv();
public: public:
virtual int initialize(); virtual int initialize();
// ISrsTcpHandler // ISrsTcpHandler
public: public:
virtual int on_tcp_client(st_netfd_t stfd); virtual int on_tcp_client(st_netfd_t stfd);
// IConnectionManager // IConnectionManager
public: public:
virtual void remove(SrsConnection* c); virtual void remove(SrsConnection* c);
// ISrsHttpHandler // ISrsHttpHandler
public: public:
virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r); virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_config.hpp> #include <srs_app_config.hpp>
@ -157,7 +157,7 @@ namespace _srs_internal
ssize_t nread = 0; ssize_t nread = 0;
if ((ret = reader.read(start, filesize, &nread)) != ERROR_SUCCESS) { if ((ret = reader.read(start, filesize, &nread)) != ERROR_SUCCESS) {
srs_error("read file read error. expect %d, actual %d bytes, ret=%d", srs_error("read file read error. expect %d, actual %d bytes, ret=%d",
filesize, nread, ret); filesize, nread, ret);
return ret; return ret;
} }
@ -468,7 +468,7 @@ int srs_config_transform_vhost(SrsConfDirective* root)
if (n == "time_jitter" || n == "mix_correct" || n == "atc" || n == "atc_auto" if (n == "time_jitter" || n == "mix_correct" || n == "atc" || n == "atc_auto"
|| n == "mw_latency" || n == "gop_cache" || n == "queue_length" || n == "send_min_interval" || n == "mw_latency" || n == "gop_cache" || n == "queue_length" || n == "send_min_interval"
|| n == "reduce_sequence_header" || n == "reduce_sequence_header"
) { ) {
it = dir->directives.erase(it); it = dir->directives.erase(it);
SrsConfDirective* play = dir->get_or_create("play"); SrsConfDirective* play = dir->get_or_create("play");
@ -925,13 +925,13 @@ int SrsConfDirective::parse_conf(SrsConfigBuffer* buffer, SrsDirectiveType type)
ret = read_token(buffer, args, line_start); ret = read_token(buffer, args, line_start);
/** /**
* ret maybe: * ret maybe:
* ERROR_SYSTEM_CONFIG_INVALID error. * ERROR_SYSTEM_CONFIG_INVALID error.
* ERROR_SYSTEM_CONFIG_DIRECTIVE directive terminated by ';' found * ERROR_SYSTEM_CONFIG_DIRECTIVE directive terminated by ';' found
* ERROR_SYSTEM_CONFIG_BLOCK_START token terminated by '{' found * ERROR_SYSTEM_CONFIG_BLOCK_START token terminated by '{' found
* ERROR_SYSTEM_CONFIG_BLOCK_END the '}' found * ERROR_SYSTEM_CONFIG_BLOCK_END the '}' found
* ERROR_SYSTEM_CONFIG_EOF the config file is done * ERROR_SYSTEM_CONFIG_EOF the config file is done
*/ */
if (ret == ERROR_SYSTEM_CONFIG_INVALID) { if (ret == ERROR_SYSTEM_CONFIG_INVALID) {
return ret; return ret;
} }
@ -1473,7 +1473,7 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root)
continue; continue;
} }
srs_trace("ignore reload vhost, enabled old: %d, new: %d", srs_trace("ignore reload vhost, enabled old: %d, new: %d",
get_vhost_enabled(old_vhost), get_vhost_enabled(new_vhost)); get_vhost_enabled(old_vhost), get_vhost_enabled(new_vhost));
} }
return ret; return ret;
@ -1624,7 +1624,7 @@ int SrsConfig::reload_http_api(SrsConfDirective* old_root)
// ENABLED => ENABLED (modified) // ENABLED => ENABLED (modified)
if (get_http_api_enabled(old_http_api) && get_http_api_enabled(new_http_api) if (get_http_api_enabled(old_http_api) && get_http_api_enabled(new_http_api)
&& !srs_directive_equals(old_http_api, new_http_api) && !srs_directive_equals(old_http_api, new_http_api)
) { ) {
for (it = subscribes.begin(); it != subscribes.end(); ++it) { for (it = subscribes.begin(); it != subscribes.end(); ++it) {
ISrsReloadHandler* subscribe = *it; ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_http_api_enabled()) != ERROR_SUCCESS) { if ((ret = subscribe->on_reload_http_api_enabled()) != ERROR_SUCCESS) {
@ -1711,7 +1711,7 @@ int SrsConfig::reload_http_stream(SrsConfDirective* old_root)
// ENABLED => ENABLED (modified) // ENABLED => ENABLED (modified)
if (get_http_stream_enabled(old_http_stream) && get_http_stream_enabled(new_http_stream) if (get_http_stream_enabled(old_http_stream) && get_http_stream_enabled(new_http_stream)
&& !srs_directive_equals(old_http_stream, new_http_stream) && !srs_directive_equals(old_http_stream, new_http_stream)
) { ) {
for (it = subscribes.begin(); it != subscribes.end(); ++it) { for (it = subscribes.begin(); it != subscribes.end(); ++it) {
ISrsReloadHandler* subscribe = *it; ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_http_stream_updated()) != ERROR_SUCCESS) { if ((ret = subscribe->on_reload_http_stream_updated()) != ERROR_SUCCESS) {
@ -1861,7 +1861,7 @@ int SrsConfig::reload_ingest(SrsConfDirective* new_vhost, SrsConfDirective* old_
ISrsReloadHandler* subscribe = *it; ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_ingest_removed(vhost, ingest_id)) != ERROR_SUCCESS) { if ((ret = subscribe->on_reload_ingest_removed(vhost, ingest_id)) != ERROR_SUCCESS) {
srs_error("vhost %s notify subscribes ingest=%s removed failed. ret=%d", srs_error("vhost %s notify subscribes ingest=%s removed failed. ret=%d",
vhost.c_str(), ingest_id.c_str(), ret); vhost.c_str(), ingest_id.c_str(), ret);
return ret; return ret;
} }
} }
@ -1881,7 +1881,7 @@ int SrsConfig::reload_ingest(SrsConfDirective* new_vhost, SrsConfDirective* old_
ISrsReloadHandler* subscribe = *it; ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_ingest_added(vhost, ingest_id)) != ERROR_SUCCESS) { if ((ret = subscribe->on_reload_ingest_added(vhost, ingest_id)) != ERROR_SUCCESS) {
srs_error("vhost %s notify subscribes ingest=%s added failed. ret=%d", srs_error("vhost %s notify subscribes ingest=%s added failed. ret=%d",
vhost.c_str(), ingest_id.c_str(), ret); vhost.c_str(), ingest_id.c_str(), ret);
return ret; return ret;
} }
} }
@ -1906,7 +1906,7 @@ int SrsConfig::reload_ingest(SrsConfDirective* new_vhost, SrsConfDirective* old_
ISrsReloadHandler* subscribe = *it; ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_ingest_updated(vhost, ingest_id)) != ERROR_SUCCESS) { if ((ret = subscribe->on_reload_ingest_updated(vhost, ingest_id)) != ERROR_SUCCESS) {
srs_error("vhost %s notify subscribes ingest=%s updated failed. ret=%d", srs_error("vhost %s notify subscribes ingest=%s updated failed. ret=%d",
vhost.c_str(), ingest_id.c_str(), ret); vhost.c_str(), ingest_id.c_str(), ret);
return ret; return ret;
} }
} }
@ -3488,33 +3488,33 @@ int SrsConfig::parse_argv(int& i, char** argv)
void SrsConfig::print_help(char** argv) void SrsConfig::print_help(char** argv)
{ {
printf( printf(
RTMP_SIG_SRS_SERVER" "RTMP_SIG_SRS_COPYRIGHT"\n" RTMP_SIG_SRS_SERVER" "RTMP_SIG_SRS_COPYRIGHT"\n"
"License: "RTMP_SIG_SRS_LICENSE"\n" "License: "RTMP_SIG_SRS_LICENSE"\n"
"Primary: "RTMP_SIG_SRS_PRIMARY"\n" "Primary: "RTMP_SIG_SRS_PRIMARY"\n"
"Authors: "RTMP_SIG_SRS_AUTHROS"\n" "Authors: "RTMP_SIG_SRS_AUTHROS"\n"
"Build: "SRS_AUTO_BUILD_DATE" Configuration:"SRS_AUTO_USER_CONFIGURE"\n" "Build: "SRS_AUTO_BUILD_DATE" Configuration:"SRS_AUTO_USER_CONFIGURE"\n"
"Features:"SRS_AUTO_CONFIGURE"\n""\n" "Features:"SRS_AUTO_CONFIGURE"\n""\n"
"Usage: %s [-h?vVsS] [[-t] -c <filename>]\n" "Usage: %s [-h?vVsS] [[-t] -c <filename>]\n"
"\n" "\n"
"Options:\n" "Options:\n"
" -?, -h : show this help and exit(0)\n" " -?, -h : show this help and exit(0)\n"
" -v, -V : show version and exit(0)\n" " -v, -V : show version and exit(0)\n"
" -g, -G : show server signature and exit(0)\n" " -g, -G : show server signature and exit(0)\n"
" -t : test configuration file, exit(error_code).\n" " -t : test configuration file, exit(error_code).\n"
" -c filename : use configuration file for SRS\n" " -c filename : use configuration file for SRS\n"
"For srs-dolphin:\n" "For srs-dolphin:\n"
" -p rtmp-port : the rtmp port to listen.\n" " -p rtmp-port : the rtmp port to listen.\n"
" -x http-port : the http port to listen.\n" " -x http-port : the http port to listen.\n"
"\n" "\n"
RTMP_SIG_SRS_WEB"\n" RTMP_SIG_SRS_WEB"\n"
RTMP_SIG_SRS_URL"\n" RTMP_SIG_SRS_URL"\n"
"Email: "RTMP_SIG_SRS_EMAIL"\n" "Email: "RTMP_SIG_SRS_EMAIL"\n"
"\n" "\n"
"For example:\n" "For example:\n"
" %s -v\n" " %s -v\n"
" %s -t -c "SRS_CONF_DEFAULT_COFNIG_FILE"\n" " %s -t -c "SRS_CONF_DEFAULT_COFNIG_FILE"\n"
" %s -c "SRS_CONF_DEFAULT_COFNIG_FILE"\n", " %s -c "SRS_CONF_DEFAULT_COFNIG_FILE"\n",
argv[0], argv[0], argv[0], argv[0]); argv[0], argv[0], argv[0], argv[0]);
} }
int SrsConfig::parse_file(const char* filename) int SrsConfig::parse_file(const char* filename)
@ -3563,7 +3563,7 @@ int SrsConfig::check_config()
&& n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms" && n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms"
&& n != "http_server" && n != "stream_caster" && n != "kafka" && n != "http_server" && n != "stream_caster" && n != "kafka"
&& n != "utc_time" && n != "work_dir" && n != "asprocess" && n != "utc_time" && n != "work_dir" && n != "asprocess"
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("unsupported directive %s, ret=%d", n.c_str(), ret); srs_error("unsupported directive %s, ret=%d", n.c_str(), ret);
return ret; return ret;
@ -3694,12 +3694,12 @@ int SrsConfig::check_config()
if (nb_total >= max_open_files) { if (nb_total >= max_open_files) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("invalid max_connections=%d, required=%d, system limit to %d, " srs_error("invalid max_connections=%d, required=%d, system limit to %d, "
"total=%d(max_connections=%d, nb_consumed_fds=%d), ret=%d. " "total=%d(max_connections=%d, nb_consumed_fds=%d), ret=%d. "
"you can change max_connections from %d to %d, or " "you can change max_connections from %d to %d, or "
"you can login as root and set the limit: ulimit -HSn %d", "you can login as root and set the limit: ulimit -HSn %d",
nb_connections, nb_total + 100, max_open_files, nb_connections, nb_total + 100, max_open_files,
nb_total, nb_connections, nb_consumed_fds, nb_total, nb_connections, nb_consumed_fds,
ret, nb_connections, nb_canbe, nb_total + 100); ret, nb_connections, nb_canbe, nb_total + 100);
return ret; return ret;
} }
} }
@ -3710,7 +3710,7 @@ int SrsConfig::check_config()
if (get_heartbeat_interval() <= 0) { if (get_heartbeat_interval() <= 0) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive heartbeat interval invalid, interval=%"PRId64", ret=%d", srs_error("directive heartbeat interval invalid, interval=%"PRId64", ret=%d",
get_heartbeat_interval(), ret); get_heartbeat_interval(), ret);
return ret; return ret;
} }
@ -3720,7 +3720,7 @@ int SrsConfig::check_config()
if (get_stats_network() < 0) { if (get_stats_network() < 0) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive stats network invalid, network=%d, ret=%d", srs_error("directive stats network invalid, network=%d, ret=%d",
get_stats_network(), ret); get_stats_network(), ret);
return ret; return ret;
} }
if (true) { if (true) {
@ -3729,7 +3729,7 @@ int SrsConfig::check_config()
if (index >= (int)ips.size()) { if (index >= (int)ips.size()) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("stats network invalid, total local ip count=%d, index=%d, ret=%d", srs_error("stats network invalid, total local ip count=%d, index=%d, ret=%d",
(int)ips.size(), index, ret); (int)ips.size(), index, ret);
return ret; return ret;
} }
srs_warn("stats network use index=%d, ip=%s", index, ips.at(index).c_str()); srs_warn("stats network use index=%d, ip=%s", index, ips.at(index).c_str());
@ -3754,7 +3754,7 @@ int SrsConfig::check_config()
if (get_http_api_listen().empty()) { if (get_http_api_listen().empty()) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive http_api listen invalid, listen=%s, ret=%d", srs_error("directive http_api listen invalid, listen=%s, ret=%d",
get_http_api_listen().c_str(), ret); get_http_api_listen().c_str(), ret);
return ret; return ret;
} }
@ -3764,7 +3764,7 @@ int SrsConfig::check_config()
if (get_http_stream_listen().empty()) { if (get_http_stream_listen().empty()) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive http_stream listen invalid, listen=%s, ret=%d", srs_error("directive http_stream listen invalid, listen=%s, ret=%d",
get_http_stream_listen().c_str(), ret); get_http_stream_listen().c_str(), ret);
return ret; return ret;
} }
@ -3823,7 +3823,7 @@ int SrsConfig::check_config()
&& n != "security" && n != "http_remux" && n != "dash" && n != "security" && n != "http_remux" && n != "dash"
&& n != "http_static" && n != "hds" && n != "exec" && n != "http_static" && n != "hds" && n != "exec"
&& n != "in_ack_size" && n != "out_ack_size" && n != "in_ack_size" && n != "out_ack_size"
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("unsupported vhost directive %s, ret=%d", n.c_str(), ret); srs_error("unsupported vhost directive %s, ret=%d", n.c_str(), ret);
return ret; return ret;
@ -3834,7 +3834,7 @@ int SrsConfig::check_config()
string m = conf->at(j)->name; string m = conf->at(j)->name;
if (m != "enabled" && m != "dvr_apply" && m != "dvr_path" && m != "dvr_plan" if (m != "enabled" && m != "dvr_apply" && m != "dvr_path" && m != "dvr_plan"
&& m != "dvr_duration" && m != "dvr_wait_keyframe" && m != "time_jitter" && m != "dvr_duration" && m != "dvr_wait_keyframe" && m != "time_jitter"
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("unsupported vhost dvr directive %s, ret=%d", m.c_str(), ret); srs_error("unsupported vhost dvr directive %s, ret=%d", m.c_str(), ret);
return ret; return ret;
@ -3863,7 +3863,7 @@ int SrsConfig::check_config()
string m = conf->at(j)->name; string m = conf->at(j)->name;
if (m != "time_jitter" && m != "mix_correct" && m != "atc" && m != "atc_auto" && m != "mw_latency" if (m != "time_jitter" && m != "mix_correct" && m != "atc" && m != "atc_auto" && m != "mw_latency"
&& m != "gop_cache" && m != "queue_length" && m != "send_min_interval" && m != "reduce_sequence_header" && m != "gop_cache" && m != "queue_length" && m != "send_min_interval" && m != "reduce_sequence_header"
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("unsupported vhost play directive %s, ret=%d", m.c_str(), ret); srs_error("unsupported vhost play directive %s, ret=%d", m.c_str(), ret);
return ret; return ret;
@ -4040,22 +4040,22 @@ int SrsConfig::check_config()
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
if (get_global_chunk_size() < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE if (get_global_chunk_size() < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE
|| get_global_chunk_size() > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE || get_global_chunk_size() > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d", srs_error("directive chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d",
get_global_chunk_size(), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE, get_global_chunk_size(), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE,
SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret); SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret);
return ret; return ret;
} }
for (int i = 0; i < (int)vhosts.size(); i++) { for (int i = 0; i < (int)vhosts.size(); i++) {
SrsConfDirective* vhost = vhosts[i]; SrsConfDirective* vhost = vhosts[i];
if (get_chunk_size(vhost->arg0()) < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE if (get_chunk_size(vhost->arg0()) < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE
|| get_chunk_size(vhost->arg0()) > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE || get_chunk_size(vhost->arg0()) > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive vhost %s chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d", srs_error("directive vhost %s chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d",
vhost->arg0().c_str(), get_chunk_size(vhost->arg0()), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE, vhost->arg0().c_str(), get_chunk_size(vhost->arg0()), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE,
SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret); SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret);
return ret; return ret;
} }
} }
@ -4079,8 +4079,8 @@ int SrsConfig::check_config()
SrsConfDirective* ingest = ingesters[j]; SrsConfDirective* ingest = ingesters[j];
if (get_ingest_enabled(ingest)) { if (get_ingest_enabled(ingest)) {
srs_warn("ingest %s of vhost %s is disabled by configure", srs_warn("ingest %s of vhost %s is disabled by configure",
ingest->arg0().c_str(), vhost->arg0().c_str() ingest->arg0().c_str(), vhost->arg0().c_str()
); );
} }
} }
#endif #endif

File diff suppressed because it is too large Load diff

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_conn.hpp> #include <srs_app_conn.hpp>

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_CONN_HPP #ifndef SRS_APP_CONN_HPP
#define SRS_APP_CONN_HPP #define SRS_APP_CONN_HPP
/*
#include <srs_app_conn.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -55,34 +51,34 @@ public:
}; };
/** /**
* the basic connection of SRS, * the basic connection of SRS,
* all connections accept from listener must extends from this base class, * all connections accept from listener must extends from this base class,
* server will add the connection to manager, and delete it when remove. * server will add the connection to manager, and delete it when remove.
*/ */
class SrsConnection : virtual public ISrsOneCycleThreadHandler, virtual public IKbpsDelta, virtual public ISrsReloadHandler class SrsConnection : virtual public ISrsOneCycleThreadHandler, virtual public IKbpsDelta, virtual public ISrsReloadHandler
{ {
private: private:
/** /**
* each connection start a green thread, * each connection start a green thread,
* when thread stop, the connection will be delete by server. * when thread stop, the connection will be delete by server.
*/ */
SrsOneCycleThread* pthread; SrsOneCycleThread* pthread;
/** /**
* the id of connection. * the id of connection.
*/ */
int id; int id;
protected: protected:
/** /**
* the manager object to manage the connection. * the manager object to manage the connection.
*/ */
IConnectionManager* manager; IConnectionManager* manager;
/** /**
* the underlayer st fd handler. * the underlayer st fd handler.
*/ */
st_netfd_t stfd; st_netfd_t stfd;
/** /**
* the ip of client. * the ip of client.
*/ */
std::string ip; std::string ip;
/** /**
* whether the connection is disposed, * whether the connection is disposed,
@ -95,8 +91,8 @@ protected:
*/ */
bool expired; bool expired;
/** /**
* the underlayer socket. * the underlayer socket.
*/ */
SrsStSocket* skt; SrsStSocket* skt;
/** /**
* connection total kbps. * connection total kbps.
@ -125,33 +121,33 @@ public:
*/ */
virtual void dispose(); virtual void dispose();
/** /**
* start the client green thread. * start the client green thread.
* when server get a client from listener, * when server get a client from listener,
* 1. server will create an concrete connection(for instance, RTMP connection), * 1. server will create an concrete connection(for instance, RTMP connection),
* 2. then add connection to its connection manager, * 2. then add connection to its connection manager,
* 3. start the client thread by invoke this start() * 3. start the client thread by invoke this start()
* when client cycle thread stop, invoke the on_thread_stop(), which will use server * when client cycle thread stop, invoke the on_thread_stop(), which will use server
* to remove the client by server->remove(this). * to remove the client by server->remove(this).
*/ */
virtual int start(); virtual int start();
// interface ISrsOneCycleThreadHandler // interface ISrsOneCycleThreadHandler
public: public:
/** /**
* the thread cycle function, * the thread cycle function,
* when serve connection completed, terminate the loop which will terminate the thread, * when serve connection completed, terminate the loop which will terminate the thread,
* thread will invoke the on_thread_stop() when it terminated. * thread will invoke the on_thread_stop() when it terminated.
*/ */
virtual int cycle(); virtual int cycle();
/** /**
* when the thread cycle finished, thread will invoke the on_thread_stop(), * when the thread cycle finished, thread will invoke the on_thread_stop(),
* which will remove self from server, server will remove the connection from manager * which will remove self from server, server will remove the connection from manager
* then delete the connection. * then delete the connection.
*/ */
virtual void on_thread_stop(); virtual void on_thread_stop();
public: public:
/** /**
* get the srs id which identify the client. * get the srs id which identify the client.
*/ */
virtual int srs_id(); virtual int srs_id();
/** /**
* set connection to expired. * set connection to expired.
@ -159,8 +155,8 @@ public:
virtual void expire(); virtual void expire();
protected: protected:
/** /**
* for concrete connection to do the cycle. * for concrete connection to do the cycle.
*/ */
virtual int do_cycle() = 0; virtual int do_cycle() = 0;
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_dash.hpp> #include <srs_app_dash.hpp>
@ -399,19 +399,19 @@ int SrsMpdWriter::write(SrsFormat* format)
stringstream ss; stringstream ss;
ss << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << endl ss << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << endl
<< "<MPD profiles=\"urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash-if-simple\" " << endl << "<MPD profiles=\"urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash-if-simple\" " << endl
<< " ns1:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" " << endl << " ns1:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" " << endl
<< " xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:ns1=\"http://www.w3.org/2001/XMLSchema-instance\" " << endl << " xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:ns1=\"http://www.w3.org/2001/XMLSchema-instance\" " << endl
<< " type=\"dynamic\" minimumUpdatePeriod=\"PT" << update_period / 1000 << "S\" " << endl << " type=\"dynamic\" minimumUpdatePeriod=\"PT" << update_period / 1000 << "S\" " << endl
<< " timeShiftBufferDepth=\"PT" << timeshit / 1000 << "S\" availabilityStartTime=\"1970-01-01T00:00:00Z\" " << endl << " timeShiftBufferDepth=\"PT" << timeshit / 1000 << "S\" availabilityStartTime=\"1970-01-01T00:00:00Z\" " << endl
<< " maxSegmentDuration=\"PT" << fragment / 1000 << "S\" minBufferTime=\"PT" << fragment / 1000 << "S\" >" << endl << " maxSegmentDuration=\"PT" << fragment / 1000 << "S\" minBufferTime=\"PT" << fragment / 1000 << "S\" >" << endl
<< " <BaseURL>" << req->stream << "/" << "</BaseURL>" << endl << " <BaseURL>" << req->stream << "/" << "</BaseURL>" << endl
<< " <Period start=\"PT0S\">" << endl; << " <Period start=\"PT0S\">" << endl;
if (format->acodec) { if (format->acodec) {
ss << " <AdaptationSet mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">" << endl; ss << " <AdaptationSet mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">" << endl;
ss << " <SegmentTemplate duration=\"" << fragment / 1000 << "\" " ss << " <SegmentTemplate duration=\"" << fragment / 1000 << "\" "
<< "initialization=\"$RepresentationID$-init.mp4\" " << "initialization=\"$RepresentationID$-init.mp4\" "
<< "media=\"$RepresentationID$-$Number$.m4s\" />" << endl; << "media=\"$RepresentationID$-$Number$.m4s\" />" << endl;
ss << " <Representation id=\"audio\" bandwidth=\"48000\" codecs=\"mp4a.40.2\" />" << endl; ss << " <Representation id=\"audio\" bandwidth=\"48000\" codecs=\"mp4a.40.2\" />" << endl;
ss << " </AdaptationSet>" << endl; ss << " </AdaptationSet>" << endl;
} }
@ -420,14 +420,14 @@ int SrsMpdWriter::write(SrsFormat* format)
int h = format->vcodec->height; int h = format->vcodec->height;
ss << " <AdaptationSet mimeType=\"video/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">" << endl; ss << " <AdaptationSet mimeType=\"video/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">" << endl;
ss << " <SegmentTemplate duration=\"" << fragment / 1000 << "\" " ss << " <SegmentTemplate duration=\"" << fragment / 1000 << "\" "
<< "initialization=\"$RepresentationID$-init.mp4\" " << "initialization=\"$RepresentationID$-init.mp4\" "
<< "media=\"$RepresentationID$-$Number$.m4s\" />" << endl; << "media=\"$RepresentationID$-$Number$.m4s\" />" << endl;
ss << " <Representation id=\"video\" bandwidth=\"800000\" codecs=\"avc1.64001e\" " ss << " <Representation id=\"video\" bandwidth=\"800000\" codecs=\"avc1.64001e\" "
<< "width=\"" << w << "\" height=\"" << h << "\"/>" << endl; << "width=\"" << w << "\" height=\"" << h << "\"/>" << endl;
ss << " </AdaptationSet>" << endl; ss << " </AdaptationSet>" << endl;
} }
ss << " </Period>" << endl ss << " </Period>" << endl
<< "</MPD>" << endl; << "</MPD>" << endl;
SrsFileWriter* fw = new SrsFileWriter(); SrsFileWriter* fw = new SrsFileWriter();
SrsAutoFree(SrsFileWriter, fw); SrsAutoFree(SrsFileWriter, fw);
@ -566,7 +566,7 @@ int SrsDashController::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* fo
} }
bool reopen = format->video->frame_type == SrsVideoAvcFrameTypeKeyFrame bool reopen = format->video->frame_type == SrsVideoAvcFrameTypeKeyFrame
&& vcurrent->duration() >= fragment; && vcurrent->duration() >= fragment;
if (reopen) { if (reopen) {
if ((ret = vcurrent->reap()) != ERROR_SUCCESS) { if ((ret = vcurrent->reap()) != ERROR_SUCCESS) {
return ret; return ret;

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_DASH_HPP #ifndef SRS_APP_DASH_HPP
#define SRS_APP_DASH_HPP #define SRS_APP_DASH_HPP
/*
#include <srs_app_dash.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_dvr.hpp> #include <srs_app_dvr.hpp>
@ -430,7 +430,7 @@ int SrsDvrFlvSegmenter::encode_video(SrsSharedPtrMessage* video)
int size = video->size; int size = video->size;
bool sh = SrsFlvVideo::sh(payload, size); bool sh = SrsFlvVideo::sh(payload, size);
bool keyframe = SrsFlvVideo::h264(payload, size) bool keyframe = SrsFlvVideo::h264(payload, size)
&& SrsFlvVideo::keyframe(payload, size) && !sh; && SrsFlvVideo::keyframe(payload, size) && !sh;
if (keyframe) { if (keyframe) {
has_keyframe = true; has_keyframe = true;
@ -909,8 +909,8 @@ int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
char* payload = msg->payload; char* payload = msg->payload;
int size = msg->size; int size = msg->size;
bool is_key_frame = SrsFlvVideo::h264(payload, size) bool is_key_frame = SrsFlvVideo::h264(payload, size)
&& SrsFlvVideo::keyframe(payload, size) && SrsFlvVideo::keyframe(payload, size)
&& !SrsFlvVideo::sh(payload, size); && !SrsFlvVideo::sh(payload, size);
if (!is_key_frame) { if (!is_key_frame) {
return ret; return ret;
} }

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_DVR_HPP #ifndef SRS_APP_DVR_HPP
#define SRS_APP_DVR_HPP #define SRS_APP_DVR_HPP
/*
#include <srs_app_dvr.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -166,8 +163,8 @@ protected:
}; };
/** /**
* the dvr async call. * the dvr async call.
*/ */
class SrsDvrAsyncCallOnDvr : public ISrsAsyncCallTask class SrsDvrAsyncCallOnDvr : public ISrsAsyncCallTask
{ {
private: private:
@ -184,7 +181,7 @@ public:
/** /**
* The DVR plan, when and how to reap segment. * The DVR plan, when and how to reap segment.
*/ */
class SrsDvrPlan : public ISrsReloadHandler class SrsDvrPlan : public ISrsReloadHandler
{ {
public: public:
@ -204,7 +201,7 @@ public:
virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata);
virtual int on_audio(SrsSharedPtrMessage* shared_audio); virtual int on_audio(SrsSharedPtrMessage* shared_audio);
virtual int on_video(SrsSharedPtrMessage* shared_video); virtual int on_video(SrsSharedPtrMessage* shared_video);
// Internal interface for segmenter. // Internal interface for segmenter.
public: public:
// When segmenter close a segment. // When segmenter close a segment.
virtual int on_reap_segment(); virtual int on_reap_segment();
@ -281,23 +278,23 @@ public:
*/ */
virtual int on_publish(); virtual int on_publish();
/** /**
* the unpublish event., * the unpublish event.,
* when encoder stop(unpublish) to publish RTMP stream. * when encoder stop(unpublish) to publish RTMP stream.
*/ */
virtual void on_unpublish(); virtual void on_unpublish();
/** /**
* get some information from metadata, it's optinal. * get some information from metadata, it's optinal.
*/ */
virtual int on_meta_data(SrsSharedPtrMessage* metadata); virtual int on_meta_data(SrsSharedPtrMessage* metadata);
/** /**
* mux the audio packets to dvr. * mux the audio packets to dvr.
* @param shared_audio, directly ptr, copy it if need to save it. * @param shared_audio, directly ptr, copy it if need to save it.
*/ */
virtual int on_audio(SrsSharedPtrMessage* shared_audio); virtual int on_audio(SrsSharedPtrMessage* shared_audio);
/** /**
* mux the video packets to dvr. * mux the video packets to dvr.
* @param shared_video, directly ptr, copy it if need to save it. * @param shared_video, directly ptr, copy it if need to save it.
*/ */
virtual int on_video(SrsSharedPtrMessage* shared_video); virtual int on_video(SrsSharedPtrMessage* shared_video);
// interface ISrsReloadHandler // interface ISrsReloadHandler
public: public:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_edge.hpp> #include <srs_app_edge.hpp>
@ -568,7 +568,7 @@ int SrsEdgeForwarder::proxy(SrsCommonMessage* msg)
|| msg->header.is_set_chunk_size() || msg->header.is_set_chunk_size()
|| msg->header.is_window_ackledgement_size() || msg->header.is_window_ackledgement_size()
|| msg->header.is_ackledgement() || msg->header.is_ackledgement()
) { ) {
return ret; return ret;
} }
@ -700,7 +700,7 @@ int SrsPublishEdge::on_client_publish()
if (state != SrsEdgeStateInit) { if (state != SrsEdgeStateInit) {
ret = ERROR_RTMP_EDGE_PUBLISH_STATE; ret = ERROR_RTMP_EDGE_PUBLISH_STATE;
srs_error("invalid state for client to publish stream on edge. " srs_error("invalid state for client to publish stream on edge. "
"state=%d, ret=%d", state, ret); "state=%d, ret=%d", state, ret);
return ret; return ret;
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_EDGE_HPP #ifndef SRS_APP_EDGE_HPP
#define SRS_APP_EDGE_HPP #define SRS_APP_EDGE_HPP
/*
#include <srs_app_edge.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_st.hpp> #include <srs_app_st.hpp>
@ -52,8 +48,8 @@ class SrsSimpleRtmpClient;
class SrsPacket; class SrsPacket;
/** /**
* the state of edge, auto machine * the state of edge, auto machine
*/ */
enum SrsEdgeState enum SrsEdgeState
{ {
SrsEdgeStateInit = 0, SrsEdgeStateInit = 0,
@ -68,8 +64,8 @@ enum SrsEdgeState
}; };
/** /**
* the state of edge from user, manual machine * the state of edge from user, manual machine
*/ */
enum SrsEdgeUserState enum SrsEdgeUserState
{ {
SrsEdgeUserStateInit = 0, SrsEdgeUserStateInit = 0,
@ -116,8 +112,8 @@ public:
}; };
/** /**
* edge used to ingest stream from origin. * edge used to ingest stream from origin.
*/ */
class SrsEdgeIngester : public ISrsReusableThread2Handler class SrsEdgeIngester : public ISrsReusableThread2Handler
{ {
private: private:
@ -146,8 +142,8 @@ private:
}; };
/** /**
* edge used to forward stream to origin. * edge used to forward stream to origin.
*/ */
class SrsEdgeForwarder : public ISrsReusableThread2Handler class SrsEdgeForwarder : public ISrsReusableThread2Handler
{ {
private: private:
@ -158,15 +154,15 @@ private:
SrsSimpleRtmpClient* sdk; SrsSimpleRtmpClient* sdk;
SrsLbRoundRobin* lb; SrsLbRoundRobin* lb;
/** /**
* we must ensure one thread one fd principle, * we must ensure one thread one fd principle,
* that is, a fd must be write/read by the one thread. * that is, a fd must be write/read by the one thread.
* the publish service thread will proxy(msg), and the edge forward thread * the publish service thread will proxy(msg), and the edge forward thread
* will cycle(), so we use queue for cycle to send the msg of proxy. * will cycle(), so we use queue for cycle to send the msg of proxy.
*/ */
SrsMessageQueue* queue; SrsMessageQueue* queue;
/** /**
* error code of send, for edge proxy thread to query. * error code of send, for edge proxy thread to query.
*/ */
int send_error_code; int send_error_code;
public: public:
SrsEdgeForwarder(); SrsEdgeForwarder();
@ -185,9 +181,9 @@ public:
}; };
/** /**
* play edge control service. * play edge control service.
* downloading edge speed-up. * downloading edge speed-up.
*/ */
class SrsPlayEdge class SrsPlayEdge
{ {
private: private:
@ -198,31 +194,31 @@ public:
virtual ~SrsPlayEdge(); virtual ~SrsPlayEdge();
public: public:
/** /**
* always use the req of source, * always use the req of source,
* for we assume all client to edge is invalid, * for we assume all client to edge is invalid,
* if auth open, edge must valid it from origin, then service it. * if auth open, edge must valid it from origin, then service it.
*/ */
virtual int initialize(SrsSource* source, SrsRequest* req); virtual int initialize(SrsSource* source, SrsRequest* req);
/** /**
* when client play stream on edge. * when client play stream on edge.
*/ */
virtual int on_client_play(); virtual int on_client_play();
/** /**
* when all client stopped play, disconnect to origin. * when all client stopped play, disconnect to origin.
*/ */
virtual void on_all_client_stop(); virtual void on_all_client_stop();
virtual std::string get_curr_origin(); virtual std::string get_curr_origin();
public: public:
/** /**
* when ingester start to play stream. * when ingester start to play stream.
*/ */
virtual int on_ingest_play(); virtual int on_ingest_play();
}; };
/** /**
* publish edge control service. * publish edge control service.
* uploading edge speed-up. * uploading edge speed-up.
*/ */
class SrsPublishEdge class SrsPublishEdge
{ {
private: private:
@ -237,16 +233,16 @@ public:
virtual int initialize(SrsSource* source, SrsRequest* req); virtual int initialize(SrsSource* source, SrsRequest* req);
virtual bool can_publish(); virtual bool can_publish();
/** /**
* when client publish stream on edge. * when client publish stream on edge.
*/ */
virtual int on_client_publish(); virtual int on_client_publish();
/** /**
* proxy publish stream to edge * proxy publish stream to edge
*/ */
virtual int on_proxy_publish(SrsCommonMessage* msg); virtual int on_proxy_publish(SrsCommonMessage* msg);
/** /**
* proxy unpublish stream to edge. * proxy unpublish stream to edge.
*/ */
virtual void on_proxy_unpublish(); virtual void on_proxy_unpublish();
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_empty.hpp> #include <srs_app_empty.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_EMPTY_HPP #ifndef SRS_APP_EMPTY_HPP
#define SRS_APP_EMPTY_HPP #define SRS_APP_EMPTY_HPP
/*
#include <srs_app_empty.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#endif #endif

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_encoder.hpp> #include <srs_app_encoder.hpp>
@ -168,7 +168,7 @@ int SrsEncoder::parse_scope_engines(SrsRequest* req)
if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) { if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) {
if (ret != ERROR_ENCODER_LOOP) { if (ret != ERROR_ENCODER_LOOP) {
srs_error("parse vhost scope=%s transcode engines failed. " srs_error("parse vhost scope=%s transcode engines failed. "
"ret=%d", scope.c_str(), ret); "ret=%d", scope.c_str(), ret);
} }
return ret; return ret;
} }
@ -179,7 +179,7 @@ int SrsEncoder::parse_scope_engines(SrsRequest* req)
if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) { if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) {
if (ret != ERROR_ENCODER_LOOP) { if (ret != ERROR_ENCODER_LOOP) {
srs_error("parse app scope=%s transcode engines failed. " srs_error("parse app scope=%s transcode engines failed. "
"ret=%d", scope.c_str(), ret); "ret=%d", scope.c_str(), ret);
} }
return ret; return ret;
} }
@ -191,7 +191,7 @@ int SrsEncoder::parse_scope_engines(SrsRequest* req)
if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) { if ((ret = parse_ffmpeg(req, conf)) != ERROR_SUCCESS) {
if (ret != ERROR_ENCODER_LOOP) { if (ret != ERROR_ENCODER_LOOP) {
srs_error("parse stream scope=%s transcode engines failed. " srs_error("parse stream scope=%s transcode engines failed. "
"ret=%d", scope.c_str(), ret); "ret=%d", scope.c_str(), ret);
} }
return ret; return ret;
} }
@ -216,7 +216,7 @@ int SrsEncoder::parse_ffmpeg(SrsRequest* req, SrsConfDirective* conf)
std::string ffmpeg_bin = _srs_config->get_transcode_ffmpeg(conf); std::string ffmpeg_bin = _srs_config->get_transcode_ffmpeg(conf);
if (ffmpeg_bin.empty()) { if (ffmpeg_bin.empty()) {
srs_trace("ignore the empty ffmpeg transcode: %s", srs_trace("ignore the empty ffmpeg transcode: %s",
conf->arg0().c_str()); conf->arg0().c_str());
return ret; return ret;
} }
@ -224,7 +224,7 @@ int SrsEncoder::parse_ffmpeg(SrsRequest* req, SrsConfDirective* conf)
std::vector<SrsConfDirective*> engines = _srs_config->get_transcode_engines(conf); std::vector<SrsConfDirective*> engines = _srs_config->get_transcode_engines(conf);
if (engines.empty()) { if (engines.empty()) {
srs_trace("ignore the empty transcode engine: %s", srs_trace("ignore the empty transcode engine: %s",
conf->arg0().c_str()); conf->arg0().c_str());
return ret; return ret;
} }
@ -233,7 +233,7 @@ int SrsEncoder::parse_ffmpeg(SrsRequest* req, SrsConfDirective* conf)
SrsConfDirective* engine = engines[i]; SrsConfDirective* engine = engines[i];
if (!_srs_config->get_engine_enabled(engine)) { if (!_srs_config->get_engine_enabled(engine)) {
srs_trace("ignore the diabled transcode engine: %s %s", srs_trace("ignore the diabled transcode engine: %s %s",
conf->arg0().c_str(), engine->arg0().c_str()); conf->arg0().c_str(), engine->arg0().c_str());
continue; continue;
} }
@ -311,7 +311,7 @@ int SrsEncoder::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsRequest* req, SrsConfDir
if (it != _transcoded_url.end()) { if (it != _transcoded_url.end()) {
ret = ERROR_ENCODER_LOOP; ret = ERROR_ENCODER_LOOP;
srs_trace("detect a loop cycle, input=%s, output=%s, ignore it. ret=%d", srs_trace("detect a loop cycle, input=%s, output=%s, ignore it. ret=%d",
input.c_str(), output.c_str(), ret); input.c_str(), output.c_str(), ret);
return ret; return ret;
} }
_transcoded_url.push_back(output); _transcoded_url.push_back(output);
@ -334,7 +334,7 @@ void SrsEncoder::show_encode_log_message()
if (pprint->can_print()) { if (pprint->can_print()) {
// TODO: FIXME: show more info. // TODO: FIXME: show more info.
srs_trace("-> "SRS_CONSTS_LOG_ENCODER" time=%"PRId64", encoders=%d, input=%s", srs_trace("-> "SRS_CONSTS_LOG_ENCODER" time=%"PRId64", encoders=%d, input=%s",
pprint->age(), (int)ffmpegs.size(), input_stream_name.c_str()); pprint->age(), (int)ffmpegs.size(), input_stream_name.c_str());
} }
} }

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_ENCODER_HPP #ifndef SRS_APP_ENCODER_HPP
#define SRS_APP_ENCODER_HPP #define SRS_APP_ENCODER_HPP
/*
#include <srs_app_encoder.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#ifdef SRS_AUTO_TRANSCODE #ifdef SRS_AUTO_TRANSCODE
@ -42,9 +39,9 @@ class SrsPithyPrint;
class SrsFFMPEG; class SrsFFMPEG;
/** /**
* the encoder for a stream, * the encoder for a stream,
* may use multiple ffmpegs to transcode the specified stream. * may use multiple ffmpegs to transcode the specified stream.
*/ */
class SrsEncoder : public ISrsReusableThreadHandler class SrsEncoder : public ISrsReusableThreadHandler
{ {
private: private:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_ffmpeg.hpp> #include <srs_app_ffmpeg.hpp>
@ -145,7 +145,7 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine)
if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264) { if (vcodec != SRS_RTMP_ENCODER_VCODEC_LIBX264) {
ret = ERROR_ENCODER_VCODEC; ret = ERROR_ENCODER_VCODEC;
srs_error("invalid vcodec, must be %s, actual %s, ret=%d", srs_error("invalid vcodec, must be %s, actual %s, ret=%d",
SRS_RTMP_ENCODER_VCODEC_LIBX264, vcodec.c_str(), ret); SRS_RTMP_ENCODER_VCODEC_LIBX264, vcodec.c_str(), ret);
return ret; return ret;
} }
if (vbitrate < 0) { if (vbitrate < 0) {

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_FFMPEG_HPP #ifndef SRS_APP_FFMPEG_HPP
#define SRS_APP_FFMPEG_HPP #define SRS_APP_FFMPEG_HPP
/*
#include <srs_app_ffmpeg.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#ifdef SRS_AUTO_FFMPEG_STUB #ifdef SRS_AUTO_FFMPEG_STUB
@ -39,9 +36,9 @@ class SrsPithyPrint;
class SrsProcess; class SrsProcess;
/** /**
* a transcode engine: ffmepg, * a transcode engine: ffmepg,
* used to transcode a stream to another. * used to transcode a stream to another.
*/ */
class SrsFFMPEG class SrsFFMPEG
{ {
private: private:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_forward.hpp> #include <srs_app_forward.hpp>
@ -131,12 +131,12 @@ int SrsForwarder::on_publish()
if (source_ep == dest_ep) { if (source_ep == dest_ep) {
ret = ERROR_SYSTEM_FORWARD_LOOP; ret = ERROR_SYSTEM_FORWARD_LOOP;
srs_warn("forward loop detected. src=%s, dest=%s, ret=%d", srs_warn("forward loop detected. src=%s, dest=%s, ret=%d",
source_ep.c_str(), dest_ep.c_str(), ret); source_ep.c_str(), dest_ep.c_str(), ret);
return ret; return ret;
} }
srs_trace("start forward %s to %s, tcUrl=%s, stream=%s", srs_trace("start forward %s to %s, tcUrl=%s, stream=%s",
source_ep.c_str(), dest_ep.c_str(), tcUrl.c_str(), source_ep.c_str(), dest_ep.c_str(), tcUrl.c_str(),
req->stream.c_str()); req->stream.c_str());
if ((ret = pthread->start()) != ERROR_SUCCESS) { if ((ret = pthread->start()) != ERROR_SUCCESS) {
srs_error("start srs thread failed. ret=%d", ret); srs_error("start srs thread failed. ret=%d", ret);

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_FORWARD_HPP #ifndef SRS_APP_FORWARD_HPP
#define SRS_APP_FORWARD_HPP #define SRS_APP_FORWARD_HPP
/*
#include <srs_app_forward.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -47,8 +44,8 @@ class SrsKbps;
class SrsSimpleRtmpClient; class SrsSimpleRtmpClient;
/** /**
* forward the stream to other servers. * forward the stream to other servers.
*/ */
// TODO: FIXME: refine the error log, comments it. // TODO: FIXME: refine the error log, comments it.
class SrsForwarder : public ISrsReusableThread2Handler class SrsForwarder : public ISrsReusableThread2Handler
{ {
@ -64,9 +61,9 @@ private:
SrsRtmpJitter* jitter; SrsRtmpJitter* jitter;
SrsMessageQueue* queue; SrsMessageQueue* queue;
/** /**
* cache the sequence header for retry when slave is failed. * cache the sequence header for retry when slave is failed.
* @see https://github.com/ossrs/srs/issues/150 * @see https://github.com/ossrs/srs/issues/150
*/ */
SrsSharedPtrMessage* sh_audio; SrsSharedPtrMessage* sh_audio;
SrsSharedPtrMessage* sh_video; SrsSharedPtrMessage* sh_video;
public: public:
@ -79,19 +76,19 @@ public:
virtual int on_publish(); virtual int on_publish();
virtual void on_unpublish(); virtual void on_unpublish();
/** /**
* forward the audio packet. * forward the audio packet.
* @param shared_metadata, directly ptr, copy it if need to save it. * @param shared_metadata, directly ptr, copy it if need to save it.
*/ */
virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata);
/** /**
* forward the audio packet. * forward the audio packet.
* @param shared_audio, directly ptr, copy it if need to save it. * @param shared_audio, directly ptr, copy it if need to save it.
*/ */
virtual int on_audio(SrsSharedPtrMessage* shared_audio); virtual int on_audio(SrsSharedPtrMessage* shared_audio);
/** /**
* forward the video packet. * forward the video packet.
* @param shared_video, directly ptr, copy it if need to save it. * @param shared_video, directly ptr, copy it if need to save it.
*/ */
virtual int on_video(SrsSharedPtrMessage* shared_video); virtual int on_video(SrsSharedPtrMessage* shared_video);
// interface ISrsReusableThread2Handler. // interface ISrsReusableThread2Handler.
public: public:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_fragment.hpp> #include <srs_app_fragment.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_FRAGMENT_HPP #ifndef SRS_APP_FRAGMENT_HPP
#define SRS_APP_FRAGMENT_HPP #define SRS_APP_FRAGMENT_HPP
/*
#include <srs_app_fragment.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,26 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
* Copyright (c) 2013-2017 SRS(ossrs)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
Copyright (c) 2013-2017 SRS(ossrs)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <srs_app_hds.hpp> #include <srs_app_hds.hpp>
#ifdef SRS_AUTO_HDS #ifdef SRS_AUTO_HDS
@ -52,16 +53,16 @@ static void update_box(char *start, int size)
} }
char flv_header[] = {'F', 'L', 'V', char flv_header[] = {'F', 'L', 'V',
0x01, 0x05, 0x00, 0x00, 0x00, 0x09, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09,
0x00, 0x00, 0x00, 0x00}; 0x00, 0x00, 0x00, 0x00};
string serialFlv(SrsSharedPtrMessage *msg) string serialFlv(SrsSharedPtrMessage *msg)
{ {
SrsBuffer *stream = new SrsBuffer; SrsBuffer *stream = new SrsBuffer;
int size = 15 + msg->size; int size = 15 + msg->size;
char *byte = new char[size]; char *byte = new char[size];
stream->initialize(byte, size); stream->initialize(byte, size);
// tag header // tag header
long long dts = msg->timestamp; long long dts = msg->timestamp;
@ -90,11 +91,11 @@ class SrsHdsFragment
{ {
public: public:
SrsHdsFragment(SrsRequest *r) SrsHdsFragment(SrsRequest *r)
: req(r) : req(r)
, index(-1) , index(-1)
, start_time(0) , start_time(0)
, videoSh(NULL) , videoSh(NULL)
, audioSh(NULL) , audioSh(NULL)
{ {
} }
@ -125,8 +126,8 @@ public:
} }
/*! /*!
flush data to disk. flush data to disk.
*/ */
int flush() int flush()
{ {
string data; string data;
@ -174,10 +175,10 @@ public:
} }
/*! /*!
calc the segment duration in milliseconds. calc the segment duration in milliseconds.
@return 0 if no msgs @return 0 if no msgs
or the last msg dts minus the first msg dts. or the last msg dts minus the first msg dts.
*/ */
int duration() int duration()
{ {
int duration_ms = 0; int duration_ms = 0;
@ -198,8 +199,8 @@ public:
} }
/*! /*!
set/get index set/get index
*/ */
inline void set_index(int idx) inline void set_index(int idx)
{ {
char file_path[1024] = {0}; char file_path[1024] = {0};
@ -216,8 +217,8 @@ public:
} }
/*! /*!
set/get start time set/get start time
*/ */
inline void set_start_time(long long st) inline void set_start_time(long long st)
{ {
start_time = st; start_time = st;
@ -250,8 +251,8 @@ private:
list<SrsSharedPtrMessage *> msgs; list<SrsSharedPtrMessage *> msgs;
/*! /*!
the index of this fragment the index of this fragment
*/ */
int index; int index;
long long start_time; long long start_time;
@ -261,12 +262,12 @@ private:
}; };
SrsHds::SrsHds() SrsHds::SrsHds()
: currentSegment(NULL) : currentSegment(NULL)
, fragment_index(1) , fragment_index(1)
, video_sh(NULL) , video_sh(NULL)
, audio_sh(NULL) , audio_sh(NULL)
, hds_req(NULL) , hds_req(NULL)
, hds_enabled(false) , hds_enabled(false)
{ {
} }
@ -501,23 +502,23 @@ int SrsHds::flush_bootstrap()
abst.write_3bytes(0x00); // Flags always 0 abst.write_3bytes(0x00); // Flags always 0
size_abst += 12; size_abst += 12;
/*! /*!
@BootstrapinfoVersion UI32 @BootstrapinfoVersion UI32
The version number of the bootstrap information. The version number of the bootstrap information.
When the Update field is set, BootstrapinfoVersion When the Update field is set, BootstrapinfoVersion
indicates the version number that is being updated. indicates the version number that is being updated.
we assume this is the last. we assume this is the last.
*/ */
abst.write_4bytes(fragment_index - 1); // BootstrapinfoVersion abst.write_4bytes(fragment_index - 1); // BootstrapinfoVersion
abst.write_1bytes(0x20); // profile, live, update abst.write_1bytes(0x20); // profile, live, update
abst.write_4bytes(1000); // TimeScale Typically, the value is 1000, for a unit of milliseconds abst.write_4bytes(1000); // TimeScale Typically, the value is 1000, for a unit of milliseconds
size_abst += 9; size_abst += 9;
/*! /*!
The timestamp in TimeScale units of the latest available Fragment in the media presentation. The timestamp in TimeScale units of the latest available Fragment in the media presentation.
This timestamp is used to request the right fragment number. This timestamp is used to request the right fragment number.
The CurrentMedia Time can be the total duration. The CurrentMedia Time can be the total duration.
For media presentations that are not live, CurrentMediaTime can be 0. For media presentations that are not live, CurrentMediaTime can be 0.
*/ */
SrsHdsFragment *st = fragments.back(); SrsHdsFragment *st = fragments.back();
abst.write_8bytes(st->get_start_time()); abst.write_8bytes(st->get_start_time());
@ -526,63 +527,63 @@ int SrsHds::flush_bootstrap()
size_abst += 16; size_abst += 16;
/*! /*!
@MovieIdentifier STRING @MovieIdentifier STRING
The identifier of this presentation. The identifier of this presentation.
we write null string. we write null string.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_abst += 1; size_abst += 1;
/*! /*!
@ServerEntryCount UI8 @ServerEntryCount UI8
The number of ServerEntryTable entries. The number of ServerEntryTable entries.
The minimum value is 0. The minimum value is 0.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_abst += 1; size_abst += 1;
/*! /*!
@ServerEntryTable @ServerEntryTable
because we write 0 of ServerEntryCount, so this feild is ignored. because we write 0 of ServerEntryCount, so this feild is ignored.
*/ */
/*! /*!
@QualityEntryCount UI8 @QualityEntryCount UI8
The number of QualityEntryTable entries, which is The number of QualityEntryTable entries, which is
also the number of available quality levels. The also the number of available quality levels. The
minimum value is 0. Available quality levels are for, minimum value is 0. Available quality levels are for,
for example, multi bit rate files or trick files. for example, multi bit rate files or trick files.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_abst += 1; size_abst += 1;
/*! /*!
@QualityEntryTable @QualityEntryTable
because we write 0 of QualityEntryCount, so this feild is ignored. because we write 0 of QualityEntryCount, so this feild is ignored.
*/ */
/*! /*!
@DrmData STRING @DrmData STRING
Null or null-terminated UTF-8 string. This string Null or null-terminated UTF-8 string. This string
holds Digital Rights Management metadata. holds Digital Rights Management metadata.
Encrypted files use this metadata to get the Encrypted files use this metadata to get the
necessary keys and licenses for decryption and play back. necessary keys and licenses for decryption and play back.
we write null string. we write null string.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_abst += 1; size_abst += 1;
/*! /*!
@MetaData STRING @MetaData STRING
Null or null-terminated UTF - 8 string that holds metadata. Null or null-terminated UTF - 8 string that holds metadata.
we write null string. we write null string.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_abst += 1; size_abst += 1;
/*! /*!
@SegmentRunTableCount UI8 @SegmentRunTableCount UI8
The number of entries in SegmentRunTableEntries. The number of entries in SegmentRunTableEntries.
The minimum value is 1. Typically, one table The minimum value is 1. Typically, one table
contains all segment runs. However, this count contains all segment runs. However, this count
provides the flexibility to define the segment runs provides the flexibility to define the segment runs
individually for each quality level (or trick file). individually for each quality level (or trick file).
*/ */
abst.write_1bytes(1); abst.write_1bytes(1);
size_abst += 1; size_abst += 1;
@ -593,51 +594,51 @@ int SrsHds::flush_bootstrap()
abst.write_string("asrt"); abst.write_string("asrt");
size_asrt += 8; size_asrt += 8;
/*! /*!
@Version UI8 @Version UI8
@Flags UI24 @Flags UI24
*/ */
abst.write_4bytes(0); abst.write_4bytes(0);
size_asrt += 4; size_asrt += 4;
/*! /*!
@QualityEntryCount UI8 @QualityEntryCount UI8
The number of QualitySegmen tUrlModifiers The number of QualitySegmen tUrlModifiers
(quality level references) that follow. If 0, this (quality level references) that follow. If 0, this
Segment Run Table applies to all quality levels, Segment Run Table applies to all quality levels,
and there shall be only one Segment Run Table and there shall be only one Segment Run Table
box in the Bootstrap Info box. box in the Bootstrap Info box.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_asrt += 1; size_asrt += 1;
/*! /*!
@QualitySegmentUrlModifiers @QualitySegmentUrlModifiers
ignored. ignored.
*/ */
/*! /*!
@SegmentRunEntryCount @SegmentRunEntryCount
The number of items in this The number of items in this
SegmentRunEn tryTable. The minimum value is 1. SegmentRunEn tryTable. The minimum value is 1.
*/ */
abst.write_4bytes(1); abst.write_4bytes(1);
size_asrt += 4; size_asrt += 4;
/*! /*!
@SegmentRunEntryTable @SegmentRunEntryTable
*/ */
for (int i = 0; i < 1; ++i) { for (int i = 0; i < 1; ++i) {
/*! /*!
@FirstSegment UI32 @FirstSegment UI32
The identifying number of the first segment in the run of The identifying number of the first segment in the run of
segments containing the same number of fragments. segments containing the same number of fragments.
The segment corresponding to the FirstSegment in the next The segment corresponding to the FirstSegment in the next
SEGMENTRUNENTRY will terminate this run. SEGMENTRUNENTRY will terminate this run.
*/ */
abst.write_4bytes(1); abst.write_4bytes(1);
/*! /*!
@FragmentsPerSegment UI32 @FragmentsPerSegment UI32
The number of fragments in each segment in this run. The number of fragments in each segment in this run.
*/ */
abst.write_4bytes(fragment_index - 1); abst.write_4bytes(fragment_index - 1);
size_asrt += 8; size_asrt += 8;
} }
@ -646,10 +647,10 @@ int SrsHds::flush_bootstrap()
size_abst += size_asrt; size_abst += size_asrt;
/*! /*!
@FragmentRunTableCount UI8 @FragmentRunTableCount UI8
The number of entries in FragmentRunTable-Entries. The number of entries in FragmentRunTable-Entries.
The min i mum value is 1. The min i mum value is 1.
*/ */
abst.write_1bytes(1); abst.write_1bytes(1);
size_abst += 1; size_abst += 1;
@ -661,35 +662,35 @@ int SrsHds::flush_bootstrap()
size_afrt += 8; size_afrt += 8;
/*! /*!
@Version UI8 @Version UI8
@Flags UI24 @Flags UI24
*/ */
abst.write_4bytes(0); abst.write_4bytes(0);
size_afrt += 4; size_afrt += 4;
/*! /*!
@TimeScale UI32 @TimeScale UI32
The number of time units per second, used in the FirstFragmentTime stamp and The number of time units per second, used in the FirstFragmentTime stamp and
Fragment Duration fields. Fragment Duration fields.
Typically, the value is 1000. Typically, the value is 1000.
*/ */
abst.write_4bytes(1000); abst.write_4bytes(1000);
size_afrt += 4; size_afrt += 4;
/*! /*!
@QualityEntryCount UI8 @QualityEntryCount UI8
The number of QualitySegment Url Modifiers The number of QualitySegment Url Modifiers
(quality level references) that follow. (quality level references) that follow.
If 0, this Fragment Run Table applies to all quality levels, If 0, this Fragment Run Table applies to all quality levels,
and there shall be only one Fragment Run Table and there shall be only one Fragment Run Table
box in the Bootstrap Info box. box in the Bootstrap Info box.
*/ */
abst.write_1bytes(0); abst.write_1bytes(0);
size_afrt += 1; size_afrt += 1;
/*! /*!
@FragmentRunEntryCount UI32 @FragmentRunEntryCount UI32
The number of items in this FragmentRunEntryTable. The number of items in this FragmentRunEntryTable.
The minimum value is 1. The minimum value is 1.
*/ */
abst.write_4bytes(fragments.size()); abst.write_4bytes(fragments.size());
size_afrt += 4; size_afrt += 4;

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HDS_HPP #ifndef SRS_APP_HDS_HPP
#define SRS_APP_HDS_HPP #define SRS_APP_HDS_HPP

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_heartbeat.hpp> #include <srs_app_heartbeat.hpp>
@ -86,7 +86,7 @@ void SrsHttpHeartbeat::heartbeat()
ISrsHttpMessage* msg = NULL; ISrsHttpMessage* msg = NULL;
if ((ret = http.post(uri.get_path(), req, &msg)) != ERROR_SUCCESS) { if ((ret = http.post(uri.get_path(), req, &msg)) != ERROR_SUCCESS) {
srs_info("http post hartbeart uri failed. url=%s, request=%s, ret=%d", srs_info("http post hartbeart uri failed. url=%s, request=%s, ret=%d",
url.c_str(), req.c_str(), ret); url.c_str(), req.c_str(), ret);
return; return;
} }
SrsAutoFree(ISrsHttpMessage, msg); SrsAutoFree(ISrsHttpMessage, msg);
@ -97,7 +97,7 @@ void SrsHttpHeartbeat::heartbeat()
} }
srs_info("http hook hartbeart success. url=%s, request=%s, response=%s, ret=%d", srs_info("http hook hartbeart success. url=%s, request=%s, response=%s, ret=%d",
url.c_str(), req.c_str(), res.c_str(), ret); url.c_str(), req.c_str(), res.c_str(), ret);
return; return;
} }

View file

@ -1,38 +1,35 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HEARTBEAT_HPP #ifndef SRS_APP_HEARTBEAT_HPP
#define SRS_APP_HEARTBEAT_HPP #define SRS_APP_HEARTBEAT_HPP
/*
#include <srs_app_heartbeat.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
/** /**
* the http heartbeat to api-server to notice api * the http heartbeat to api-server to notice api
* that the information of SRS. * that the information of SRS.
*/ */
class SrsHttpHeartbeat class SrsHttpHeartbeat
{ {
public: public:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_hls.hpp> #include <srs_app_hls.hpp>
@ -463,7 +463,7 @@ bool SrsHlsMuxer::is_segment_overflow()
// use N% deviation, to smoother. // use N% deviation, to smoother.
double deviation = hls_ts_floor? SRS_HLS_FLOOR_REAP_PERCENT * deviation_ts * hls_fragment : 0.0; double deviation = hls_ts_floor? SRS_HLS_FLOOR_REAP_PERCENT * deviation_ts * hls_fragment : 0.0;
srs_info("hls: dur=%"PRId64"ms, tar=%.2f, dev=%.2fms/%dp, frag=%.2f", srs_info("hls: dur=%"PRId64"ms, tar=%.2f, dev=%.2fms/%dp, frag=%.2f",
current->duration(), hls_fragment + deviation, deviation, deviation_ts, hls_fragment); current->duration(), hls_fragment + deviation, deviation, deviation_ts, hls_fragment);
return current->duration() >= (hls_fragment + deviation) * 1000; return current->duration() >= (hls_fragment + deviation) * 1000;
} }
@ -673,8 +673,8 @@ int SrsHlsMuxer::_refresh_m3u8(string m3u8_file)
// #EXT-X-ALLOW-CACHE:YES\n // #EXT-X-ALLOW-CACHE:YES\n
std::stringstream ss; std::stringstream ss;
ss << "#EXTM3U" << SRS_CONSTS_LF ss << "#EXTM3U" << SRS_CONSTS_LF
<< "#EXT-X-VERSION:3" << SRS_CONSTS_LF << "#EXT-X-VERSION:3" << SRS_CONSTS_LF
<< "#EXT-X-ALLOW-CACHE:YES" << SRS_CONSTS_LF; << "#EXT-X-ALLOW-CACHE:YES" << SRS_CONSTS_LF;
srs_verbose("write m3u8 header success."); srs_verbose("write m3u8 header success.");
// #EXT-X-MEDIA-SEQUENCE:4294967295\n // #EXT-X-MEDIA-SEQUENCE:4294967295\n
@ -687,13 +687,13 @@ int SrsHlsMuxer::_refresh_m3u8(string m3u8_file)
// #EXT-X-TARGETDURATION:4294967295\n // #EXT-X-TARGETDURATION:4294967295\n
/** /**
* @see hls-m3u8-draft-pantos-http-live-streaming-12.pdf, page 25 * @see hls-m3u8-draft-pantos-http-live-streaming-12.pdf, page 25
* The Media Playlist file MUST contain an EXT-X-TARGETDURATION tag. * The Media Playlist file MUST contain an EXT-X-TARGETDURATION tag.
* Its value MUST be equal to or greater than the EXTINF duration of any * Its value MUST be equal to or greater than the EXTINF duration of any
* media segment that appears or will appear in the Playlist file, * media segment that appears or will appear in the Playlist file,
* rounded to the nearest integer. Its value MUST NOT change. A * rounded to the nearest integer. Its value MUST NOT change. A
* typical target duration is 10 seconds. * typical target duration is 10 seconds.
*/ */
// @see https://github.com/ossrs/srs/issues/304#issuecomment-74000081 // @see https://github.com/ossrs/srs/issues/304#issuecomment-74000081
int target_duration = (int)ceil(segments->max_duration() / 1000.0); int target_duration = (int)ceil(segments->max_duration() / 1000.0);
target_duration = srs_max(target_duration, max_td); target_duration = srs_max(target_duration, max_td);
@ -818,8 +818,8 @@ int SrsHlsController::on_publish(SrsRequest* req)
return ret; return ret;
} }
srs_trace("hls: win=%.2f, frag=%.2f, prefix=%s, path=%s, m3u8=%s, ts=%s, aof=%.2f, floor=%d, clean=%d, waitk=%d, dispose=%d", srs_trace("hls: win=%.2f, frag=%.2f, prefix=%s, path=%s, m3u8=%s, ts=%s, aof=%.2f, floor=%d, clean=%d, waitk=%d, dispose=%d",
hls_window, hls_fragment, entry_prefix.c_str(), path.c_str(), m3u8_file.c_str(), hls_window, hls_fragment, entry_prefix.c_str(), path.c_str(), m3u8_file.c_str(),
ts_file.c_str(), hls_aof_ratio, ts_floor, cleanup, wait_keyframe, hls_dispose); ts_file.c_str(), hls_aof_ratio, ts_floor, cleanup, wait_keyframe, hls_dispose);
return ret; return ret;
} }
@ -1187,8 +1187,8 @@ void SrsHls::hls_show_mux_log()
// @see: https://github.com/ossrs/srs/issues/81#issuecomment-48100994 // @see: https://github.com/ossrs/srs/issues/81#issuecomment-48100994
// it's ok. // it's ok.
srs_trace("-> "SRS_CONSTS_LOG_HLS" time=%"PRId64", sno=%d, ts=%s, dur=%.2f, dva=%dp", srs_trace("-> "SRS_CONSTS_LOG_HLS" time=%"PRId64", sno=%d, ts=%s, dur=%.2f, dva=%dp",
pprint->age(), controller->sequence_no(), controller->ts_url().c_str(), pprint->age(), controller->sequence_no(), controller->ts_url().c_str(),
controller->duration(), controller->deviation()); controller->duration(), controller->deviation());
} }

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HLS_HPP #ifndef SRS_APP_HLS_HPP
#define SRS_APP_HLS_HPP #define SRS_APP_HLS_HPP
/*
#include <srs_app_hls.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -54,11 +51,11 @@ class SrsHlsSegment;
class SrsTsContext; class SrsTsContext;
/** /**
* the wrapper of m3u8 segment from specification: * the wrapper of m3u8 segment from specification:
* *
* 3.3.2. EXTINF * 3.3.2. EXTINF
* The EXTINF tag specifies the duration of a media segment. * The EXTINF tag specifies the duration of a media segment.
*/ */
class SrsHlsSegment : public SrsFragment class SrsHlsSegment : public SrsFragment
{ {
public: public:
@ -116,13 +113,13 @@ public:
}; };
/** /**
* muxer the HLS stream(m3u8 and ts files). * muxer the HLS stream(m3u8 and ts files).
* generally, the m3u8 muxer only provides methods to open/close segments, * generally, the m3u8 muxer only provides methods to open/close segments,
* to flush video/audio, without any mechenisms. * to flush video/audio, without any mechenisms.
* *
* that is, user must use HlsCache, which will control the methods of muxer, * that is, user must use HlsCache, which will control the methods of muxer,
* and provides HLS mechenisms. * and provides HLS mechenisms.
*/ */
class SrsHlsMuxer class SrsHlsMuxer
{ {
private: private:
@ -176,12 +173,12 @@ public:
virtual int deviation(); virtual int deviation();
public: public:
/** /**
* initialize the hls muxer. * initialize the hls muxer.
*/ */
virtual int initialize(); virtual int initialize();
/** /**
* when publish, update the config for muxer. * when publish, update the config for muxer.
*/ */
virtual int update_config(SrsRequest* r, std::string entry_prefix, virtual int update_config(SrsRequest* r, std::string entry_prefix,
std::string path, std::string m3u8_file, std::string ts_file, std::string path, std::string m3u8_file, std::string ts_file,
double fragment, double window, bool ts_floor, double aof_ratio, double fragment, double window, bool ts_floor, double aof_ratio,
@ -192,19 +189,19 @@ public:
virtual int segment_open(); virtual int segment_open();
virtual int on_sequence_header(); virtual int on_sequence_header();
/** /**
* whether segment overflow, * whether segment overflow,
* that is whether the current segment duration>=(the segment in config) * that is whether the current segment duration>=(the segment in config)
*/ */
virtual bool is_segment_overflow(); virtual bool is_segment_overflow();
/** /**
* whether wait keyframe to reap the ts. * whether wait keyframe to reap the ts.
*/ */
virtual bool wait_keyframe(); virtual bool wait_keyframe();
/** /**
* whether segment absolutely overflow, for pure audio to reap segment, * whether segment absolutely overflow, for pure audio to reap segment,
* that is whether the current segment duration>=2*(the segment in config) * that is whether the current segment duration>=2*(the segment in config)
* @see https://github.com/ossrs/srs/issues/151#issuecomment-71155184 * @see https://github.com/ossrs/srs/issues/151#issuecomment-71155184
*/ */
virtual bool is_segment_absolutely_overflow(); virtual bool is_segment_absolutely_overflow();
public: public:
/** /**
@ -223,22 +220,22 @@ private:
}; };
/** /**
* hls stream cache, * hls stream cache,
* use to cache hls stream and flush to hls muxer. * use to cache hls stream and flush to hls muxer.
* *
* when write stream to ts file: * when write stream to ts file:
* video frame will directly flush to M3u8Muxer, * video frame will directly flush to M3u8Muxer,
* audio frame need to cache, because it's small and flv tbn problem. * audio frame need to cache, because it's small and flv tbn problem.
* *
* whatever, the Hls cache used to cache video/audio, * whatever, the Hls cache used to cache video/audio,
* and flush video/audio to m3u8 muxer if needed. * and flush video/audio to m3u8 muxer if needed.
* *
* about the flv tbn problem: * about the flv tbn problem:
* flv tbn is 1/1000, ts tbn is 1/90000, * flv tbn is 1/1000, ts tbn is 1/90000,
* when timestamp convert to flv tbn, it will loose precise, * when timestamp convert to flv tbn, it will loose precise,
* so we must gather audio frame together, and recalc the timestamp @see SrsTsAacJitter, * so we must gather audio frame together, and recalc the timestamp @see SrsTsAacJitter,
* we use a aac jitter to correct the audio pts. * we use a aac jitter to correct the audio pts.
*/ */
class SrsHlsController class SrsHlsController
{ {
private: private:
@ -259,39 +256,39 @@ public:
virtual int deviation(); virtual int deviation();
public: public:
/** /**
* when publish or unpublish stream. * when publish or unpublish stream.
*/ */
virtual int on_publish(SrsRequest* req); virtual int on_publish(SrsRequest* req);
virtual int on_unpublish(); virtual int on_unpublish();
/** /**
* when get sequence header, * when get sequence header,
* must write a #EXT-X-DISCONTINUITY to m3u8. * must write a #EXT-X-DISCONTINUITY to m3u8.
* @see: hls-m3u8-draft-pantos-http-live-streaming-12.txt * @see: hls-m3u8-draft-pantos-http-live-streaming-12.txt
* @see: 3.4.11. EXT-X-DISCONTINUITY * @see: 3.4.11. EXT-X-DISCONTINUITY
*/ */
virtual int on_sequence_header(); virtual int on_sequence_header();
/** /**
* write audio to cache, if need to flush, flush to muxer. * write audio to cache, if need to flush, flush to muxer.
*/ */
virtual int write_audio(SrsAudioFrame* frame, int64_t pts); virtual int write_audio(SrsAudioFrame* frame, int64_t pts);
/** /**
* write video to muxer. * write video to muxer.
*/ */
virtual int write_video(SrsVideoFrame* frame, int64_t dts); virtual int write_video(SrsVideoFrame* frame, int64_t dts);
private: private:
/** /**
* reopen the muxer for a new hls segment, * reopen the muxer for a new hls segment,
* close current segment, open a new segment, * close current segment, open a new segment,
* then write the key frame to the new segment. * then write the key frame to the new segment.
* so, user must reap_segment then flush_video to hls muxer. * so, user must reap_segment then flush_video to hls muxer.
*/ */
virtual int reap_segment(); virtual int reap_segment();
}; };
/** /**
* Transmux RTMP stream to HLS(m3u8 and ts). * Transmux RTMP stream to HLS(m3u8 and ts).
* TODO: FIXME: add utest for hls. * TODO: FIXME: add utest for hls.
*/ */
class SrsHls class SrsHls
{ {
private: private:
@ -313,8 +310,8 @@ public:
virtual int cycle(); virtual int cycle();
public: public:
/** /**
* initialize the hls by handler and source. * initialize the hls by handler and source.
*/ */
virtual int initialize(SrsOriginHub* h, SrsRequest* r); virtual int initialize(SrsOriginHub* h, SrsRequest* r);
/** /**
* publish stream event, continue to write the m3u8, * publish stream event, continue to write the m3u8,
@ -323,14 +320,14 @@ public:
*/ */
virtual int on_publish(); virtual int on_publish();
/** /**
* the unpublish event, only close the muxer, donot destroy the * the unpublish event, only close the muxer, donot destroy the
* muxer, for when we continue to publish, the m3u8 will continue. * muxer, for when we continue to publish, the m3u8 will continue.
*/ */
virtual void on_unpublish(); virtual void on_unpublish();
/** /**
* mux the audio packets to ts. * mux the audio packets to ts.
* @param shared_audio, directly ptr, copy it if need to save it. * @param shared_audio, directly ptr, copy it if need to save it.
*/ */
virtual int on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format); virtual int on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format);
/** /**
* mux the video packets to ts. * mux the video packets to ts.

View file

@ -1,24 +1,24 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_hourglass.hpp> #include <srs_app_hourglass.hpp>

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HOURGLASS_HPP #ifndef SRS_APP_HOURGLASS_HPP
#define SRS_APP_HOURGLASS_HPP #define SRS_APP_HOURGLASS_HPP
/*
#include <srs_app_hourglass.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <map> #include <map>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_api.hpp> #include <srs_app_http_api.hpp>
@ -1010,7 +1010,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
&& scope != "ff_log_dir" && scope != "srs_log_tank" && scope != "srs_log_level" && scope != "ff_log_dir" && scope != "srs_log_tank" && scope != "srs_log_level"
&& scope != "srs_log_file" && scope != "max_connections" && scope != "utc_time" && scope != "srs_log_file" && scope != "max_connections" && scope != "utc_time"
&& scope != "pithy_print_ms" && scope != "vhost" && scope != "dvr" && scope != "pithy_print_ms" && scope != "vhost" && scope != "dvr"
) { ) {
ret = ERROR_SYSTEM_CONFIG_RAW_NOT_ALLOWED; ret = ERROR_SYSTEM_CONFIG_RAW_NOT_ALLOWED;
srs_error("raw api query invalid scope=%s. ret=%d", scope.c_str(), ret); srs_error("raw api query invalid scope=%s. ret=%d", scope.c_str(), ret);
return srs_api_response_code(w, r, ret); return srs_api_response_code(w, r, ret);
@ -1291,7 +1291,7 @@ int SrsGoApiError::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
} }
SrsHttpApi::SrsHttpApi(IConnectionManager* cm, st_netfd_t fd, SrsHttpServeMux* m, string cip) SrsHttpApi::SrsHttpApi(IConnectionManager* cm, st_netfd_t fd, SrsHttpServeMux* m, string cip)
: SrsConnection(cm, fd, cip) : SrsConnection(cm, fd, cip)
{ {
mux = m; mux = m;
cors = new SrsHttpCorsMux(); cors = new SrsHttpCorsMux();
@ -1400,8 +1400,8 @@ int SrsHttpApi::process_request(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
srs_assert(hm); srs_assert(hm);
srs_trace("HTTP API %s %s, content-length=%"PRId64", chunked=%d/%d", srs_trace("HTTP API %s %s, content-length=%"PRId64", chunked=%d/%d",
r->method_str().c_str(), r->url().c_str(), r->content_length(), r->method_str().c_str(), r->url().c_str(), r->content_length(),
hm->is_chunked(), hm->is_infinite_chunked()); hm->is_chunked(), hm->is_infinite_chunked());
// use cors server mux to serve http request, which will proxy to mux. // use cors server mux to serve http request, which will proxy to mux.
if ((ret = cors->serve_http(w, r)) != ERROR_SUCCESS) { if ((ret = cors->serve_http(w, r)) != ERROR_SUCCESS) {

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_API_HPP #ifndef SRS_APP_HTTP_API_HPP
#define SRS_APP_HTTP_API_HPP #define SRS_APP_HTTP_API_HPP
/*
#include <srs_app_http_api.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
class SrsStSocket; class SrsStSocket;

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_client.hpp> #include <srs_app_http_client.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_CLIENT_HPP #ifndef SRS_APP_HTTP_CLIENT_HPP
#define SRS_APP_HTTP_CLIENT_HPP #define SRS_APP_HTTP_CLIENT_HPP
/*
#include <srs_app_http_client.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_conn.hpp> #include <srs_app_http_conn.hpp>
@ -266,7 +266,7 @@ int SrsHttpResponseWriter::send_header(char* data, int size)
// status_line // status_line
ss << "HTTP/1.1 " << status << " " ss << "HTTP/1.1 " << status << " "
<< srs_generate_http_status_text(status) << SRS_HTTP_CRLF; << srs_generate_http_status_text(status) << SRS_HTTP_CRLF;
// detect content type // detect content type
if (srs_go_http_body_allowd(status)) { if (srs_go_http_body_allowd(status)) {
@ -1082,7 +1082,7 @@ int SrsHttpParser::on_body(http_parser* parser, const char* at, size_t length)
} }
SrsHttpConn::SrsHttpConn(IConnectionManager* cm, st_netfd_t fd, ISrsHttpServeMux* m, string cip) SrsHttpConn::SrsHttpConn(IConnectionManager* cm, st_netfd_t fd, ISrsHttpServeMux* m, string cip)
: SrsConnection(cm, fd, cip) : SrsConnection(cm, fd, cip)
{ {
parser = new SrsHttpParser(); parser = new SrsHttpParser();
cors = new SrsHttpCorsMux(); cors = new SrsHttpCorsMux();
@ -1193,7 +1193,7 @@ int SrsHttpConn::process_request(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
srs_trace("HTTP %s %s, content-length=%"PRId64"", srs_trace("HTTP %s %s, content-length=%"PRId64"",
r->method_str().c_str(), r->url().c_str(), r->content_length()); r->method_str().c_str(), r->url().c_str(), r->content_length());
// use cors server mux to serve http request, which will proxy to http_remux. // use cors server mux to serve http request, which will proxy to http_remux.
if ((ret = cors->serve_http(w, r)) != ERROR_SUCCESS) { if ((ret = cors->serve_http(w, r)) != ERROR_SUCCESS) {
@ -1227,7 +1227,7 @@ int SrsHttpConn::on_reload_http_stream_crossdomain()
} }
SrsResponseOnlyHttpConn::SrsResponseOnlyHttpConn(IConnectionManager* cm, st_netfd_t fd, ISrsHttpServeMux* m, string cip) SrsResponseOnlyHttpConn::SrsResponseOnlyHttpConn(IConnectionManager* cm, st_netfd_t fd, ISrsHttpServeMux* m, string cip)
: SrsHttpConn(cm, fd, m, cip) : SrsHttpConn(cm, fd, m, cip)
{ {
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_CONN_HPP #ifndef SRS_APP_HTTP_CONN_HPP
#define SRS_APP_HTTP_CONN_HPP #define SRS_APP_HTTP_CONN_HPP
/*
#include <srs_app_http_conn.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <map> #include <map>
@ -128,7 +124,7 @@ public:
* initialize the response reader with buffer. * initialize the response reader with buffer.
*/ */
virtual int initialize(SrsFastStream* buffer); virtual int initialize(SrsFastStream* buffer);
// interface ISrsHttpResponseReader // interface ISrsHttpResponseReader
public: public:
virtual bool eof(); virtual bool eof();
virtual int read(char* data, int nb_data, int* nb_read); virtual int read(char* data, int nb_data, int* nb_read);
@ -173,7 +169,7 @@ private:
/** /**
* whether the body is infinite chunked. * whether the body is infinite chunked.
*/ */
bool infinite_chunked; bool infinite_chunked;
/** /**
* whether the request indicates should keep alive * whether the request indicates should keep alive
* for the http connection. * for the http connection.
@ -205,9 +201,7 @@ public:
/** /**
* set the original messages, then update the message. * set the original messages, then update the message.
*/ */
virtual int update(std::string url, bool allow_jsonp, http_parser* header, virtual int update(std::string url, bool allow_jsonp, http_parser* header, SrsFastStream* body, std::vector<SrsHttpHeaderField>& headers);
SrsFastStream* body, std::vector<SrsHttpHeaderField>& headers
);
public: public:
virtual SrsConnection* connection(); virtual SrsConnection* connection();
public: public:
@ -230,7 +224,7 @@ public:
* whether body is infinite chunked encoding. * whether body is infinite chunked encoding.
* @remark set by enter_infinite_chunked. * @remark set by enter_infinite_chunked.
*/ */
virtual bool is_infinite_chunked(); virtual bool is_infinite_chunked();
/** /**
* whether should keep the connection alive. * whether should keep the connection alive.
*/ */
@ -411,10 +405,10 @@ public:
virtual ~SrsHttpServer(); virtual ~SrsHttpServer();
public: public:
virtual int initialize(); virtual int initialize();
// ISrsHttpServeMux // ISrsHttpServeMux
public: public:
virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r); virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
// http flv/ts/mp3/aac stream // http flv/ts/mp3/aac stream
public: public:
virtual int http_mount(SrsSource* s, SrsRequest* r); virtual int http_mount(SrsSource* s, SrsRequest* r);
virtual void http_unmount(SrsSource* s, SrsRequest* r); virtual void http_unmount(SrsSource* s, SrsRequest* r);

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_hooks.hpp> #include <srs_app_http_hooks.hpp>
@ -80,14 +80,14 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_error("http post on_connect uri failed. " srs_error("http post on_connect uri failed. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return ret; return ret;
} }
srs_trace("http hook on_connect success. " srs_trace("http hook on_connect success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return ret; return ret;
} }
@ -116,14 +116,14 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_warn("http post on_close uri failed, ignored. " srs_warn("http post on_close uri failed, ignored. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return; return;
} }
srs_trace("http hook on_close success. " srs_trace("http hook on_close success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return; return;
} }
@ -152,14 +152,14 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_error("http post on_publish uri failed. " srs_error("http post on_publish uri failed. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return ret; return ret;
} }
srs_trace("http hook on_publish success. " srs_trace("http hook on_publish success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return ret; return ret;
} }
@ -187,14 +187,14 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_warn("http post on_unpublish uri failed, ignored. " srs_warn("http post on_unpublish uri failed, ignored. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return; return;
} }
srs_trace("http hook on_unpublish success. " srs_trace("http hook on_unpublish success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return; return;
} }
@ -223,14 +223,14 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_error("http post on_play uri failed. " srs_error("http post on_play uri failed. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return ret; return ret;
} }
srs_trace("http hook on_play success. " srs_trace("http hook on_play success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return ret; return ret;
} }
@ -258,14 +258,14 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_warn("http post on_stop uri failed, ignored. " srs_warn("http post on_stop uri failed, ignored. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return; return;
} }
srs_trace("http hook on_stop success. " srs_trace("http hook on_stop success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return; return;
} }
@ -296,14 +296,14 @@ int SrsHttpHooks::on_dvr(int cid, string url, SrsRequest* req, string file)
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_error("http post on_dvr uri failed, ignored. " srs_error("http post on_dvr uri failed, ignored. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return ret; return ret;
} }
srs_trace("http hook on_dvr success. " srs_trace("http hook on_dvr success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return ret; return ret;
} }
@ -345,14 +345,14 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri
SrsHttpClient http; SrsHttpClient http;
if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) { if ((ret = do_post(&http, url, data, status_code, res)) != ERROR_SUCCESS) {
srs_error("http post on_hls uri failed, ignored. " srs_error("http post on_hls uri failed, ignored. "
"client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, code=%d, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret); client_id, url.c_str(), data.c_str(), res.c_str(), status_code, ret);
return ret; return ret;
} }
srs_trace("http hook on_hls success. " srs_trace("http hook on_hls success. "
"client_id=%d, url=%s, request=%s, response=%s, ret=%d", "client_id=%d, url=%s, request=%s, response=%s, ret=%d",
client_id, url.c_str(), data.c_str(), res.c_str(), ret); client_id, url.c_str(), data.c_str(), res.c_str(), ret);
return ret; return ret;
} }
@ -417,7 +417,7 @@ int SrsHttpHooks::on_hls_notify(int cid, std::string url, SrsRequest* req, std::
int spenttime = (int)(srs_update_system_time_ms() - starttime); int spenttime = (int)(srs_update_system_time_ms() - starttime);
srs_trace("http hook on_hls_notify success. client_id=%d, url=%s, code=%d, spent=%dms, read=%dB, ret=%d", srs_trace("http hook on_hls_notify success. client_id=%d, url=%s, code=%d, spent=%dms, read=%dB, ret=%d",
client_id, url.c_str(), msg->status_code(), spenttime, nb_read, ret); client_id, url.c_str(), msg->status_code(), spenttime, nb_read, ret);
// ignore any error for on_hls_notify. // ignore any error for on_hls_notify.
ret = ERROR_SUCCESS; ret = ERROR_SUCCESS;

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_HOOKS_HPP #ifndef SRS_APP_HTTP_HOOKS_HPP
#define SRS_APP_HTTP_HOOKS_HPP #define SRS_APP_HTTP_HOOKS_HPP
/*
#include <srs_app_http_hooks.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -38,10 +35,10 @@ class SrsHttpParser;
class SrsHttpClient; class SrsHttpClient;
/** /**
* the http hooks, http callback api, * the http hooks, http callback api,
* for some event, such as on_connect, call * for some event, such as on_connect, call
* a http api(hooks). * a http api(hooks).
*/ */
class SrsHttpHooks class SrsHttpHooks
{ {
private: private:
@ -50,40 +47,40 @@ public:
virtual ~SrsHttpHooks(); virtual ~SrsHttpHooks();
public: public:
/** /**
* on_connect hook, when client connect to srs. * on_connect hook, when client connect to srs.
* @param url the api server url, to valid the client. * @param url the api server url, to valid the client.
* ignore if empty. * ignore if empty.
*/ */
static int on_connect(std::string url, SrsRequest* req); static int on_connect(std::string url, SrsRequest* req);
/** /**
* on_close hook, when client disconnect to srs, where client is valid by on_connect. * on_close hook, when client disconnect to srs, where client is valid by on_connect.
* @param url the api server url, to process the event. * @param url the api server url, to process the event.
* ignore if empty. * ignore if empty.
*/ */
static void on_close(std::string url, SrsRequest* req, int64_t send_bytes, int64_t recv_bytes); static void on_close(std::string url, SrsRequest* req, int64_t send_bytes, int64_t recv_bytes);
/** /**
* on_publish hook, when client(encoder) start to publish stream * on_publish hook, when client(encoder) start to publish stream
* @param url the api server url, to valid the client. * @param url the api server url, to valid the client.
* ignore if empty. * ignore if empty.
*/ */
static int on_publish(std::string url, SrsRequest* req); static int on_publish(std::string url, SrsRequest* req);
/** /**
* on_unpublish hook, when client(encoder) stop publish stream. * on_unpublish hook, when client(encoder) stop publish stream.
* @param url the api server url, to process the event. * @param url the api server url, to process the event.
* ignore if empty. * ignore if empty.
*/ */
static void on_unpublish(std::string url, SrsRequest* req); static void on_unpublish(std::string url, SrsRequest* req);
/** /**
* on_play hook, when client start to play stream. * on_play hook, when client start to play stream.
* @param url the api server url, to valid the client. * @param url the api server url, to valid the client.
* ignore if empty. * ignore if empty.
*/ */
static int on_play(std::string url, SrsRequest* req); static int on_play(std::string url, SrsRequest* req);
/** /**
* on_stop hook, when client stop to play the stream. * on_stop hook, when client stop to play the stream.
* @param url the api server url, to process the event. * @param url the api server url, to process the event.
* ignore if empty. * ignore if empty.
*/ */
static void on_stop(std::string url, SrsRequest* req); static void on_stop(std::string url, SrsRequest* req);
/** /**
* on_dvr hook, when reap a dvr file. * on_dvr hook, when reap a dvr file.

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_static.hpp> #include <srs_app_http_static.hpp>
@ -52,7 +52,7 @@ using namespace std;
#include <srs_app_server.hpp> #include <srs_app_server.hpp>
SrsVodStream::SrsVodStream(string root_dir) SrsVodStream::SrsVodStream(string root_dir)
: SrsHttpFileServer(root_dir) : SrsHttpFileServer(root_dir)
{ {
} }
@ -74,7 +74,7 @@ int SrsVodStream::serve_flv_stream(ISrsHttpResponseWriter* w, ISrsHttpMessage* r
if (offset > fs.filesize()) { if (offset > fs.filesize()) {
ret = ERROR_HTTP_REMUX_OFFSET_OVERFLOW; ret = ERROR_HTTP_REMUX_OFFSET_OVERFLOW;
srs_warn("http flv streaming %s overflow. size=%"PRId64", offset=%d, ret=%d", srs_warn("http flv streaming %s overflow. size=%"PRId64", offset=%d, ret=%d",
fullpath.c_str(), fs.filesize(), offset, ret); fullpath.c_str(), fs.filesize(), offset, ret);
return ret; return ret;
} }
@ -166,7 +166,7 @@ int SrsVodStream::serve_mp4_stream(ISrsHttpResponseWriter* w, ISrsHttpMessage* r
if (end > fs.filesize() || start > end) { if (end > fs.filesize() || start > end) {
ret = ERROR_HTTP_REMUX_OFFSET_OVERFLOW; ret = ERROR_HTTP_REMUX_OFFSET_OVERFLOW;
srs_warn("http mp4 streaming %s overflow. size=%"PRId64", offset=%d, ret=%d", srs_warn("http mp4 streaming %s overflow. size=%"PRId64", offset=%d, ret=%d",
fullpath.c_str(), fs.filesize(), start, ret); fullpath.c_str(), fs.filesize(), start, ret);
return ret; return ret;
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_STATIC_HPP #ifndef SRS_APP_HTTP_STATIC_HPP
#define SRS_APP_HTTP_STATIC_HPP #define SRS_APP_HTTP_STATIC_HPP
/*
#include <srs_app_http_static.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_http_conn.hpp> #include <srs_app_http_conn.hpp>
@ -49,9 +45,9 @@ protected:
}; };
/** /**
* the http static server instance, * the http static server instance,
* serve http static file and flv/mp4 vod stream. * serve http static file and flv/mp4 vod stream.
*/ */
class SrsHttpStaticServer : virtual public ISrsReloadHandler class SrsHttpStaticServer : virtual public ISrsReloadHandler
{ {
private: private:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_http_stream.hpp> #include <srs_app_http_stream.hpp>
@ -104,7 +104,7 @@ int SrsBufferCache::dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jit
} }
srs_trace("http: dump cache %d msgs, duration=%dms, cache=%.2fs", srs_trace("http: dump cache %d msgs, duration=%dms, cache=%.2fs",
queue->size(), queue->duration(), fast_cache); queue->size(), queue->duration(), fast_cache);
return ret; return ret;
} }
@ -159,7 +159,7 @@ int SrsBufferCache::cycle()
if (pprint->can_print()) { if (pprint->can_print()) {
srs_trace("-> "SRS_CONSTS_LOG_HTTP_STREAM_CACHE" http: got %d msgs, age=%d, min=%d, mw=%d", srs_trace("-> "SRS_CONSTS_LOG_HTTP_STREAM_CACHE" http: got %d msgs, age=%d, min=%d, mw=%d",
count, pprint->age(), SRS_PERF_MW_MIN_MSGS, SRS_CONSTS_RTMP_PULSE_TMMS); count, pprint->age(), SRS_PERF_MW_MIN_MSGS, SRS_CONSTS_RTMP_PULSE_TMMS);
} }
// free the messages. // free the messages.
@ -561,7 +561,7 @@ int SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
if (pprint->can_print()) { if (pprint->can_print()) {
srs_info("-> "SRS_CONSTS_LOG_HTTP_STREAM" http: got %d msgs, age=%d, min=%d, mw=%d", srs_info("-> "SRS_CONSTS_LOG_HTTP_STREAM" http: got %d msgs, age=%d, min=%d, mw=%d",
count, pprint->age(), SRS_PERF_MW_MIN_MSGS, SRS_CONSTS_RTMP_PULSE_TMMS); count, pprint->age(), SRS_PERF_MW_MIN_MSGS, SRS_CONSTS_RTMP_PULSE_TMMS);
} }
// sendout all messages. // sendout all messages.
@ -958,7 +958,7 @@ int SrsHttpStreamServer::hijack(ISrsHttpMessage* request, ISrsHttpHandler** ph)
// trigger edge to fetch from origin. // trigger edge to fetch from origin.
bool vhost_is_edge = _srs_config->get_vhost_is_edge(r->vhost); bool vhost_is_edge = _srs_config->get_vhost_is_edge(r->vhost);
srs_trace("flv: source url=%s, is_edge=%d, source_id=%d[%d]", srs_trace("flv: source url=%s, is_edge=%d, source_id=%d[%d]",
r->get_stream_url().c_str(), vhost_is_edge, s->source_id(), s->source_id()); r->get_stream_url().c_str(), vhost_is_edge, s->source_id(), s->source_id());
return ret; return ret;
} }
@ -991,13 +991,10 @@ int SrsHttpStreamServer::initialize_flv_entry(std::string vhost)
return ret; return ret;
} }
SrsLiveEntry* entry = new SrsLiveEntry( SrsLiveEntry* entry = new SrsLiveEntry(_srs_config->get_vhost_http_remux_mount(vhost));
_srs_config->get_vhost_http_remux_mount(vhost)
);
tflvs[vhost] = entry; tflvs[vhost] = entry;
srs_trace("http flv live stream, vhost=%s, mount=%s", srs_trace("http flv live stream, vhost=%s, mount=%s", vhost.c_str(), entry->mount.c_str());
vhost.c_str(), entry->mount.c_str());
return ret; return ret;
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_HTTP_STREAM_HPP #ifndef SRS_APP_HTTP_STREAM_HPP
#define SRS_APP_HTTP_STREAM_HPP #define SRS_APP_HTTP_STREAM_HPP
/*
#include <srs_app_http_stream.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_http_conn.hpp> #include <srs_app_http_conn.hpp>
@ -38,10 +34,10 @@ class SrsFlvTransmuxer;
class SrsTsTransmuxer; class SrsTsTransmuxer;
/** /**
* for the srs http stream cache, * for the srs http stream cache,
* for example, the audio stream cache to make android(weixin) happy. * for example, the audio stream cache to make android(weixin) happy.
* we start a thread to shrink the queue. * we start a thread to shrink the queue.
*/ */
class SrsBufferCache : public ISrsEndlessThreadHandler class SrsBufferCache : public ISrsEndlessThreadHandler
{ {
private: private:
@ -64,8 +60,8 @@ public:
}; };
/** /**
* the stream encoder in some codec, for example, flv or aac. * the stream encoder in some codec, for example, flv or aac.
*/ */
class ISrsBufferEncoder class ISrsBufferEncoder
{ {
public: public:
@ -73,33 +69,33 @@ public:
virtual ~ISrsBufferEncoder(); virtual ~ISrsBufferEncoder();
public: public:
/** /**
* initialize the encoder with file writer(to http response) and stream cache. * initialize the encoder with file writer(to http response) and stream cache.
* @param w the writer to write to http response. * @param w the writer to write to http response.
* @param c the stream cache for audio stream fast startup. * @param c the stream cache for audio stream fast startup.
*/ */
virtual int initialize(SrsFileWriter* w, SrsBufferCache* c) = 0; virtual int initialize(SrsFileWriter* w, SrsBufferCache* c) = 0;
/** /**
* write rtmp video/audio/metadata. * write rtmp video/audio/metadata.
*/ */
virtual int write_audio(int64_t timestamp, char* data, int size) = 0; virtual int write_audio(int64_t timestamp, char* data, int size) = 0;
virtual int write_video(int64_t timestamp, char* data, int size) = 0; virtual int write_video(int64_t timestamp, char* data, int size) = 0;
virtual int write_metadata(int64_t timestamp, char* data, int size) = 0; virtual int write_metadata(int64_t timestamp, char* data, int size) = 0;
public: public:
/** /**
* for some stream, for example, mp3 and aac, the audio stream, * for some stream, for example, mp3 and aac, the audio stream,
* we use large gop cache in encoder, for the gop cache of SrsSource is ignore audio. * we use large gop cache in encoder, for the gop cache of SrsSource is ignore audio.
* @return true to use gop cache of encoder; otherwise, use SrsSource. * @return true to use gop cache of encoder; otherwise, use SrsSource.
*/ */
virtual bool has_cache() = 0; virtual bool has_cache() = 0;
/** /**
* dumps the cache of encoder to consumer. * dumps the cache of encoder to consumer.
*/ */
virtual int dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter) = 0; virtual int dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter) = 0;
}; };
/** /**
* the flv stream encoder, remux rtmp stream to flv stream. * the flv stream encoder, remux rtmp stream to flv stream.
*/ */
class SrsFlvStreamEncoder : public ISrsBufferEncoder class SrsFlvStreamEncoder : public ISrsBufferEncoder
{ {
protected: protected:
@ -136,8 +132,8 @@ public:
#endif #endif
/** /**
* the ts stream encoder, remux rtmp stream to ts stream. * the ts stream encoder, remux rtmp stream to ts stream.
*/ */
class SrsTsStreamEncoder : public ISrsBufferEncoder class SrsTsStreamEncoder : public ISrsBufferEncoder
{ {
private: private:
@ -156,8 +152,8 @@ public:
}; };
/** /**
* the aac stream encoder, remux rtmp stream to aac stream. * the aac stream encoder, remux rtmp stream to aac stream.
*/ */
class SrsAacStreamEncoder : public ISrsBufferEncoder class SrsAacStreamEncoder : public ISrsBufferEncoder
{ {
private: private:
@ -177,8 +173,8 @@ public:
}; };
/** /**
* the mp3 stream encoder, remux rtmp stream to mp3 stream. * the mp3 stream encoder, remux rtmp stream to mp3 stream.
*/ */
class SrsMp3StreamEncoder : public ISrsBufferEncoder class SrsMp3StreamEncoder : public ISrsBufferEncoder
{ {
private: private:
@ -198,8 +194,8 @@ public:
}; };
/** /**
* write stream to http response direclty. * write stream to http response direclty.
*/ */
class SrsBufferWriter : public SrsFileWriter class SrsBufferWriter : public SrsFileWriter
{ {
private: private:
@ -219,9 +215,9 @@ public:
}; };
/** /**
* the flv live stream supports access rtmp in flv over http. * the flv live stream supports access rtmp in flv over http.
* srs will remux rtmp to flv streaming. * srs will remux rtmp to flv streaming.
*/ */
class SrsLiveStream : public ISrsHttpHandler class SrsLiveStream : public ISrsHttpHandler
{ {
private: private:
@ -239,8 +235,8 @@ private:
}; };
/** /**
* the srs live entry * the srs live entry
*/ */
struct SrsLiveEntry struct SrsLiveEntry
{ {
private: private:
@ -268,12 +264,12 @@ public:
}; };
/** /**
* the http stream server instance, * the http stream server instance,
* serve http stream, for example, flv/ts/mp3/aac live stream. * serve http stream, for example, flv/ts/mp3/aac live stream.
*/ */
// TODO: Support multiple stream. // TODO: Support multiple stream.
class SrsHttpStreamServer : virtual public ISrsReloadHandler class SrsHttpStreamServer : virtual public ISrsReloadHandler
, virtual public ISrsHttpMatchHijacker , virtual public ISrsHttpMatchHijacker
{ {
private: private:
SrsServer* server; SrsServer* server;
@ -288,7 +284,7 @@ public:
virtual ~SrsHttpStreamServer(); virtual ~SrsHttpStreamServer();
public: public:
virtual int initialize(); virtual int initialize();
// http flv/ts/mp3/aac stream // http flv/ts/mp3/aac stream
public: public:
virtual int http_mount(SrsSource* s, SrsRequest* r); virtual int http_mount(SrsSource* s, SrsRequest* r);
virtual void http_unmount(SrsSource* s, SrsRequest* r); virtual void http_unmount(SrsSource* s, SrsRequest* r);

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_ingest.hpp> #include <srs_app_ingest.hpp>
@ -422,7 +422,7 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S
} else { } else {
ret = ERROR_ENCODER_INPUT_TYPE; ret = ERROR_ENCODER_INPUT_TYPE;
srs_error("invalid ingest=%s type=%s, ret=%d", srs_error("invalid ingest=%s type=%s, ret=%d",
ingest->arg0().c_str(), input_type.c_str(), ret); ingest->arg0().c_str(), input_type.c_str(), ret);
} }
// set output format to flv for RTMP // set output format to flv for RTMP
@ -443,7 +443,7 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S
} }
srs_trace("parse success, ingest=%s, vhost=%s", srs_trace("parse success, ingest=%s, vhost=%s",
ingest->arg0().c_str(), vhost->arg0().c_str()); ingest->arg0().c_str(), vhost->arg0().c_str());
return ret; return ret;
} }
@ -463,7 +463,7 @@ void SrsIngester::show_ingest_log_message()
// reportable // reportable
if (pprint->can_print()) { if (pprint->can_print()) {
srs_trace("-> "SRS_CONSTS_LOG_INGESTER" time=%"PRId64", ingesters=%d, #%d(alive=%ds, %s)", srs_trace("-> "SRS_CONSTS_LOG_INGESTER" time=%"PRId64", ingesters=%d, #%d(alive=%ds, %s)",
pprint->age(), (int)ingesters.size(), index, ingester->alive() / 1000, ingester->uri().c_str()); pprint->age(), (int)ingesters.size(), index, ingester->alive() / 1000, ingester->uri().c_str());
} }
} }
@ -549,7 +549,7 @@ int SrsIngester::on_reload_ingest_added(string vhost, string ingest_id)
} }
srs_trace("reload add ingester, " srs_trace("reload add ingester, "
"vhost=%s, id=%s", vhost.c_str(), ingest_id.c_str()); "vhost=%s, id=%s", vhost.c_str(), ingest_id.c_str());
return ret; return ret;
} }
@ -567,7 +567,7 @@ int SrsIngester::on_reload_ingest_updated(string vhost, string ingest_id)
} }
srs_trace("reload updated ingester, " srs_trace("reload updated ingester, "
"vhost=%s, id=%s", vhost.c_str(), ingest_id.c_str()); "vhost=%s, id=%s", vhost.c_str(), ingest_id.c_str());
return ret; return ret;
} }

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_INGEST_HPP #ifndef SRS_APP_INGEST_HPP
#define SRS_APP_INGEST_HPP #define SRS_APP_INGEST_HPP
/*
#include <srs_app_ingest.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#ifdef SRS_AUTO_INGEST #ifdef SRS_AUTO_INGEST
@ -41,8 +38,8 @@ class SrsConfDirective;
class SrsPithyPrint; class SrsPithyPrint;
/** /**
* ingester ffmpeg object. * ingester ffmpeg object.
*/ */
class SrsIngesterFFMPEG class SrsIngesterFFMPEG
{ {
private: private:
@ -70,10 +67,10 @@ public:
}; };
/** /**
* ingest file/stream/device, * ingest file/stream/device,
* encode with FFMPEG(optional), * encode with FFMPEG(optional),
* push to SRS(or any RTMP server) over RTMP. * push to SRS(or any RTMP server) over RTMP.
*/ */
class SrsIngester : public ISrsReusableThreadHandler, public ISrsReloadHandler class SrsIngester : public ISrsReusableThreadHandler, public ISrsReloadHandler
{ {
private: private:

View file

@ -1,24 +1,24 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_kafka.hpp> #include <srs_app_kafka.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_KAFKA_HPP #ifndef SRS_APP_KAFKA_HPP
#define SRS_APP_KAFKA_HPP #define SRS_APP_KAFKA_HPP
/*
#include <srs_app_kafka.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <map> #include <map>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_listener.hpp> #include <srs_app_listener.hpp>

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_LISTENER_HPP #ifndef SRS_APP_LISTENER_HPP
#define SRS_APP_LISTENER_HPP #define SRS_APP_LISTENER_HPP
/*
#include <srs_app_listener.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -38,8 +34,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
struct sockaddr_in; struct sockaddr_in;
/** /**
* the udp packet handler. * the udp packet handler.
*/ */
class ISrsUdpHandler class ISrsUdpHandler
{ {
public: public:
@ -53,20 +49,20 @@ public:
virtual int on_stfd_change(st_netfd_t fd); virtual int on_stfd_change(st_netfd_t fd);
public: public:
/** /**
* when udp listener got a udp packet, notice server to process it. * when udp listener got a udp packet, notice server to process it.
* @param type, the client type, used to create concrete connection, * @param type, the client type, used to create concrete connection,
* for instance RTMP connection to serve client. * for instance RTMP connection to serve client.
* @param from, the udp packet from address. * @param from, the udp packet from address.
* @param buf, the udp packet bytes, user should copy if need to use. * @param buf, the udp packet bytes, user should copy if need to use.
* @param nb_buf, the size of udp packet bytes. * @param nb_buf, the size of udp packet bytes.
* @remark user should never use the buf, for it's a shared memory bytes. * @remark user should never use the buf, for it's a shared memory bytes.
*/ */
virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) = 0; virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) = 0;
}; };
/** /**
* the tcp connection handler. * the tcp connection handler.
*/ */
class ISrsTcpHandler class ISrsTcpHandler
{ {
public: public:
@ -74,14 +70,14 @@ public:
virtual ~ISrsTcpHandler(); virtual ~ISrsTcpHandler();
public: public:
/** /**
* when got tcp client. * when got tcp client.
*/ */
virtual int on_tcp_client(st_netfd_t stfd) = 0; virtual int on_tcp_client(st_netfd_t stfd) = 0;
}; };
/** /**
* bind udp port, start thread to recv packet and handler it. * bind udp port, start thread to recv packet and handler it.
*/ */
class SrsUdpListener : public ISrsReusableThreadHandler class SrsUdpListener : public ISrsReusableThreadHandler
{ {
private: private:
@ -109,8 +105,8 @@ public:
}; };
/** /**
* bind and listen tcp port, use handler to process the client. * bind and listen tcp port, use handler to process the client.
*/ */
class SrsTcpListener : public ISrsReusableThreadHandler class SrsTcpListener : public ISrsReusableThreadHandler
{ {
private: private:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_log.hpp> #include <srs_app_log.hpp>
@ -426,10 +426,7 @@ void SrsFastLog::open_log_file()
fd = ::open(filename.c_str(), O_RDWR | O_APPEND); fd = ::open(filename.c_str(), O_RDWR | O_APPEND);
if(fd == -1 && errno == ENOENT) { if(fd == -1 && errno == ENOENT) {
fd = open(filename.c_str(), fd = open(filename.c_str(), O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
O_RDWR | O_CREAT | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
);
} }
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_LOG_HPP #ifndef SRS_APP_LOG_HPP
#define SRS_APP_LOG_HPP #define SRS_APP_LOG_HPP
/*
#include <srs_app_log.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_st.hpp> #include <srs_app_st.hpp>
@ -40,9 +36,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <map> #include <map>
/** /**
* st thread context, get_id will get the st-thread id, * st thread context, get_id will get the st-thread id,
* which identify the client. * which identify the client.
*/ */
class SrsThreadContext : public ISrsThreadContext class SrsThreadContext : public ISrsThreadContext
{ {
private: private:
@ -59,13 +55,13 @@ public:
}; };
/** /**
* we use memory/disk cache and donot flush when write log. * we use memory/disk cache and donot flush when write log.
* it's ok to use it without config, which will log to console, and default trace level. * it's ok to use it without config, which will log to console, and default trace level.
* when you want to use different level, override this classs, set the protected _level. * when you want to use different level, override this classs, set the protected _level.
*/ */
class SrsFastLog : public ISrsLog, public ISrsReloadHandler class SrsFastLog : public ISrsLog, public ISrsReloadHandler
{ {
// for utest to override // for utest to override
protected: protected:
// defined in SrsLogLevel. // defined in SrsLogLevel.
int _level; int _level;

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_mpegts_udp.hpp> #include <srs_app_mpegts_udp.hpp>
@ -166,7 +166,7 @@ int SrsMpegtsOverUdp::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf)
buffer->append(buf, nb_buf); buffer->append(buf, nb_buf);
srs_info("udp: got %s:%d packet %d/%d bytes", srs_info("udp: got %s:%d packet %d/%d bytes",
peer_ip.c_str(), peer_port, nb_buf, buffer->length()); peer_ip.c_str(), peer_port, nb_buf, buffer->length());
return on_udp_bytes(peer_ip, peer_port, buf, nb_buf); return on_udp_bytes(peer_ip, peer_port, buf, nb_buf);
} }
@ -294,9 +294,9 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg)
if (pprint->can_print()) { if (pprint->can_print()) {
srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" mpegts: got %s age=%d stream=%s, dts=%"PRId64", pts=%"PRId64", size=%d, us=%d, cc=%d, sid=%#x(%s-%d)", srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" mpegts: got %s age=%d stream=%s, dts=%"PRId64", pts=%"PRId64", size=%d, us=%d, cc=%d, sid=%#x(%s-%d)",
(msg->channel->apply == SrsTsPidApplyVideo)? "Video":"Audio", pprint->age(), srs_ts_stream2string(msg->channel->stream).c_str(), (msg->channel->apply == SrsTsPidApplyVideo)? "Video":"Audio", pprint->age(), srs_ts_stream2string(msg->channel->stream).c_str(),
msg->dts, msg->pts, msg->payload->length(), msg->packet->payload_unit_start_indicator, msg->continuity_counter, msg->sid, msg->dts, msg->pts, msg->payload->length(), msg->packet->payload_unit_start_indicator, msg->continuity_counter, msg->sid,
msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number()); msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number());
} }
// When the audio SID is private stream 1, we use common audio. // When the audio SID is private stream 1, we use common audio.
@ -309,7 +309,7 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg)
if (msg->stream_number() != 0) { if (msg->stream_number() != 0) {
ret = ERROR_STREAM_CASTER_TS_ES; ret = ERROR_STREAM_CASTER_TS_ES;
srs_error("mpegts: unsupported stream format, sid=%#x(%s-%d). ret=%d", srs_error("mpegts: unsupported stream format, sid=%#x(%s-%d). ret=%d",
msg->sid, msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number(), ret); msg->sid, msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number(), ret);
return ret; return ret;
} }
@ -594,7 +594,7 @@ int SrsMpegtsOverUdp::rtmp_write_packet(char type, uint32_t timestamp, char* dat
if (pprint->can_print()) { if (pprint->can_print()) {
srs_trace("mpegts: send msg %s age=%d, dts=%"PRId64", size=%d", srs_trace("mpegts: send msg %s age=%d, dts=%"PRId64", size=%d",
msg->is_audio()? "A":msg->is_video()? "V":"N", pprint->age(), msg->timestamp, msg->size); msg->is_audio()? "A":msg->is_video()? "V":"N", pprint->age(), msg->timestamp, msg->size);
} }
// send out encoded msg. // send out encoded msg.

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_MPEGTS_UDP_HPP #ifndef SRS_APP_MPEGTS_UDP_HPP
#define SRS_APP_MPEGTS_UDP_HPP #define SRS_APP_MPEGTS_UDP_HPP
/*
#include <srs_app_mpegts_udp.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#ifdef SRS_AUTO_STREAM_CASTER #ifdef SRS_AUTO_STREAM_CASTER
@ -55,10 +51,10 @@ class SrsSimpleRtmpClient;
#include <srs_app_listener.hpp> #include <srs_app_listener.hpp>
/** /**
* the queue for mpegts over udp to send packets. * the queue for mpegts over udp to send packets.
* for the aac in mpegts contains many flv packets in a pes packet, * for the aac in mpegts contains many flv packets in a pes packet,
* we must recalc the timestamp. * we must recalc the timestamp.
*/ */
class SrsMpegtsQueue class SrsMpegtsQueue
{ {
private: private:
@ -75,10 +71,10 @@ public:
}; };
/** /**
* the mpegts over udp stream caster. * the mpegts over udp stream caster.
*/ */
class SrsMpegtsOverUdp : virtual public ISrsTsHandler class SrsMpegtsOverUdp : virtual public ISrsTsHandler
, virtual public ISrsUdpHandler , virtual public ISrsUdpHandler
{ {
private: private:
SrsBuffer* stream; SrsBuffer* stream;

View file

@ -1,24 +1,24 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_ng_exec.hpp> #include <srs_app_ng_exec.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_NG_EXEC_HPP #ifndef SRS_APP_NG_EXEC_HPP
#define SRS_APP_NG_EXEC_HPP #define SRS_APP_NG_EXEC_HPP
/*
#include <srs_app_ng_exec.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <vector> #include <vector>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_pithy_print.hpp> #include <srs_app_pithy_print.hpp>
@ -187,7 +187,7 @@ int SrsPithyPrint::enter_stage()
client_id = stage->nb_clients++; client_id = stage->nb_clients++;
srs_verbose("enter stage, stage_id=%d, client_id=%d, nb_clients=%d, time_ms=%d", srs_verbose("enter stage, stage_id=%d, client_id=%d, nb_clients=%d, time_ms=%d",
stage->stage_id, client_id, stage->nb_clients, stage->pithy_print_time_ms); stage->stage_id, client_id, stage->nb_clients, stage->pithy_print_time_ms);
return client_id; return client_id;
} }
@ -200,7 +200,7 @@ void SrsPithyPrint::leave_stage()
stage->nb_clients--; stage->nb_clients--;
srs_verbose("leave stage, stage_id=%d, client_id=%d, nb_clients=%d, time_ms=%d", srs_verbose("leave stage, stage_id=%d, client_id=%d, nb_clients=%d, time_ms=%d",
stage->stage_id, client_id, stage->nb_clients, stage->pithy_print_time_ms); stage->stage_id, client_id, stage->nb_clients, stage->pithy_print_time_ms);
} }
void SrsPithyPrint::elapse() void SrsPithyPrint::elapse()

View file

@ -1,40 +1,36 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_PITHY_PRINT_HPP #ifndef SRS_APP_PITHY_PRINT_HPP
#define SRS_APP_PITHY_PRINT_HPP #define SRS_APP_PITHY_PRINT_HPP
/*
#include <srs_app_pithy_print.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_reload.hpp> #include <srs_app_reload.hpp>
/** /**
* the stage info to calc the age. * the stage info to calc the age.
*/ */
class SrsStageInfo : public ISrsReloadHandler class SrsStageInfo : public ISrsReloadHandler
{ {
public: public:
@ -63,16 +59,16 @@ public:
* if there is 1client, it will print every 3s. * if there is 1client, it will print every 3s.
* if there is 10clients, random select one to print every 3s. * if there is 10clients, random select one to print every 3s.
* Usage: * Usage:
SrsPithyPrint* pprint = SrsPithyPrint::create_rtmp_play(); * SrsPithyPrint* pprint = SrsPithyPrint::create_rtmp_play();
SrsAutoFree(SrsPithyPrint, pprint); * SrsAutoFree(SrsPithyPrint, pprint);
while (true) { * while (true) {
pprint->elapse(); * pprint->elapse();
if (pprint->can_print()) { * if (pprint->can_print()) {
// print pithy message. * // print pithy message.
// user can get the elapse time by: pprint->age() * // user can get the elapse time by: pprint->age()
} * }
// read and write RTMP messages. * // read and write RTMP messages.
} * }
*/ */
class SrsPithyPrint class SrsPithyPrint
{ {
@ -99,25 +95,25 @@ public:
virtual ~SrsPithyPrint(); virtual ~SrsPithyPrint();
private: private:
/** /**
* enter the specified stage, return the client id. * enter the specified stage, return the client id.
*/ */
virtual int enter_stage(); virtual int enter_stage();
/** /**
* leave the specified stage, release the client id. * leave the specified stage, release the client id.
*/ */
virtual void leave_stage(); virtual void leave_stage();
public: public:
/** /**
* auto calc the elapse time * auto calc the elapse time
*/ */
virtual void elapse(); virtual void elapse();
/** /**
* whether current client can print. * whether current client can print.
*/ */
virtual bool can_print(); virtual bool can_print();
/** /**
* get the elapsed time in ms. * get the elapsed time in ms.
*/ */
virtual int64_t age(); virtual int64_t age();
}; };

View file

@ -1,24 +1,24 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_process.hpp> #include <srs_app_process.hpp>
@ -253,7 +253,7 @@ int SrsProcess::start()
if (pid > 0) { if (pid > 0) {
is_started = true; is_started = true;
srs_trace("fored process, pid=%d, bin=%s, stdout=%s, stderr=%s, argv=%s", srs_trace("fored process, pid=%d, bin=%s, stdout=%s, stderr=%s, argv=%s",
pid, bin.c_str(), stdout_file.c_str(), stderr_file.c_str(), actual_cli.c_str()); pid, bin.c_str(), stdout_file.c_str(), stderr_file.c_str(), actual_cli.c_str());
return ret; return ret;
} }

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_PROCESS_HPP #ifndef SRS_APP_PROCESS_HPP
#define SRS_APP_PROCESS_HPP #define SRS_APP_PROCESS_HPP
/*
#include <srs_app_process.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_recv_thread.hpp> #include <srs_app_recv_thread.hpp>
@ -148,7 +148,7 @@ void SrsRecvThread::on_thread_stop()
} }
SrsQueueRecvThread::SrsQueueRecvThread(SrsConsumer* consumer, SrsRtmpServer* rtmp_sdk, int timeout_ms) SrsQueueRecvThread::SrsQueueRecvThread(SrsConsumer* consumer, SrsRtmpServer* rtmp_sdk, int timeout_ms)
: trd(this, rtmp_sdk, timeout_ms) : trd(this, rtmp_sdk, timeout_ms)
{ {
_consumer = consumer; _consumer = consumer;
rtmp = rtmp_sdk; rtmp = rtmp_sdk;
@ -251,11 +251,8 @@ void SrsQueueRecvThread::on_stop()
rtmp->set_auto_response(true); rtmp->set_auto_response(true);
} }
SrsPublishRecvThread::SrsPublishRecvThread( SrsPublishRecvThread::SrsPublishRecvThread(SrsRtmpServer* rtmp_sdk, SrsRequest* _req, int mr_sock_fd, int timeout_ms, SrsRtmpConn* conn, SrsSource* source)
SrsRtmpServer* rtmp_sdk, : trd(this, rtmp_sdk, timeout_ms)
SrsRequest* _req, int mr_sock_fd, int timeout_ms,
SrsRtmpConn* conn, SrsSource* source
): trd(this, rtmp_sdk, timeout_ms)
{ {
rtmp = rtmp_sdk; rtmp = rtmp_sdk;
@ -420,11 +417,11 @@ void SrsPublishRecvThread::on_read(ssize_t nread)
} }
/** /**
* to improve read performance, merge some packets then read, * to improve read performance, merge some packets then read,
* when it on and read small bytes, we sleep to wait more data., * when it on and read small bytes, we sleep to wait more data.,
* that is, we merge some data to read together. * that is, we merge some data to read together.
* @see https://github.com/ossrs/srs/issues/241 * @see https://github.com/ossrs/srs/issues/241
*/ */
if (nread < SRS_MR_SMALL_BYTES) { if (nread < SRS_MR_SMALL_BYTES) {
st_usleep(mr_sleep * 1000); st_usleep(mr_sleep * 1000);
} }
@ -514,8 +511,8 @@ void SrsPublishRecvThread::set_socket_buffer(int sleep_ms)
getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, &sock_buf_size); getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, &sock_buf_size);
srs_trace("mr change sleep %d=>%d, erbuf=%d, rbuf %d=>%d, sbytes=%d, realtime=%d", srs_trace("mr change sleep %d=>%d, erbuf=%d, rbuf %d=>%d, sbytes=%d, realtime=%d",
mr_sleep, sleep_ms, socket_buffer_size, onb_rbuf, nb_rbuf, mr_sleep, sleep_ms, socket_buffer_size, onb_rbuf, nb_rbuf,
SRS_MR_SMALL_BYTES, realtime); SRS_MR_SMALL_BYTES, realtime);
rtmp->set_recv_buffer(nb_rbuf); rtmp->set_recv_buffer(nb_rbuf);
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_RECV_THREAD_HPP #ifndef SRS_APP_RECV_THREAD_HPP
#define SRS_APP_RECV_THREAD_HPP #define SRS_APP_RECV_THREAD_HPP
/*
#include <srs_app_recv_thread.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <vector> #include <vector>
@ -119,11 +115,11 @@ public:
}; };
/** /**
* the recv thread used to replace the timeout recv, * the recv thread used to replace the timeout recv,
* which hurt performance for the epoll_ctrl is frequently used. * which hurt performance for the epoll_ctrl is frequently used.
* @see: SrsRtmpConn::playing * @see: SrsRtmpConn::playing
* @see: https://github.com/ossrs/srs/issues/217 * @see: https://github.com/ossrs/srs/issues/217
*/ */
class SrsQueueRecvThread : public ISrsMessagePumper class SrsQueueRecvThread : public ISrsMessagePumper
{ {
private: private:
@ -154,12 +150,12 @@ public:
}; };
/** /**
* the publish recv thread got message and callback the source method to process message. * the publish recv thread got message and callback the source method to process message.
* @see: https://github.com/ossrs/srs/issues/237 * @see: https://github.com/ossrs/srs/issues/237
*/ */
class SrsPublishRecvThread : virtual public ISrsMessagePumper, virtual public ISrsReloadHandler class SrsPublishRecvThread : virtual public ISrsMessagePumper, virtual public ISrsReloadHandler
#ifdef SRS_PERF_MERGED_READ #ifdef SRS_PERF_MERGED_READ
, virtual public IMergeReadHandler , virtual public IMergeReadHandler
#endif #endif
{ {
private: private:
@ -188,14 +184,12 @@ private:
int cid; int cid;
int ncid; int ncid;
public: public:
SrsPublishRecvThread(SrsRtmpServer* rtmp_sdk, SrsPublishRecvThread(SrsRtmpServer* rtmp_sdk, SrsRequest* _req, int mr_sock_fd, int timeout_ms, SrsRtmpConn* conn, SrsSource* source);
SrsRequest* _req, int mr_sock_fd, int timeout_ms,
SrsRtmpConn* conn, SrsSource* source);
virtual ~SrsPublishRecvThread(); virtual ~SrsPublishRecvThread();
public: public:
/** /**
* wait for error for some timeout. * wait for error for some timeout.
*/ */
virtual int wait(uint64_t timeout_ms); virtual int wait(uint64_t timeout_ms);
virtual int64_t nb_msgs(); virtual int64_t nb_msgs();
virtual int error_code(); virtual int error_code();

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_refer.hpp> #include <srs_app_refer.hpp>
@ -47,7 +47,7 @@ int SrsRefer::check(std::string page_url, SrsConfDirective* refer)
for (int i = 0; i < (int)refer->args.size(); i++) { for (int i = 0; i < (int)refer->args.size(); i++) {
if ((ret = check_single_refer(page_url, refer->args.at(i))) == ERROR_SUCCESS) { if ((ret = check_single_refer(page_url, refer->args.at(i))) == ERROR_SUCCESS) {
srs_verbose("check refer success. page_url=%s, refer=%s", srs_verbose("check refer success. page_url=%s, refer=%s",
page_url.c_str(), refer->args.at(i).c_str()); page_url.c_str(), refer->args.at(i).c_str());
return ret; return ret;
} }
} }
@ -88,7 +88,7 @@ int SrsRefer::check_single_refer(std::string page_url, std::string refer)
if (ret != ERROR_SUCCESS) { if (ret != ERROR_SUCCESS) {
srs_verbose("access denied, page_url=%s, domain_name=%s, refer=%s, ret=%d", srs_verbose("access denied, page_url=%s, domain_name=%s, refer=%s, ret=%d",
page_url.c_str(), domain_name.c_str(), refer.c_str(), ret); page_url.c_str(), domain_name.c_str(), refer.c_str(), ret);
} }
return ret; return ret;

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_REFER_HPP #ifndef SRS_APP_REFER_HPP
#define SRS_APP_REFER_HPP #define SRS_APP_REFER_HPP
/*
#include <srs_app_refer.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -40,10 +37,10 @@ public:
virtual ~SrsRefer(); virtual ~SrsRefer();
public: public:
/** /**
* to check the refer. * to check the refer.
* @param page_url the client page url. * @param page_url the client page url.
* @param refer the refer in config. * @param refer the refer in config.
*/ */
virtual int check(std::string page_url, SrsConfDirective* refer); virtual int check(std::string page_url, SrsConfDirective* refer);
private: private:
virtual int check_single_refer(std::string page_url, std::string refer); virtual int check_single_refer(std::string page_url, std::string refer);

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_reload.hpp> #include <srs_app_reload.hpp>

View file

@ -1,43 +1,40 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_RELOAD_HPP #ifndef SRS_APP_RELOAD_HPP
#define SRS_APP_RELOAD_HPP #define SRS_APP_RELOAD_HPP
/*
#include <srs_app_reload.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
/** /**
* the handler for config reload. * the handler for config reload.
* when reload callback, the config is updated yet. * when reload callback, the config is updated yet.
* *
* features not support reload, * features not support reload,
* @see: https://github.com/ossrs/srs/wiki/v1_CN_Reload#notsupportedfeatures * @see: https://github.com/ossrs/srs/wiki/v1_CN_Reload#notsupportedfeatures
*/ */
class ISrsReloadHandler class ISrsReloadHandler
{ {
public: public:

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_rtmp_conn.hpp> #include <srs_app_rtmp_conn.hpp>
@ -298,7 +298,7 @@ SrsClientInfo::~SrsClientInfo()
} }
SrsRtmpConn::SrsRtmpConn(SrsServer* svr, st_netfd_t c, string cip) SrsRtmpConn::SrsRtmpConn(SrsServer* svr, st_netfd_t c, string cip)
: SrsConnection(svr, c, cip) : SrsConnection(svr, c, cip)
{ {
server = svr; server = svr;
@ -384,13 +384,13 @@ int SrsRtmpConn::do_cycle()
} }
srs_info("discovery app success. schema=%s, vhost=%s, port=%d, app=%s", srs_info("discovery app success. schema=%s, vhost=%s, port=%d, app=%s",
req->schema.c_str(), req->vhost.c_str(), req->port, req->app.c_str()); req->schema.c_str(), req->vhost.c_str(), req->port, req->app.c_str());
if (req->schema.empty() || req->vhost.empty() || req->port == 0 || req->app.empty()) { if (req->schema.empty() || req->vhost.empty() || req->port == 0 || req->app.empty()) {
ret = ERROR_RTMP_REQ_TCURL; ret = ERROR_RTMP_REQ_TCURL;
srs_error("discovery tcUrl failed. " srs_error("discovery tcUrl failed. "
"tcUrl=%s, schema=%s, vhost=%s, port=%d, app=%s, ret=%d", "tcUrl=%s, schema=%s, vhost=%s, port=%d, app=%s, ret=%d",
req->tcUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port, req->app.c_str(), ret); req->tcUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port, req->app.c_str(), ret);
return ret; return ret;
} }
@ -402,10 +402,10 @@ int SrsRtmpConn::do_cycle()
srs_verbose("check vhost success."); srs_verbose("check vhost success.");
srs_trace("connect app, " srs_trace("connect app, "
"tcUrl=%s, pageUrl=%s, swfUrl=%s, schema=%s, vhost=%s, port=%d, app=%s, args=%s", "tcUrl=%s, pageUrl=%s, swfUrl=%s, schema=%s, vhost=%s, port=%d, app=%s, args=%s",
req->tcUrl.c_str(), req->pageUrl.c_str(), req->swfUrl.c_str(), req->tcUrl.c_str(), req->pageUrl.c_str(), req->swfUrl.c_str(),
req->schema.c_str(), req->vhost.c_str(), req->port, req->schema.c_str(), req->vhost.c_str(), req->port,
req->app.c_str(), (req->args? "(obj)":"null")); req->app.c_str(), (req->args? "(obj)":"null"));
// show client identity // show client identity
if(req->args) { if(req->args) {
@ -429,10 +429,10 @@ int SrsRtmpConn::do_cycle()
} }
srs_info("edge-srs ip=%s, version=%s, pid=%d, id=%d", srs_info("edge-srs ip=%s, version=%s, pid=%d, id=%d",
srs_server_ip.c_str(), srs_version.c_str(), srs_pid, srs_id); srs_server_ip.c_str(), srs_version.c_str(), srs_pid, srs_id);
if (srs_pid > 0) { if (srs_pid > 0) {
srs_trace("edge-srs ip=%s, version=%s, pid=%d, id=%d", srs_trace("edge-srs ip=%s, version=%s, pid=%d, id=%d",
srs_server_ip.c_str(), srs_version.c_str(), srs_pid, srs_id); srs_server_ip.c_str(), srs_version.c_str(), srs_pid, srs_id);
} }
} }
@ -458,7 +458,7 @@ int SrsRtmpConn::on_reload_vhost_removed(string vhost)
// if the vhost connected is removed, disconnect the client. // if the vhost connected is removed, disconnect the client.
srs_trace("vhost %s removed/disabled, close client url=%s", srs_trace("vhost %s removed/disabled, close client url=%s",
vhost.c_str(), req->get_stream_url().c_str()); vhost.c_str(), req->get_stream_url().c_str());
// should never close the fd in another thread, // should never close the fd in another thread,
// one fd should managed by one thread, we should use interrupt instead. // one fd should managed by one thread, we should use interrupt instead.
@ -699,7 +699,7 @@ int SrsRtmpConn::stream_service_cycle()
} }
req->strip(); req->strip();
srs_trace("client identified, type=%s, stream_name=%s, duration=%.2f", srs_trace("client identified, type=%s, stream_name=%s, duration=%.2f",
srs_client_type_string(info->type).c_str(), req->stream.c_str(), req->duration); srs_client_type_string(info->type).c_str(), req->stream.c_str(), req->duration);
// security check // security check
if ((ret = security->check(info->type, ip, req)) != ERROR_SUCCESS) { if ((ret = security->check(info->type, ip, req)) != ERROR_SUCCESS) {
@ -728,8 +728,8 @@ int SrsRtmpConn::stream_service_cycle()
bool enabled_cache = _srs_config->get_gop_cache(req->vhost); bool enabled_cache = _srs_config->get_gop_cache(req->vhost);
srs_trace("source url=%s, ip=%s, cache=%d, is_edge=%d, source_id=%d[%d]", srs_trace("source url=%s, ip=%s, cache=%d, is_edge=%d, source_id=%d[%d]",
req->get_stream_url().c_str(), ip.c_str(), enabled_cache, info->edge, req->get_stream_url().c_str(), ip.c_str(), enabled_cache, info->edge,
source->source_id(), source->source_id()); source->source_id(), source->source_id());
source->set_cache(enabled_cache); source->set_cache(enabled_cache);
switch (info->type) { switch (info->type) {
@ -897,7 +897,7 @@ int SrsRtmpConn::do_playing(SrsSource* source, SrsConsumer* consumer, SrsQueueRe
set_sock_options(); set_sock_options();
srs_trace("start play smi=%.2f, mw_sleep=%d, mw_enabled=%d, realtime=%d, tcp_nodelay=%d", srs_trace("start play smi=%.2f, mw_sleep=%d, mw_enabled=%d, realtime=%d, tcp_nodelay=%d",
send_min_interval, mw_sleep, mw_enabled, realtime, tcp_nodelay); send_min_interval, mw_sleep, mw_enabled, realtime, tcp_nodelay);
while (!disposed) { while (!disposed) {
// collect elapse for pithy print. // collect elapse for pithy print.
@ -965,12 +965,12 @@ int SrsRtmpConn::do_playing(SrsSource* source, SrsConsumer* consumer, SrsQueueRe
if (pprint->can_print()) { if (pprint->can_print()) {
kbps->sample(); kbps->sample();
srs_trace("-> "SRS_CONSTS_LOG_PLAY srs_trace("-> "SRS_CONSTS_LOG_PLAY
" time=%"PRId64", msgs=%d, okbps=%d,%d,%d, ikbps=%d,%d,%d, mw=%d", " time=%"PRId64", msgs=%d, okbps=%d,%d,%d, ikbps=%d,%d,%d, mw=%d",
pprint->age(), count, pprint->age(), count,
kbps->get_send_kbps(), kbps->get_send_kbps_30s(), kbps->get_send_kbps_5m(), kbps->get_send_kbps(), kbps->get_send_kbps_30s(), kbps->get_send_kbps_5m(),
kbps->get_recv_kbps(), kbps->get_recv_kbps_30s(), kbps->get_recv_kbps_5m(), kbps->get_recv_kbps(), kbps->get_recv_kbps_30s(), kbps->get_recv_kbps_5m(),
mw_sleep mw_sleep
); );
} }
// we use wait timeout to get messages, // we use wait timeout to get messages,
@ -978,10 +978,10 @@ int SrsRtmpConn::do_playing(SrsSource* source, SrsConsumer* consumer, SrsQueueRe
// so the count maybe zero. // so the count maybe zero.
if (count > 0) { if (count > 0) {
srs_verbose("mw wait %dms and got %d msgs %d(%"PRId64"-%"PRId64")ms", srs_verbose("mw wait %dms and got %d msgs %d(%"PRId64"-%"PRId64")ms",
mw_sleep, count, mw_sleep, count,
(count > 0? msgs.msgs[count - 1]->timestamp - msgs.msgs[0]->timestamp : 0), (count > 0? msgs.msgs[count - 1]->timestamp - msgs.msgs[0]->timestamp : 0),
(count > 0? msgs.msgs[0]->timestamp : 0), (count > 0? msgs.msgs[0]->timestamp : 0),
(count > 0? msgs.msgs[count - 1]->timestamp : 0)); (count > 0? msgs.msgs[count - 1]->timestamp : 0));
} }
if (count <= 0) { if (count <= 0) {
@ -1150,7 +1150,7 @@ int SrsRtmpConn::do_publishing(SrsSource* source, SrsPublishRecvThread* trd)
if (trd->nb_msgs() <= nb_msgs) { if (trd->nb_msgs() <= nb_msgs) {
ret = ERROR_SOCKET_TIMEOUT; ret = ERROR_SOCKET_TIMEOUT;
srs_warn("publish timeout %dms, nb_msgs=%"PRId64", ret=%d", srs_warn("publish timeout %dms, nb_msgs=%"PRId64", ret=%d",
nb_msgs? publish_normal_timeout : publish_1stpkt_timeout, nb_msgs, ret); nb_msgs? publish_normal_timeout : publish_1stpkt_timeout, nb_msgs, ret);
break; break;
} }
nb_msgs = trd->nb_msgs(); nb_msgs = trd->nb_msgs();
@ -1161,11 +1161,11 @@ int SrsRtmpConn::do_publishing(SrsSource* source, SrsPublishRecvThread* trd)
bool mr = _srs_config->get_mr_enabled(req->vhost); bool mr = _srs_config->get_mr_enabled(req->vhost);
int mr_sleep = _srs_config->get_mr_sleep_ms(req->vhost); int mr_sleep = _srs_config->get_mr_sleep_ms(req->vhost);
srs_trace("<- "SRS_CONSTS_LOG_CLIENT_PUBLISH srs_trace("<- "SRS_CONSTS_LOG_CLIENT_PUBLISH
" time=%"PRId64", okbps=%d,%d,%d, ikbps=%d,%d,%d, mr=%d/%d, p1stpt=%d, pnt=%d", pprint->age(), " time=%"PRId64", okbps=%d,%d,%d, ikbps=%d,%d,%d, mr=%d/%d, p1stpt=%d, pnt=%d", pprint->age(),
kbps->get_send_kbps(), kbps->get_send_kbps_30s(), kbps->get_send_kbps_5m(), kbps->get_send_kbps(), kbps->get_send_kbps_30s(), kbps->get_send_kbps_5m(),
kbps->get_recv_kbps(), kbps->get_recv_kbps_30s(), kbps->get_recv_kbps_5m(), kbps->get_recv_kbps(), kbps->get_recv_kbps_30s(), kbps->get_recv_kbps_5m(),
mr, mr_sleep, publish_1stpkt_timeout, publish_normal_timeout mr, mr_sleep, publish_1stpkt_timeout, publish_normal_timeout
); );
} }
} }
@ -1181,7 +1181,7 @@ int SrsRtmpConn::acquire_publish(SrsSource* source)
if (!source->can_publish(info->edge)) { if (!source->can_publish(info->edge)) {
ret = ERROR_SYSTEM_STREAM_BUSY; ret = ERROR_SYSTEM_STREAM_BUSY;
srs_warn("stream %s is already publishing. ret=%d", srs_warn("stream %s is already publishing. ret=%d",
req->get_stream_url().c_str(), ret); req->get_stream_url().c_str(), ret);
return ret; return ret;
} }
@ -1426,9 +1426,9 @@ void SrsRtmpConn::change_mw_sleep(int sleep_ms)
int nb_sbuf = socket_buffer_size / 2; int nb_sbuf = socket_buffer_size / 2;
// override the send buffer by macro. // override the send buffer by macro.
#ifdef SRS_PERF_SO_SNDBUF_SIZE #ifdef SRS_PERF_SO_SNDBUF_SIZE
nb_sbuf = SRS_PERF_SO_SNDBUF_SIZE / 2; nb_sbuf = SRS_PERF_SO_SNDBUF_SIZE / 2;
#endif #endif
// set the socket send buffer when required larger buffer // set the socket send buffer when required larger buffer
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &nb_sbuf, sock_buf_size) < 0) { if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &nb_sbuf, sock_buf_size) < 0) {
@ -1437,11 +1437,11 @@ void SrsRtmpConn::change_mw_sleep(int sleep_ms)
getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &nb_sbuf, &sock_buf_size); getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &nb_sbuf, &sock_buf_size);
srs_trace("mw changed sleep %d=>%d, max_msgs=%d, esbuf=%d, sbuf %d=>%d, realtime=%d", srs_trace("mw changed sleep %d=>%d, max_msgs=%d, esbuf=%d, sbuf %d=>%d, realtime=%d",
mw_sleep, sleep_ms, SRS_PERF_MW_MSGS, socket_buffer_size, mw_sleep, sleep_ms, SRS_PERF_MW_MSGS, socket_buffer_size,
onb_sbuf, nb_sbuf, realtime); onb_sbuf, nb_sbuf, realtime);
#else #else
srs_trace("mw changed sleep %d=>%d, max_msgs=%d, sbuf %d, realtime=%d", srs_trace("mw changed sleep %d=>%d, max_msgs=%d, sbuf %d, realtime=%d",
mw_sleep, sleep_ms, SRS_PERF_MW_MSGS, onb_sbuf, realtime); mw_sleep, sleep_ms, SRS_PERF_MW_MSGS, onb_sbuf, realtime);
#endif #endif
mw_sleep = sleep_ms; mw_sleep = sleep_ms;

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_RTMP_CONN_HPP #ifndef SRS_APP_RTMP_CONN_HPP
#define SRS_APP_RTMP_CONN_HPP #define SRS_APP_RTMP_CONN_HPP
/*
#include <srs_app_rtmp_conn.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_rtsp.hpp> #include <srs_app_rtsp.hpp>
@ -103,9 +103,9 @@ int SrsRtpConn::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf)
cache->payload->append(pkt.payload->bytes(), pkt.payload->length()); cache->payload->append(pkt.payload->bytes(), pkt.payload->length());
if (!cache->completed && pprint->can_print()) { if (!cache->completed && pprint->can_print()) {
srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" rtsp: rtp chunked %dB, age=%d, vt=%d/%u, sts=%u/%#x/%#x, paylod=%dB", srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" rtsp: rtp chunked %dB, age=%d, vt=%d/%u, sts=%u/%#x/%#x, paylod=%dB",
nb_buf, pprint->age(), cache->version, cache->payload_type, cache->sequence_number, cache->timestamp, cache->ssrc, nb_buf, pprint->age(), cache->version, cache->payload_type, cache->sequence_number, cache->timestamp, cache->ssrc,
cache->payload->length() cache->payload->length()
); );
return ret; return ret;
} }
} else { } else {
@ -117,9 +117,9 @@ int SrsRtpConn::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf)
if (pprint->can_print()) { if (pprint->can_print()) {
srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" rtsp: rtp #%d %dB, age=%d, vt=%d/%u, sts=%u/%u/%#x, paylod=%dB, chunked=%d", srs_trace("<- "SRS_CONSTS_LOG_STREAM_CASTER" rtsp: rtp #%d %dB, age=%d, vt=%d/%u, sts=%u/%u/%#x, paylod=%dB, chunked=%d",
stream_id, nb_buf, pprint->age(), cache->version, cache->payload_type, cache->sequence_number, cache->timestamp, cache->ssrc, stream_id, nb_buf, pprint->age(), cache->version, cache->payload_type, cache->sequence_number, cache->timestamp, cache->ssrc,
cache->payload->length(), cache->chunked cache->payload->length(), cache->chunked
); );
} }
// always free it. // always free it.
@ -290,10 +290,10 @@ int SrsRtspConn::do_cycle()
h264_pps = req->sdp->video_pps; h264_pps = req->sdp->video_pps;
aac_specific_config = req->sdp->audio_sh; aac_specific_config = req->sdp->audio_sh;
srs_trace("rtsp: video(#%d, %s, %s/%s), audio(#%d, %s, %s/%s, %dHZ %dchannels), %s/%s", srs_trace("rtsp: video(#%d, %s, %s/%s), audio(#%d, %s, %s/%s, %dHZ %dchannels), %s/%s",
video_id, video_codec.c_str(), req->sdp->video_protocol.c_str(), req->sdp->video_transport_format.c_str(), video_id, video_codec.c_str(), req->sdp->video_protocol.c_str(), req->sdp->video_transport_format.c_str(),
audio_id, audio_codec.c_str(), req->sdp->audio_protocol.c_str(), req->sdp->audio_transport_format.c_str(), audio_id, audio_codec.c_str(), req->sdp->audio_protocol.c_str(), req->sdp->audio_transport_format.c_str(),
audio_sample_rate, audio_channel, rtsp_tcUrl.c_str(), rtsp_stream.c_str() audio_sample_rate, audio_channel, rtsp_tcUrl.c_str(), rtsp_stream.c_str()
); );
SrsRtspResponse* res = new SrsRtspResponse((int)req->seq); SrsRtspResponse* res = new SrsRtspResponse((int)req->seq);
res->session = session; res->session = session;
@ -324,11 +324,11 @@ int SrsRtspConn::do_cycle()
return ret; return ret;
} }
srs_trace("rtsp: #%d %s over %s/%s/%s %s client-port=%d-%d, server-port=%d-%d", srs_trace("rtsp: #%d %s over %s/%s/%s %s client-port=%d-%d, server-port=%d-%d",
req->stream_id, (req->stream_id == video_id)? "Video":"Audio", req->stream_id, (req->stream_id == video_id)? "Video":"Audio",
req->transport->transport.c_str(), req->transport->profile.c_str(), req->transport->lower_transport.c_str(), req->transport->transport.c_str(), req->transport->profile.c_str(), req->transport->lower_transport.c_str(),
req->transport->cast_type.c_str(), req->transport->client_port_min, req->transport->client_port_max, req->transport->cast_type.c_str(), req->transport->client_port_min, req->transport->client_port_max,
lpm, lpm + 1 lpm, lpm + 1
); );
// create session. // create session.
if (session.empty()) { if (session.empty()) {

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_RTSP_HPP #ifndef SRS_APP_RTSP_HPP
#define SRS_APP_RTSP_HPP #define SRS_APP_RTSP_HPP
/*
#include <srs_app_rtsp.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -59,8 +55,8 @@ class SrsPithyPrint;
class SrsSimpleRtmpClient; class SrsSimpleRtmpClient;
/** /**
* a rtp connection which transport a stream. * a rtp connection which transport a stream.
*/ */
class SrsRtpConn: public ISrsUdpHandler class SrsRtpConn: public ISrsUdpHandler
{ {
private: private:
@ -82,8 +78,8 @@ public:
}; };
/** /**
* audio is group by frames. * audio is group by frames.
*/ */
struct SrsRtspAudioCache struct SrsRtspAudioCache
{ {
int64_t dts; int64_t dts;
@ -95,8 +91,8 @@ struct SrsRtspAudioCache
}; };
/** /**
* the time jitter correct for rtsp. * the time jitter correct for rtsp.
*/ */
class SrsRtspJitter class SrsRtspJitter
{ {
private: private:
@ -112,8 +108,8 @@ public:
}; };
/** /**
* the rtsp connection serve the fd. * the rtsp connection serve the fd.
*/ */
class SrsRtspConn : public ISrsOneCycleThreadHandler class SrsRtspConn : public ISrsOneCycleThreadHandler
{ {
private: private:
@ -159,7 +155,7 @@ public:
virtual int serve(); virtual int serve();
private: private:
virtual int do_cycle(); virtual int do_cycle();
// internal methods // internal methods
public: public:
virtual int on_rtp_packet(SrsRtpPacket* pkt, int stream_id); virtual int on_rtp_packet(SrsRtpPacket* pkt, int stream_id);
// interface ISrsOneCycleThreadHandler // interface ISrsOneCycleThreadHandler
@ -184,8 +180,8 @@ private:
}; };
/** /**
* the caster for rtsp. * the caster for rtsp.
*/ */
class SrsRtspCaster : public ISrsTcpHandler class SrsRtspCaster : public ISrsTcpHandler
{ {
private: private:
@ -201,18 +197,18 @@ public:
virtual ~SrsRtspCaster(); virtual ~SrsRtspCaster();
public: public:
/** /**
* alloc a rtp port from local ports pool. * alloc a rtp port from local ports pool.
* @param pport output the rtp port. * @param pport output the rtp port.
*/ */
virtual int alloc_port(int* pport); virtual int alloc_port(int* pport);
/** /**
* free the alloced rtp port. * free the alloced rtp port.
*/ */
virtual void free_port(int lpmin, int lpmax); virtual void free_port(int lpmin, int lpmax);
// interface ISrsTcpHandler // interface ISrsTcpHandler
public: public:
virtual int on_tcp_client(st_netfd_t stfd); virtual int on_tcp_client(st_netfd_t stfd);
// internal methods. // internal methods.
public: public:
virtual void remove(SrsRtspConn* conn); virtual void remove(SrsRtspConn* conn);
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_security.hpp> #include <srs_app_security.hpp>

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_SECURITY_HPP #ifndef SRS_APP_SECURITY_HPP
#define SRS_APP_SECURITY_HPP #define SRS_APP_SECURITY_HPP
/*
#include <srs_app_security.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>
@ -37,9 +33,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class SrsConfDirective; class SrsConfDirective;
/** /**
* the security apply on vhost. * the security apply on vhost.
* @see https://github.com/ossrs/srs/issues/211 * @see https://github.com/ossrs/srs/issues/211
*/ */
class SrsSecurity class SrsSecurity
{ {
public: public:
@ -47,22 +43,22 @@ public:
virtual ~SrsSecurity(); virtual ~SrsSecurity();
public: public:
/** /**
* security check the client apply by vhost security strategy * security check the client apply by vhost security strategy
* @param type the client type, publish or play. * @param type the client type, publish or play.
* @param ip the ip address of client. * @param ip the ip address of client.
* @param req the request object of client. * @param req the request object of client.
*/ */
virtual int check(SrsRtmpConnType type, std::string ip, SrsRequest* req); virtual int check(SrsRtmpConnType type, std::string ip, SrsRequest* req);
private: private:
/** /**
* security check the allow, * security check the allow,
* @return, if allowed, ERROR_SYSTEM_SECURITY_ALLOW. * @return, if allowed, ERROR_SYSTEM_SECURITY_ALLOW.
*/ */
virtual int allow_check(SrsConfDirective* rules, SrsRtmpConnType type, std::string ip); virtual int allow_check(SrsConfDirective* rules, SrsRtmpConnType type, std::string ip);
/** /**
* security check the deny, * security check the deny,
* @return, if denied, ERROR_SYSTEM_SECURITY_DENY. * @return, if denied, ERROR_SYSTEM_SECURITY_DENY.
*/ */
virtual int deny_check(SrsConfDirective* rules, SrsRtmpConnType type, std::string ip); virtual int deny_check(SrsConfDirective* rules, SrsRtmpConnType type, std::string ip);
}; };

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_server.hpp> #include <srs_app_server.hpp>
@ -95,20 +95,20 @@ using namespace std;
std::string srs_listener_type2string(SrsListenerType type) std::string srs_listener_type2string(SrsListenerType type)
{ {
switch (type) { switch (type) {
case SrsListenerRtmpStream: case SrsListenerRtmpStream:
return "RTMP"; return "RTMP";
case SrsListenerHttpApi: case SrsListenerHttpApi:
return "HTTP-API"; return "HTTP-API";
case SrsListenerHttpStream: case SrsListenerHttpStream:
return "HTTP-Server"; return "HTTP-Server";
case SrsListenerMpegTsOverUdp: case SrsListenerMpegTsOverUdp:
return "MPEG-TS over UDP"; return "MPEG-TS over UDP";
case SrsListenerRtsp: case SrsListenerRtsp:
return "RTSP"; return "RTSP";
case SrsListenerFlv: case SrsListenerFlv:
return "HTTP-FLV"; return "HTTP-FLV";
default: default:
return "UNKONWN"; return "UNKONWN";
} }
} }
@ -154,8 +154,8 @@ int SrsBufferListener::listen(string i, int p)
} }
srs_info("listen thread current_cid=%d, " srs_info("listen thread current_cid=%d, "
"listen at port=%d, type=%d, fd=%d started success, ep=%s:%d", "listen at port=%d, type=%d, fd=%d started success, ep=%s:%d",
_srs_context->get_id(), p, type, listener->fd(), i.c_str(), p); _srs_context->get_id(), p, type, listener->fd(), i.c_str(), p);
srs_trace("%s listen at tcp://%s:%d, fd=%d", srs_listener_type2string(type).c_str(), ip.c_str(), port, listener->fd()); srs_trace("%s listen at tcp://%s:%d, fd=%d", srs_listener_type2string(type).c_str(), ip.c_str(), port, listener->fd());
@ -322,8 +322,8 @@ int SrsUdpStreamListener::listen(string i, int p)
} }
srs_info("listen thread current_cid=%d, " srs_info("listen thread current_cid=%d, "
"listen at port=%d, type=%d, fd=%d started success, ep=%s:%d", "listen at port=%d, type=%d, fd=%d started success, ep=%s:%d",
_srs_context->get_id(), p, type, listener->fd(), i.c_str(), p); _srs_context->get_id(), p, type, listener->fd(), i.c_str(), p);
// notify the handler the fd changed. // notify the handler the fd changed.
if ((ret = caster->on_stfd_change(listener->stfd())) != ERROR_SUCCESS) { if ((ret = caster->on_stfd_change(listener->stfd())) != ERROR_SUCCESS) {
@ -430,7 +430,7 @@ int SrsSignalManager::start()
sigaction(SRS_SIGNAL_REOPEN_LOG, &sa, NULL); sigaction(SRS_SIGNAL_REOPEN_LOG, &sa, NULL);
srs_trace("signal installed, reload=%d, reopen=%d, grace_quit=%d", srs_trace("signal installed, reload=%d, reopen=%d, grace_quit=%d",
SRS_SIGNAL_RELOAD, SRS_SIGNAL_REOPEN_LOG, SRS_SIGNAL_GRACEFULLY_QUIT); SRS_SIGNAL_RELOAD, SRS_SIGNAL_REOPEN_LOG, SRS_SIGNAL_GRACEFULLY_QUIT);
return pthread->start(); return pthread->start();
} }
@ -604,7 +604,7 @@ int SrsServer::initialize_st()
// @remark, st alloc segment use mmap, which only support 32757 threads, // @remark, st alloc segment use mmap, which only support 32757 threads,
// if need to support more, for instance, 100k threads, define the macro MALLOC_STACK. // if need to support more, for instance, 100k threads, define the macro MALLOC_STACK.
// TODO: FIXME: maybe can use "sysctl vm.max_map_count" to refine. // TODO: FIXME: maybe can use "sysctl vm.max_map_count" to refine.
#define __MMAP_MAX_CONNECTIONS 32756 #define __MMAP_MAX_CONNECTIONS 32756
if (_srs_config->get_max_connections() > __MMAP_MAX_CONNECTIONS) { if (_srs_config->get_max_connections() > __MMAP_MAX_CONNECTIONS) {
ret = ERROR_ST_EXCEED_THREADS; ret = ERROR_ST_EXCEED_THREADS;
srs_error("st mmap for stack allocation must <= %d threads, " srs_error("st mmap for stack allocation must <= %d threads, "
@ -632,7 +632,7 @@ int SrsServer::initialize_st()
return ret; return ret;
} }
srs_trace("server main cid=%d, pid=%d, ppid=%d, asprocess=%d", srs_trace("server main cid=%d, pid=%d, ppid=%d, asprocess=%d",
_srs_context->get_id(), ::getpid(), ppid, asprocess); _srs_context->get_id(), ::getpid(), ppid, asprocess);
return ret; return ret;
} }

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_SERVER_HPP #ifndef SRS_APP_SERVER_HPP
#define SRS_APP_SERVER_HPP #define SRS_APP_SERVER_HPP
/*
#include <srs_app_server.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <vector> #include <vector>
@ -78,8 +74,8 @@ enum SrsListenerType
}; };
/** /**
* the common tcp listener, for RTMP/HTTP server. * the common tcp listener, for RTMP/HTTP server.
*/ */
class SrsListener class SrsListener
{ {
protected: protected:
@ -97,8 +93,8 @@ public:
}; };
/** /**
* tcp listener. * tcp listener.
*/ */
class SrsBufferListener : virtual public SrsListener, virtual public ISrsTcpHandler class SrsBufferListener : virtual public SrsListener, virtual public ISrsTcpHandler
{ {
private: private:
@ -108,15 +104,15 @@ public:
virtual ~SrsBufferListener(); virtual ~SrsBufferListener();
public: public:
virtual int listen(std::string ip, int port); virtual int listen(std::string ip, int port);
// ISrsTcpHandler // ISrsTcpHandler
public: public:
virtual int on_tcp_client(st_netfd_t stfd); virtual int on_tcp_client(st_netfd_t stfd);
}; };
#ifdef SRS_AUTO_STREAM_CASTER #ifdef SRS_AUTO_STREAM_CASTER
/** /**
* the tcp listener, for rtsp server. * the tcp listener, for rtsp server.
*/ */
class SrsRtspListener : virtual public SrsListener, virtual public ISrsTcpHandler class SrsRtspListener : virtual public SrsListener, virtual public ISrsTcpHandler
{ {
private: private:
@ -127,7 +123,7 @@ public:
virtual ~SrsRtspListener(); virtual ~SrsRtspListener();
public: public:
virtual int listen(std::string i, int p); virtual int listen(std::string i, int p);
// ISrsTcpHandler // ISrsTcpHandler
public: public:
virtual int on_tcp_client(st_netfd_t stfd); virtual int on_tcp_client(st_netfd_t stfd);
}; };
@ -145,7 +141,7 @@ public:
virtual ~SrsHttpFlvListener(); virtual ~SrsHttpFlvListener();
public: public:
virtual int listen(std::string i, int p); virtual int listen(std::string i, int p);
// ISrsTcpHandler // ISrsTcpHandler
public: public:
virtual int on_tcp_client(st_netfd_t stfd); virtual int on_tcp_client(st_netfd_t stfd);
}; };
@ -179,9 +175,9 @@ public:
#endif #endif
/** /**
* convert signal to io, * convert signal to io,
* @see: st-1.9/docs/notes.html * @see: st-1.9/docs/notes.html
*/ */
class SrsSignalManager : public ISrsEndlessThreadHandler class SrsSignalManager : public ISrsEndlessThreadHandler
{ {
private: private:
@ -210,8 +206,8 @@ private:
}; };
/** /**
* the handler to the handle cycle in SRS RTMP server. * the handler to the handle cycle in SRS RTMP server.
*/ */
class ISrsServerCycle class ISrsServerCycle
{ {
public: public:
@ -219,12 +215,12 @@ public:
virtual ~ISrsServerCycle(); virtual ~ISrsServerCycle();
public: public:
/** /**
* initialize the cycle handler. * initialize the cycle handler.
*/ */
virtual int initialize() = 0; virtual int initialize() = 0;
/** /**
* do on_cycle while server doing cycle. * do on_cycle while server doing cycle.
*/ */
virtual int on_cycle() = 0; virtual int on_cycle() = 0;
/** /**
* callback the handler when got client. * callback the handler when got client.
@ -233,12 +229,12 @@ public:
}; };
/** /**
* SRS RTMP server, initialize and listen, * SRS RTMP server, initialize and listen,
* start connection service thread, destroy client. * start connection service thread, destroy client.
*/ */
class SrsServer : virtual public ISrsReloadHandler class SrsServer : virtual public ISrsReloadHandler
, virtual public ISrsSourceHandler , virtual public ISrsSourceHandler
, virtual public IConnectionManager , virtual public IConnectionManager
{ {
private: private:
// TODO: FIXME: rename to http_api // TODO: FIXME: rename to http_api
@ -250,31 +246,31 @@ private:
#endif #endif
private: private:
/** /**
* the pid file fd, lock the file write when server is running. * the pid file fd, lock the file write when server is running.
* @remark the init.d script should cleanup the pid file, when stop service, * @remark the init.d script should cleanup the pid file, when stop service,
* for the server never delete the file; when system startup, the pid in pid file * for the server never delete the file; when system startup, the pid in pid file
* maybe valid but the process is not SRS, the init.d script will never start server. * maybe valid but the process is not SRS, the init.d script will never start server.
*/ */
int pid_fd; int pid_fd;
/** /**
* all connections, connection manager * all connections, connection manager
*/ */
std::vector<SrsConnection*> conns; std::vector<SrsConnection*> conns;
/** /**
* all listners, listener manager. * all listners, listener manager.
*/ */
std::vector<SrsListener*> listeners; std::vector<SrsListener*> listeners;
/** /**
* signal manager which convert gignal to io message. * signal manager which convert gignal to io message.
*/ */
SrsSignalManager* signal_manager; SrsSignalManager* signal_manager;
/** /**
* handle in server cycle. * handle in server cycle.
*/ */
ISrsServerCycle* handler; ISrsServerCycle* handler;
/** /**
* user send the signal, convert to variable. * user send the signal, convert to variable.
*/ */
bool signal_reload; bool signal_reload;
bool signal_persistence_config; bool signal_persistence_config;
bool signal_gmc_stop; bool signal_gmc_stop;
@ -286,17 +282,17 @@ public:
virtual ~SrsServer(); virtual ~SrsServer();
private: private:
/** /**
* the destroy is for gmc to analysis the memory leak, * the destroy is for gmc to analysis the memory leak,
* if not destroy global/static data, the gmc will warning memory leak. * if not destroy global/static data, the gmc will warning memory leak.
* in service, server never destroy, directly exit when restart. * in service, server never destroy, directly exit when restart.
*/ */
virtual void destroy(); virtual void destroy();
/** /**
* when SIGTERM, SRS should do cleanup, for example, * when SIGTERM, SRS should do cleanup, for example,
* to stop all ingesters, cleanup HLS and dvr. * to stop all ingesters, cleanup HLS and dvr.
*/ */
virtual void dispose(); virtual void dispose();
// server startup workflow, @see run_master() // server startup workflow, @see run_master()
public: public:
/** /**
* initialize server with callback handler. * initialize server with callback handler.
@ -311,7 +307,7 @@ public:
virtual int http_handle(); virtual int http_handle();
virtual int ingest(); virtual int ingest();
virtual int cycle(); virtual int cycle();
// server utilities. // server utilities.
public: public:
/** /**
* callback for signal manager got a signal. * callback for signal manager got a signal.
@ -330,39 +326,39 @@ public:
virtual void on_signal(int signo); virtual void on_signal(int signo);
private: private:
/** /**
* the server thread main cycle, * the server thread main cycle,
* update the global static data, for instance, the current time, * update the global static data, for instance, the current time,
* the cpu/mem/network statistic. * the cpu/mem/network statistic.
*/ */
virtual int do_cycle(); virtual int do_cycle();
/** /**
* listen at specified protocol. * listen at specified protocol.
*/ */
virtual int listen_rtmp(); virtual int listen_rtmp();
virtual int listen_http_api(); virtual int listen_http_api();
virtual int listen_http_stream(); virtual int listen_http_stream();
virtual int listen_stream_caster(); virtual int listen_stream_caster();
/** /**
* close the listeners for specified type, * close the listeners for specified type,
* remove the listen object from manager. * remove the listen object from manager.
*/ */
virtual void close_listeners(SrsListenerType type); virtual void close_listeners(SrsListenerType type);
/** /**
* resample the server kbs. * resample the server kbs.
*/ */
virtual void resample_kbps(); virtual void resample_kbps();
// internal only // internal only
public: public:
/** /**
* when listener got a fd, notice server to accept it. * when listener got a fd, notice server to accept it.
* @param type, the client type, used to create concrete connection, * @param type, the client type, used to create concrete connection,
* for instance RTMP connection to serve client. * for instance RTMP connection to serve client.
* @param stfd, the client fd in st boxed, the underlayer fd. * @param stfd, the client fd in st boxed, the underlayer fd.
*/ */
virtual int accept_client(SrsListenerType type, st_netfd_t stfd); virtual int accept_client(SrsListenerType type, st_netfd_t stfd);
private: private:
virtual SrsConnection* fd2conn(SrsListenerType type, st_netfd_t stfd); virtual SrsConnection* fd2conn(SrsListenerType type, st_netfd_t stfd);
// IConnectionManager // IConnectionManager
public: public:
/** /**
* callback for connection to remove itself. * callback for connection to remove itself.

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_source.hpp> #include <srs_app_source.hpp>
@ -118,15 +118,15 @@ int SrsRtmpJitter::correct(SrsSharedPtrMessage* msg, SrsRtmpJitterAlgorithm ag)
} }
/** /**
* we use a very simple time jitter detect/correct algorithm: * we use a very simple time jitter detect/correct algorithm:
* 1. delta: ensure the delta is positive and valid, * 1. delta: ensure the delta is positive and valid,
* we set the delta to DEFAULT_FRAME_TIME_MS, * we set the delta to DEFAULT_FRAME_TIME_MS,
* if the delta of time is nagative or greater than CONST_MAX_JITTER_MS. * if the delta of time is nagative or greater than CONST_MAX_JITTER_MS.
* 2. last_pkt_time: specifies the original packet time, * 2. last_pkt_time: specifies the original packet time,
* is used to detect next jitter. * is used to detect next jitter.
* 3. last_pkt_correct_time: simply add the positive delta, * 3. last_pkt_correct_time: simply add the positive delta,
* and enforce the time monotonically. * and enforce the time monotonically.
*/ */
int64_t time = msg->timestamp; int64_t time = msg->timestamp;
int64_t delta = time - last_pkt_time; int64_t delta = time - last_pkt_time;
@ -137,10 +137,10 @@ int SrsRtmpJitter::correct(SrsSharedPtrMessage* msg, SrsRtmpJitterAlgorithm ag)
delta = DEFAULT_FRAME_TIME_MS; delta = DEFAULT_FRAME_TIME_MS;
srs_info("jitter detected, last_pts=%"PRId64", pts=%"PRId64", diff=%"PRId64", last_time=%"PRId64", time=%"PRId64", diff=%"PRId64"", srs_info("jitter detected, last_pts=%"PRId64", pts=%"PRId64", diff=%"PRId64", last_time=%"PRId64", time=%"PRId64", diff=%"PRId64"",
last_pkt_time, time, time - last_pkt_time, last_pkt_correct_time, last_pkt_correct_time + delta, delta); last_pkt_time, time, time - last_pkt_time, last_pkt_correct_time, last_pkt_correct_time + delta, delta);
} else { } else {
srs_verbose("timestamp no jitter. time=%"PRId64", last_pkt=%"PRId64", correct_to=%"PRId64"", srs_verbose("timestamp no jitter. time=%"PRId64", last_pkt=%"PRId64", correct_to=%"PRId64"",
time, last_pkt_time, last_pkt_correct_time + delta); time, last_pkt_time, last_pkt_correct_time + delta);
} }
last_pkt_correct_time = srs_max(0, last_pkt_correct_time + delta); last_pkt_correct_time = srs_max(0, last_pkt_correct_time + delta);
@ -391,10 +391,10 @@ void SrsMessageQueue::shrink()
if (_ignore_shrink) { if (_ignore_shrink) {
srs_info("shrink the cache queue, size=%d, removed=%d, max=%.2f", srs_info("shrink the cache queue, size=%d, removed=%d, max=%.2f",
(int)msgs.size(), msgs_size - (int)msgs.size(), queue_size_ms / 1000.0); (int)msgs.size(), msgs_size - (int)msgs.size(), queue_size_ms / 1000.0);
} else { } else {
srs_trace("shrink the cache queue, size=%d, removed=%d, max=%.2f", srs_trace("shrink the cache queue, size=%d, removed=%d, max=%.2f",
(int)msgs.size(), msgs_size - (int)msgs.size(), queue_size_ms / 1000.0); (int)msgs.size(), msgs_size - (int)msgs.size(), queue_size_ms / 1000.0);
} }
} }
@ -486,7 +486,7 @@ int SrsConsumer::enqueue(SrsSharedPtrMessage* shared_msg, bool atc, SrsRtmpJitte
#ifdef SRS_PERF_QUEUE_COND_WAIT #ifdef SRS_PERF_QUEUE_COND_WAIT
srs_verbose("enqueue msg, time=%"PRId64", size=%d, duration=%d, waiting=%d, min_msg=%d", srs_verbose("enqueue msg, time=%"PRId64", size=%d, duration=%d, waiting=%d, min_msg=%d",
msg->timestamp, msg->size, queue->duration(), mw_waiting, mw_min_msgs); msg->timestamp, msg->size, queue->duration(), mw_waiting, mw_min_msgs);
// fire the mw when msgs is enough. // fire the mw when msgs is enough.
if (mw_waiting) { if (mw_waiting) {
@ -673,7 +673,7 @@ int SrsGopCache::cache(SrsSharedPtrMessage* shared_msg)
// clear gop cache when got key frame // clear gop cache when got key frame
if (msg->is_video() && SrsFlvVideo::keyframe(msg->payload, msg->size)) { if (msg->is_video() && SrsFlvVideo::keyframe(msg->payload, msg->size)) {
srs_info("clear gop cache when got keyframe. vcount=%d, count=%d", srs_info("clear gop cache when got keyframe. vcount=%d, count=%d",
cached_video_count, (int)gop_cache.size()); cached_video_count, (int)gop_cache.size());
clear(); clear();
@ -987,10 +987,10 @@ int SrsOriginHub::on_audio(SrsSharedPtrMessage* shared_audio)
} }
srs_trace("%dB audio sh, codec(%d, profile=%s, %dchannels, %dkbps, %dHZ), flv(%dbits, %dchannels, %dHZ)", srs_trace("%dB audio sh, codec(%d, profile=%s, %dchannels, %dkbps, %dHZ), flv(%dbits, %dchannels, %dHZ)",
msg->size, c->id, srs_aac_object2str(c->aac_object).c_str(), c->aac_channels, msg->size, c->id, srs_aac_object2str(c->aac_object).c_str(), c->aac_channels,
c->audio_data_rate / 1000, srs_aac_srates[c->aac_sample_rate], c->audio_data_rate / 1000, srs_aac_srates[c->aac_sample_rate],
flv_sample_sizes[c->sound_size], flv_sound_types[c->sound_type], flv_sample_sizes[c->sound_size], flv_sound_types[c->sound_type],
srs_flv_srates[c->sound_rate]); srs_flv_srates[c->sound_rate]);
} }
if ((ret = hls->on_audio(msg, format)) != ERROR_SUCCESS) { if ((ret = hls->on_audio(msg, format)) != ERROR_SUCCESS) {
@ -1090,9 +1090,9 @@ int SrsOriginHub::on_video(SrsSharedPtrMessage* shared_video, bool is_sequence_h
} }
srs_trace("%dB video sh, codec(%d, profile=%s, level=%s, %dx%d, %dkbps, %.1ffps, %.1fs)", srs_trace("%dB video sh, codec(%d, profile=%s, level=%s, %dx%d, %dkbps, %.1ffps, %.1fs)",
msg->size, c->id, srs_avc_profile2str(c->avc_profile).c_str(), msg->size, c->id, srs_avc_profile2str(c->avc_profile).c_str(),
srs_avc_level2str(c->avc_level).c_str(), c->width, c->height, srs_avc_level2str(c->avc_level).c_str(), c->width, c->height,
c->video_data_rate / 1000, c->frame_rate, c->duration); c->video_data_rate / 1000, c->frame_rate, c->duration);
} }
if ((ret = hls->on_video(msg, format)) != ERROR_SUCCESS) { if ((ret = hls->on_video(msg, format)) != ERROR_SUCCESS) {

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_SOURCE_HPP #ifndef SRS_APP_SOURCE_HPP
#define SRS_APP_SOURCE_HPP #define SRS_APP_SOURCE_HPP
/*
#include <srs_app_source.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <map> #include <map>
@ -67,11 +63,11 @@ class SrsHds;
#endif #endif
/** /**
* the time jitter algorithm: * the time jitter algorithm:
* 1. full, to ensure stream start at zero, and ensure stream monotonically increasing. * 1. full, to ensure stream start at zero, and ensure stream monotonically increasing.
* 2. zero, only ensure sttream start at zero, ignore timestamp jitter. * 2. zero, only ensure sttream start at zero, ignore timestamp jitter.
* 3. off, disable the time jitter algorithm, like atc. * 3. off, disable the time jitter algorithm, like atc.
*/ */
enum SrsRtmpJitterAlgorithm enum SrsRtmpJitterAlgorithm
{ {
SrsRtmpJitterAlgorithmFULL = 0x01, SrsRtmpJitterAlgorithmFULL = 0x01,
@ -81,9 +77,9 @@ enum SrsRtmpJitterAlgorithm
int _srs_time_jitter_string2int(std::string time_jitter); int _srs_time_jitter_string2int(std::string time_jitter);
/** /**
* time jitter detect and correct, * time jitter detect and correct,
* to ensure the rtmp stream is monotonically. * to ensure the rtmp stream is monotonically.
*/ */
class SrsRtmpJitter class SrsRtmpJitter
{ {
private: private:
@ -94,22 +90,22 @@ public:
virtual ~SrsRtmpJitter(); virtual ~SrsRtmpJitter();
public: public:
/** /**
* detect the time jitter and correct it. * detect the time jitter and correct it.
* @param ag the algorithm to use for time jitter. * @param ag the algorithm to use for time jitter.
*/ */
virtual int correct(SrsSharedPtrMessage* msg, SrsRtmpJitterAlgorithm ag); virtual int correct(SrsSharedPtrMessage* msg, SrsRtmpJitterAlgorithm ag);
/** /**
* get current client time, the last packet time. * get current client time, the last packet time.
*/ */
virtual int get_time(); virtual int get_time();
}; };
#ifdef SRS_PERF_QUEUE_FAST_VECTOR #ifdef SRS_PERF_QUEUE_FAST_VECTOR
/** /**
* to alloc and increase fixed space, * to alloc and increase fixed space,
* fast remove and insert for msgs sender. * fast remove and insert for msgs sender.
* @see https://github.com/ossrs/srs/issues/251 * @see https://github.com/ossrs/srs/issues/251
*/ */
class SrsFastVector class SrsFastVector
{ {
private: private:
@ -133,9 +129,9 @@ public:
#endif #endif
/** /**
* the message queue for the consumer(client), forwarder. * the message queue for the consumer(client), forwarder.
* we limit the size in seconds, drop old messages(the whole gop) if full. * we limit the size in seconds, drop old messages(the whole gop) if full.
*/ */
class SrsMessageQueue class SrsMessageQueue
{ {
private: private:
@ -153,24 +149,24 @@ public:
virtual ~SrsMessageQueue(); virtual ~SrsMessageQueue();
public: public:
/** /**
* get the size of queue. * get the size of queue.
*/ */
virtual int size(); virtual int size();
/** /**
* get the duration of queue. * get the duration of queue.
*/ */
virtual int duration(); virtual int duration();
/** /**
* set the queue size * set the queue size
* @param queue_size the queue size in seconds. * @param queue_size the queue size in seconds.
*/ */
virtual void set_queue_size(double queue_size); virtual void set_queue_size(double queue_size);
public: public:
/** /**
* enqueue the message, the timestamp always monotonically. * enqueue the message, the timestamp always monotonically.
* @param msg, the msg to enqueue, user never free it whatever the return code. * @param msg, the msg to enqueue, user never free it whatever the return code.
* @param is_overflow, whether overflow and shrinked. NULL to ignore. * @param is_overflow, whether overflow and shrinked. NULL to ignore.
*/ */
virtual int enqueue(SrsSharedPtrMessage* msg, bool* is_overflow = NULL); virtual int enqueue(SrsSharedPtrMessage* msg, bool* is_overflow = NULL);
/** /**
* get packets in consumer queue. * get packets in consumer queue.
@ -180,15 +176,15 @@ public:
*/ */
virtual int dump_packets(int max_count, SrsSharedPtrMessage** pmsgs, int& count); virtual int dump_packets(int max_count, SrsSharedPtrMessage** pmsgs, int& count);
/** /**
* dumps packets to consumer, use specified args. * dumps packets to consumer, use specified args.
* @remark the atc/tba/tbv/ag are same to SrsConsumer.enqueue(). * @remark the atc/tba/tbv/ag are same to SrsConsumer.enqueue().
*/ */
virtual int dump_packets(SrsConsumer* consumer, bool atc, SrsRtmpJitterAlgorithm ag); virtual int dump_packets(SrsConsumer* consumer, bool atc, SrsRtmpJitterAlgorithm ag);
private: private:
/** /**
* remove a gop from the front. * remove a gop from the front.
* if no iframe found, clear it. * if no iframe found, clear it.
*/ */
virtual void shrink(); virtual void shrink();
public: public:
/** /**
@ -216,8 +212,8 @@ public:
}; };
/** /**
* the consumer for SrsSource, that is a play client. * the consumer for SrsSource, that is a play client.
*/ */
class SrsConsumer : public ISrsWakable class SrsConsumer : public ISrsWakable
{ {
private: private:
@ -242,24 +238,24 @@ public:
virtual ~SrsConsumer(); virtual ~SrsConsumer();
public: public:
/** /**
* set the size of queue. * set the size of queue.
*/ */
virtual void set_queue_size(double queue_size); virtual void set_queue_size(double queue_size);
/** /**
* when source id changed, notice client to print. * when source id changed, notice client to print.
*/ */
virtual void update_source_id(); virtual void update_source_id();
public: public:
/** /**
* get current client time, the last packet time. * get current client time, the last packet time.
*/ */
virtual int get_time(); virtual int get_time();
/** /**
* enqueue an shared ptr message. * enqueue an shared ptr message.
* @param shared_msg, directly ptr, copy it if need to save it. * @param shared_msg, directly ptr, copy it if need to save it.
* @param whether atc, donot use jitter correct if true. * @param whether atc, donot use jitter correct if true.
* @param ag the algorithm of time jitter. * @param ag the algorithm of time jitter.
*/ */
virtual int enqueue(SrsSharedPtrMessage* shared_msg, bool atc, SrsRtmpJitterAlgorithm ag); virtual int enqueue(SrsSharedPtrMessage* shared_msg, bool atc, SrsRtmpJitterAlgorithm ag);
/** /**
* get packets in consumer queue. * get packets in consumer queue.
@ -270,17 +266,17 @@ public:
virtual int dump_packets(SrsMessageArray* msgs, int& count); virtual int dump_packets(SrsMessageArray* msgs, int& count);
#ifdef SRS_PERF_QUEUE_COND_WAIT #ifdef SRS_PERF_QUEUE_COND_WAIT
/** /**
* wait for messages incomming, atleast nb_msgs and in duration. * wait for messages incomming, atleast nb_msgs and in duration.
* @param nb_msgs the messages count to wait. * @param nb_msgs the messages count to wait.
* @param duration the messgae duration to wait. * @param duration the messgae duration to wait.
*/ */
virtual void wait(int nb_msgs, int duration); virtual void wait(int nb_msgs, int duration);
#endif #endif
/** /**
* when client send the pause message. * when client send the pause message.
*/ */
virtual int on_play_client_pause(bool is_pause); virtual int on_play_client_pause(bool is_pause);
// ISrsWakable // ISrsWakable
public: public:
/** /**
* when the consumer(for player) got msg from recv thread, * when the consumer(for player) got msg from recv thread,
@ -291,39 +287,39 @@ public:
}; };
/** /**
* cache a gop of video/audio data, * cache a gop of video/audio data,
* delivery at the connect of flash player, * delivery at the connect of flash player,
* to enable it to fast startup. * to enable it to fast startup.
*/ */
class SrsGopCache class SrsGopCache
{ {
private: private:
/** /**
* if disabled the gop cache, * if disabled the gop cache,
* the client will wait for the next keyframe for h264, * the client will wait for the next keyframe for h264,
* and will be black-screen. * and will be black-screen.
*/ */
bool enable_gop_cache; bool enable_gop_cache;
/** /**
* the video frame count, avoid cache for pure audio stream. * the video frame count, avoid cache for pure audio stream.
*/ */
int cached_video_count; int cached_video_count;
/** /**
* when user disabled video when publishing, and gop cache enalbed, * when user disabled video when publishing, and gop cache enalbed,
* we will cache the audio/video for we already got video, but we never * we will cache the audio/video for we already got video, but we never
* know when to clear the gop cache, for there is no video in future, * know when to clear the gop cache, for there is no video in future,
* so we must guess whether user disabled the video. * so we must guess whether user disabled the video.
* when we got some audios after laster video, for instance, 600 audio packets, * when we got some audios after laster video, for instance, 600 audio packets,
* about 3s(26ms per packet) 115 audio packets, clear gop cache. * about 3s(26ms per packet) 115 audio packets, clear gop cache.
* *
* @remark, it is ok for performance, for when we clear the gop cache, * @remark, it is ok for performance, for when we clear the gop cache,
* gop cache is disabled for pure audio stream. * gop cache is disabled for pure audio stream.
* @see: https://github.com/ossrs/srs/issues/124 * @see: https://github.com/ossrs/srs/issues/124
*/ */
int audio_after_last_video_count; int audio_after_last_video_count;
/** /**
* cached gop. * cached gop.
*/ */
std::vector<SrsSharedPtrMessage*> gop_cache; std::vector<SrsSharedPtrMessage*> gop_cache;
public: public:
SrsGopCache(); SrsGopCache();
@ -334,47 +330,47 @@ public:
*/ */
virtual void dispose(); virtual void dispose();
/** /**
* to enable or disable the gop cache. * to enable or disable the gop cache.
*/ */
virtual void set(bool v); virtual void set(bool v);
virtual bool enabled(); virtual bool enabled();
/** /**
* only for h264 codec * only for h264 codec
* 1. cache the gop when got h264 video packet. * 1. cache the gop when got h264 video packet.
* 2. clear gop when got keyframe. * 2. clear gop when got keyframe.
* @param shared_msg, directly ptr, copy it if need to save it. * @param shared_msg, directly ptr, copy it if need to save it.
*/ */
virtual int cache(SrsSharedPtrMessage* shared_msg); virtual int cache(SrsSharedPtrMessage* shared_msg);
/** /**
* clear the gop cache. * clear the gop cache.
*/ */
virtual void clear(); virtual void clear();
/** /**
* dump the cached gop to consumer. * dump the cached gop to consumer.
*/ */
virtual int dump(SrsConsumer* consumer, bool atc, SrsRtmpJitterAlgorithm jitter_algorithm); virtual int dump(SrsConsumer* consumer, bool atc, SrsRtmpJitterAlgorithm jitter_algorithm);
/** /**
* used for atc to get the time of gop cache, * used for atc to get the time of gop cache,
* the atc will adjust the sequence header timestamp to gop cache. * the atc will adjust the sequence header timestamp to gop cache.
*/ */
virtual bool empty(); virtual bool empty();
/** /**
* get the start time of gop cache, in ms. * get the start time of gop cache, in ms.
* @return 0 if no packets. * @return 0 if no packets.
*/ */
virtual int64_t start_time(); virtual int64_t start_time();
/** /**
* whether current stream is pure audio, * whether current stream is pure audio,
* when no video in gop cache, the stream is pure audio right now. * when no video in gop cache, the stream is pure audio right now.
*/ */
virtual bool pure_audio(); virtual bool pure_audio();
}; };
/** /**
* the handler to handle the event of srs source. * the handler to handle the event of srs source.
* for example, the http flv streaming module handle the event and * for example, the http flv streaming module handle the event and
* mount http when rtmp start publishing. * mount http when rtmp start publishing.
*/ */
class ISrsSourceHandler class ISrsSourceHandler
{ {
public: public:
@ -382,12 +378,12 @@ public:
virtual ~ISrsSourceHandler(); virtual ~ISrsSourceHandler();
public: public:
/** /**
* when stream start publish, mount stream. * when stream start publish, mount stream.
*/ */
virtual int on_publish(SrsSource* s, SrsRequest* r) = 0; virtual int on_publish(SrsSource* s, SrsRequest* r) = 0;
/** /**
* when stream stop publish, unmount stream. * when stream stop publish, unmount stream.
*/ */
virtual void on_unpublish(SrsSource* s, SrsRequest* r) = 0; virtual void on_unpublish(SrsSource* s, SrsRequest* r) = 0;
}; };
@ -467,7 +463,7 @@ public:
virtual int on_publish(); virtual int on_publish();
// When stop publish stream. // When stop publish stream.
virtual void on_unpublish(); virtual void on_unpublish();
// Internal callback. // Internal callback.
public: public:
// for the SrsForwarder to callback to request the sequence headers. // for the SrsForwarder to callback to request the sequence headers.
virtual int on_forwarder_start(SrsForwarder* forwarder); virtual int on_forwarder_start(SrsForwarder* forwarder);
@ -527,8 +523,8 @@ public:
}; };
/** /**
* live streaming source. * live streaming source.
*/ */
class SrsSource : public ISrsReloadHandler class SrsSource : public ISrsReloadHandler
{ {
friend class SrsOriginHub; friend class SrsOriginHub;
@ -536,17 +532,17 @@ private:
static std::map<std::string, SrsSource*> pool; static std::map<std::string, SrsSource*> pool;
public: public:
/** /**
* create source when fetch from cache failed. * create source when fetch from cache failed.
* @param r the client request. * @param r the client request.
* @param h the event handler for source. * @param h the event handler for source.
* @param pps the matched source, if success never be NULL. * @param pps the matched source, if success never be NULL.
*/ */
static int fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, SrsSource** pps); static int fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, SrsSource** pps);
private: private:
/** /**
* get the exists source, NULL when not exists. * get the exists source, NULL when not exists.
* update the request and return the exists source. * update the request and return the exists source.
*/ */
static SrsSource* fetch(SrsRequest* r); static SrsSource* fetch(SrsRequest* r);
public: public:
/** /**
@ -558,9 +554,9 @@ private:
static int do_cycle_all(); static int do_cycle_all();
public: public:
/** /**
* when system exit, destroy the sources, * when system exit, destroy the sources,
* for gmc to analysis mem leaks. * for gmc to analysis mem leaks.
*/ */
static void destroy(); static void destroy();
private: private:
// source id, // source id,
@ -607,8 +603,8 @@ private:
SrsMetaCache* meta; SrsMetaCache* meta;
private: private:
/** /**
* can publish, true when is not streaming * can publish, true when is not streaming
*/ */
bool _can_publish; bool _can_publish;
// last die time, when all consumers quit and no publisher, // last die time, when all consumers quit and no publisher,
// we will remove the source when source die. // we will remove the source when source die.
@ -621,23 +617,23 @@ public:
virtual int cycle(); virtual int cycle();
// remove source when expired. // remove source when expired.
virtual bool expired(); virtual bool expired();
// initialize, get and setter. // initialize, get and setter.
public: public:
/** /**
* initialize the hls with handlers. * initialize the hls with handlers.
*/ */
virtual int initialize(SrsRequest* r, ISrsSourceHandler* h); virtual int initialize(SrsRequest* r, ISrsSourceHandler* h);
// interface ISrsReloadHandler // interface ISrsReloadHandler
public: public:
virtual int on_reload_vhost_play(std::string vhost); virtual int on_reload_vhost_play(std::string vhost);
// for the tools callback // for the tools callback
public: public:
// source id changed. // source id changed.
virtual int on_source_id_changed(int id); virtual int on_source_id_changed(int id);
// get current source id. // get current source id.
virtual int source_id(); virtual int source_id();
virtual int pre_source_id(); virtual int pre_source_id();
// logic data methods // logic data methods
public: public:
virtual bool can_publish(bool is_edge); virtual bool can_publish(bool is_edge);
virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata);
@ -652,29 +648,26 @@ private:
public: public:
virtual int on_aggregate(SrsCommonMessage* msg); virtual int on_aggregate(SrsCommonMessage* msg);
/** /**
* publish stream event notify. * publish stream event notify.
* @param _req the request from client, the source will deep copy it, * @param _req the request from client, the source will deep copy it,
* for when reload the request of client maybe invalid. * for when reload the request of client maybe invalid.
*/ */
virtual int on_publish(); virtual int on_publish();
virtual void on_unpublish(); virtual void on_unpublish();
// consumer methods // consumer methods
public: public:
/** /**
* create consumer and dumps packets in cache. * create consumer and dumps packets in cache.
* @param consumer, output the create consumer. * @param consumer, output the create consumer.
* @param ds, whether dumps the sequence header. * @param ds, whether dumps the sequence header.
* @param dm, whether dumps the metadata. * @param dm, whether dumps the metadata.
* @param dg, whether dumps the gop cache. * @param dg, whether dumps the gop cache.
*/ */
virtual int create_consumer( virtual int create_consumer(SrsConnection* conn, SrsConsumer*& consumer, bool ds = true, bool dm = true, bool dg = true);
SrsConnection* conn, SrsConsumer*& consumer,
bool ds = true, bool dm = true, bool dg = true
);
virtual void on_consumer_destroy(SrsConsumer* consumer); virtual void on_consumer_destroy(SrsConsumer* consumer);
virtual void set_cache(bool enabled); virtual void set_cache(bool enabled);
virtual SrsRtmpJitterAlgorithm jitter(); virtual SrsRtmpJitterAlgorithm jitter();
// internal // internal
public: public:
// for edge, when publish edge stream, check the state // for edge, when publish edge stream, check the state
virtual int on_edge_start_publish(); virtual int on_edge_start_publish();

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_st.hpp> #include <srs_app_st.hpp>

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_ST_HPP #ifndef SRS_APP_ST_HPP
#define SRS_APP_ST_HPP #define SRS_APP_ST_HPP
/*
#include <srs_app_st.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <string> #include <string>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_statistic.hpp> #include <srs_app_statistic.hpp>
@ -308,10 +308,8 @@ SrsStatisticClient* SrsStatistic::find_client(int cid)
return NULL; return NULL;
} }
int SrsStatistic::on_video_info(SrsRequest* req, int SrsStatistic::on_video_info(SrsRequest* req, SrsVideoCodecId vcodec, SrsAvcProfile avc_profile, SrsAvcLevel avc_level, int width, int height)
SrsVideoCodecId vcodec, SrsAvcProfile avc_profile, SrsAvcLevel avc_level, {
int width, int height
) {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
SrsStatisticVhost* vhost = create_vhost(req); SrsStatisticVhost* vhost = create_vhost(req);
@ -328,10 +326,8 @@ int SrsStatistic::on_video_info(SrsRequest* req,
return ret; return ret;
} }
int SrsStatistic::on_audio_info(SrsRequest* req, int SrsStatistic::on_audio_info(SrsRequest* req, SrsAudioCodecId acodec, SrsAudioSampleRate asample_rate, SrsAudioChannels asound_type, SrsAacObjectType aac_object)
SrsAudioCodecId acodec, SrsAudioSampleRate asample_rate, SrsAudioChannels asound_type, {
SrsAacObjectType aac_object
) {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
SrsStatisticVhost* vhost = create_vhost(req); SrsStatisticVhost* vhost = create_vhost(req);

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_STATISTIC_HPP #ifndef SRS_APP_STATISTIC_HPP
#define SRS_APP_STATISTIC_HPP #define SRS_APP_STATISTIC_HPP
/*
#include <srs_app_statistic.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <map> #include <map>
@ -52,8 +48,8 @@ public:
int nb_clients; int nb_clients;
public: public:
/** /**
* vhost total kbps. * vhost total kbps.
*/ */
SrsKbps* kbps; SrsKbps* kbps;
public: public:
SrsStatisticVhost(); SrsStatisticVhost();
@ -75,8 +71,8 @@ public:
int nb_clients; int nb_clients;
public: public:
/** /**
* stream total kbps. * stream total kbps.
*/ */
SrsKbps* kbps; SrsKbps* kbps;
public: public:
bool has_video; bool has_video;
@ -94,11 +90,11 @@ public:
SrsAudioSampleRate asample_rate; SrsAudioSampleRate asample_rate;
SrsAudioChannels asound_type; SrsAudioChannels asound_type;
/** /**
* audio specified * audio specified
* audioObjectType, in 1.6.2.1 AudioSpecificConfig, page 33, * audioObjectType, in 1.6.2.1 AudioSpecificConfig, page 33,
* 1.5.1.1 Audio object type definition, page 23, * 1.5.1.1 Audio object type definition, page 23,
* in ISO_IEC_14496-3-AAC-2001.pdf. * in ISO_IEC_14496-3-AAC-2001.pdf.
*/ */
SrsAacObjectType aac_object; SrsAacObjectType aac_object;
public: public:
SrsStatisticStream(); SrsStatisticStream();
@ -107,12 +103,12 @@ public:
virtual int dumps(SrsJsonObject* obj); virtual int dumps(SrsJsonObject* obj);
public: public:
/** /**
* publish the stream. * publish the stream.
*/ */
virtual void publish(int cid); virtual void publish(int cid);
/** /**
* close the stream. * close the stream.
*/ */
virtual void close(); virtual void close();
}; };
@ -167,19 +163,13 @@ public:
virtual SrsStatisticClient* find_client(int cid); virtual SrsStatisticClient* find_client(int cid);
public: public:
/** /**
* when got video info for stream. * when got video info for stream.
*/ */
virtual int on_video_info(SrsRequest* req, virtual int on_video_info(SrsRequest* req, SrsVideoCodecId vcodec, SrsAvcProfile avc_profile, SrsAvcLevel avc_level, int width, int height);
SrsVideoCodecId vcodec, SrsAvcProfile avc_profile, SrsAvcLevel avc_level,
int width, int height
);
/** /**
* when got audio info for stream. * when got audio info for stream.
*/ */
virtual int on_audio_info(SrsRequest* req, virtual int on_audio_info(SrsRequest* req, SrsAudioCodecId acodec, SrsAudioSampleRate asample_rate, SrsAudioChannels asound_type, SrsAacObjectType aac_object);
SrsAudioCodecId acodec, SrsAudioSampleRate asample_rate, SrsAudioChannels asound_type,
SrsAacObjectType aac_object
);
/** /**
* when publish stream. * when publish stream.
* @param req the request object of publish connection. * @param req the request object of publish connection.
@ -187,8 +177,8 @@ public:
*/ */
virtual void on_stream_publish(SrsRequest* req, int cid); virtual void on_stream_publish(SrsRequest* req, int cid);
/** /**
* when close stream. * when close stream.
*/ */
virtual void on_stream_close(SrsRequest* req); virtual void on_stream_close(SrsRequest* req);
public: public:
/** /**
@ -207,29 +197,29 @@ public:
*/ */
virtual void on_disconnect(int id); virtual void on_disconnect(int id);
/** /**
* sample the kbps, add delta bytes of conn. * sample the kbps, add delta bytes of conn.
* use kbps_sample() to get all result of kbps stat. * use kbps_sample() to get all result of kbps stat.
*/ */
// TODO: FIXME: the add delta must use IKbpsDelta interface instead. // TODO: FIXME: the add delta must use IKbpsDelta interface instead.
virtual void kbps_add_delta(SrsConnection* conn); virtual void kbps_add_delta(SrsConnection* conn);
/** /**
* calc the result for all kbps. * calc the result for all kbps.
* @return the server kbps. * @return the server kbps.
*/ */
virtual SrsKbps* kbps_sample(); virtual SrsKbps* kbps_sample();
public: public:
/** /**
* get the server id, used to identify the server. * get the server id, used to identify the server.
* for example, when restart, the server id must changed. * for example, when restart, the server id must changed.
*/ */
virtual int64_t server_id(); virtual int64_t server_id();
/** /**
* dumps the vhosts to amf0 array. * dumps the vhosts to amf0 array.
*/ */
virtual int dumps_vhosts(SrsJsonArray* arr); virtual int dumps_vhosts(SrsJsonArray* arr);
/** /**
* dumps the streams to amf0 array. * dumps the streams to amf0 array.
*/ */
virtual int dumps_streams(SrsJsonArray* arr); virtual int dumps_streams(SrsJsonArray* arr);
/** /**
* dumps the clients to amf0 array * dumps the clients to amf0 array

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_thread.hpp> #include <srs_app_thread.hpp>

View file

@ -1,32 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_THREAD_HPP #ifndef SRS_APP_THREAD_HPP
#define SRS_APP_THREAD_HPP #define SRS_APP_THREAD_HPP
/*
#include <srs_app_thread.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <srs_app_st.hpp> #include <srs_app_st.hpp>

View file

@ -1,25 +1,25 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <srs_app_utility.hpp> #include <srs_app_utility.hpp>
@ -402,15 +402,15 @@ bool get_proc_system_stat(SrsProcSystemStat& r)
// @see: read_stat_cpu() from https://github.com/sysstat/sysstat/blob/master/rd_stats.c#L88 // @see: read_stat_cpu() from https://github.com/sysstat/sysstat/blob/master/rd_stats.c#L88
// @remark, ignore the filed 10 cpu_guest_nice // @remark, ignore the filed 10 cpu_guest_nice
sscanf(buf + 5, "%llu %llu %llu %llu %llu %llu %llu %llu %llu\n", sscanf(buf + 5, "%llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
&r.user, &r.user,
&r.nice, &r.nice,
&r.sys, &r.sys,
&r.idle, &r.idle,
&r.iowait, &r.iowait,
&r.irq, &r.irq,
&r.softirq, &r.softirq,
&r.steal, &r.steal,
&r.guest); &r.guest);
break; break;
} }
@ -436,23 +436,23 @@ bool get_proc_self_stat(SrsProcSelfStat& r)
} }
fscanf(f, "%d %32s %c %d %d %d %d " fscanf(f, "%d %32s %c %d %d %d %d "
"%d %u %lu %lu %lu %lu " "%d %u %lu %lu %lu %lu "
"%lu %lu %ld %ld %ld %ld " "%lu %lu %ld %ld %ld %ld "
"%ld %ld %llu %lu %ld " "%ld %ld %llu %lu %ld "
"%lu %lu %lu %lu %lu " "%lu %lu %lu %lu %lu "
"%lu %lu %lu %lu %lu " "%lu %lu %lu %lu %lu "
"%lu %lu %lu %d %d " "%lu %lu %lu %d %d "
"%u %u %llu " "%u %u %llu "
"%lu %ld", "%lu %ld",
&r.pid, r.comm, &r.state, &r.ppid, &r.pgrp, &r.session, &r.tty_nr, &r.pid, r.comm, &r.state, &r.ppid, &r.pgrp, &r.session, &r.tty_nr,
&r.tpgid, &r.flags, &r.minflt, &r.cminflt, &r.majflt, &r.cmajflt, &r.tpgid, &r.flags, &r.minflt, &r.cminflt, &r.majflt, &r.cmajflt,
&r.utime, &r.stime, &r.cutime, &r.cstime, &r.priority, &r.nice, &r.utime, &r.stime, &r.cutime, &r.cstime, &r.priority, &r.nice,
&r.num_threads, &r.itrealvalue, &r.starttime, &r.vsize, &r.rss, &r.num_threads, &r.itrealvalue, &r.starttime, &r.vsize, &r.rss,
&r.rsslim, &r.startcode, &r.endcode, &r.startstack, &r.kstkesp, &r.rsslim, &r.startcode, &r.endcode, &r.startstack, &r.kstkesp,
&r.kstkeip, &r.signal, &r.blocked, &r.sigignore, &r.sigcatch, &r.kstkeip, &r.signal, &r.blocked, &r.sigignore, &r.sigcatch,
&r.wchan, &r.nswap, &r.cnswap, &r.exit_signal, &r.processor, &r.wchan, &r.nswap, &r.cnswap, &r.exit_signal, &r.processor,
&r.rt_priority, &r.policy, &r.delayacct_blkio_ticks, &r.rt_priority, &r.policy, &r.delayacct_blkio_ticks,
&r.guest_time, &r.cguest_time); &r.guest_time, &r.cguest_time);
fclose(f); fclose(f);
#else #else
@ -621,20 +621,20 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat& r)
memset(name, 0, sizeof(name)); memset(name, 0, sizeof(name));
sscanf(buf, "%4d %4d %31s %u %u %llu %u %u %u %llu %u %u %u %u", sscanf(buf, "%4d %4d %31s %u %u %llu %u %u %u %llu %u %u %u %u",
&major, &major,
&minor, &minor,
name, name,
&rd_ios, &rd_ios,
&rd_merges, &rd_merges,
&rd_sectors, &rd_sectors,
&rd_ticks, &rd_ticks,
&wr_ios, &wr_ios,
&wr_merges, &wr_merges,
&wr_sectors, &wr_sectors,
&wr_ticks, &wr_ticks,
&nb_current, &nb_current,
&ticks, &ticks,
&aveq); &aveq);
for (int i = 0; i < (int)conf->args.size(); i++) { for (int i = 0; i < (int)conf->args.size(); i++) {
string name_ok = conf->args.at(i); string name_ok = conf->args.at(i);
@ -712,7 +712,7 @@ void srs_update_disk_stat()
if (r.cpu.ok && r.cpu.total_delta > 0 if (r.cpu.ok && r.cpu.total_delta > 0
&& cpuinfo->ok && cpuinfo->nb_processors > 0 && cpuinfo->ok && cpuinfo->nb_processors > 0
&& o.ticks < r.ticks && o.ticks < r.ticks
) { ) {
// @see: write_ext_stat() from https://github.com/sysstat/sysstat/blob/master/iostat.c#L979 // @see: write_ext_stat() from https://github.com/sysstat/sysstat/blob/master/iostat.c#L979
// TODO: FIXME: the USER_HZ assert to 100, so the total_delta ticks *10 is ms. // TODO: FIXME: the USER_HZ assert to 100, so the total_delta ticks *10 is ms.
double delta_ms = r.cpu.total_delta * 10 / cpuinfo->nb_processors; double delta_ms = r.cpu.total_delta * 10 / cpuinfo->nb_processors;
@ -876,9 +876,9 @@ void srs_update_platform_info()
// @see: read_loadavg() from https://github.com/sysstat/sysstat/blob/master/rd_stats.c#L402 // @see: read_loadavg() from https://github.com/sysstat/sysstat/blob/master/rd_stats.c#L402
// @remark, we use our algorithm, not sysstat. // @remark, we use our algorithm, not sysstat.
fscanf(f, "%lf %lf %lf\n", fscanf(f, "%lf %lf %lf\n",
&r.load_one_minutes, &r.load_one_minutes,
&r.load_five_minutes, &r.load_five_minutes,
&r.load_fifteen_minutes); &r.load_fifteen_minutes);
fclose(f); fclose(f);
} }
@ -989,8 +989,8 @@ void srs_update_network_devices()
// @remark, we use our algorithm, not sysstat. // @remark, we use our algorithm, not sysstat.
char fname[7]; char fname[7];
sscanf(buf, "%6[^:]:%llu %lu %lu %lu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu %lu %lu\n", sscanf(buf, "%6[^:]:%llu %lu %lu %lu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu %lu %lu\n",
fname, &r.rbytes, &r.rpackets, &r.rerrs, &r.rdrop, &r.rfifo, &r.rframe, &r.rcompressed, &r.rmulticast, fname, &r.rbytes, &r.rpackets, &r.rerrs, &r.rdrop, &r.rfifo, &r.rframe, &r.rcompressed, &r.rmulticast,
&r.sbytes, &r.spackets, &r.serrs, &r.sdrop, &r.sfifo, &r.scolls, &r.scarrier, &r.scompressed); &r.sbytes, &r.spackets, &r.serrs, &r.sdrop, &r.sfifo, &r.scolls, &r.scarrier, &r.scompressed);
sscanf(fname, "%s", r.name); sscanf(fname, "%s", r.name);
_nb_srs_system_network_devices = i + 1; _nb_srs_system_network_devices = i + 1;
@ -1113,11 +1113,11 @@ void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps)
sscanf(buf + 14, "%d\n", &nb_socks); sscanf(buf + 14, "%d\n", &nb_socks);
} else if (strncmp(buf, "TCP: ", 5) == 0) { } else if (strncmp(buf, "TCP: ", 5) == 0) {
sscanf(buf + 5, "%*s %d %*s %d %*s %d %*s %d %*s %d\n", sscanf(buf + 5, "%*s %d %*s %d %*s %d %*s %d %*s %d\n",
&nb_tcp4_hashed, &nb_tcp4_hashed,
&nb_tcp_orphans, &nb_tcp_orphans,
&nb_tcp_tws, &nb_tcp_tws,
&nb_tcp_total, &nb_tcp_total,
&nb_tcp_mem); &nb_tcp_mem);
} else if (strncmp(buf, "UDP: ", 5) == 0) { } else if (strncmp(buf, "UDP: ", 5) == 0) {
sscanf(buf + 5, "%*s %d\n", &nb_udp4); sscanf(buf + 5, "%*s %d\n", &nb_udp4);
} }
@ -1484,7 +1484,7 @@ void srs_api_dump_summaries(SrsJsonObject* obj)
// all data is ok? // all data is ok?
bool ok = (r->ok && u->ok && s->ok && c->ok bool ok = (r->ok && u->ok && s->ok && c->ok
&& d->ok && m->ok && p->ok && nrs->ok); && d->ok && m->ok && p->ok && nrs->ok);
SrsJsonObject* data = SrsJsonAny::object(); SrsJsonObject* data = SrsJsonAny::object();
obj->set("data", data); obj->set("data", data);

View file

@ -1,33 +1,29 @@
/* /**
The MIT License (MIT) * The MIT License (MIT)
*
Copyright (c) 2013-2017 SRS(ossrs) * Copyright (c) 2013-2017 SRS(ossrs)
*
Permission is hereby granted, free of charge, to any person obtaining a copy of * Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in * this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to * the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so, * the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions: * subject to the following conditions:
*
The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. * copies or substantial portions of the Software.
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#ifndef SRS_APP_UTILITY_HPP #ifndef SRS_APP_UTILITY_HPP
#define SRS_APP_UTILITY_HPP #define SRS_APP_UTILITY_HPP
/*
#include <srs_app_utility.hpp>
*/
#include <srs_core.hpp> #include <srs_core.hpp>
#include <vector> #include <vector>
@ -48,32 +44,32 @@ class SrsJsonObject;
extern int srs_socket_connect(std::string server, int port, int64_t tm, st_netfd_t* pstfd); extern int srs_socket_connect(std::string server, int port, int64_t tm, st_netfd_t* pstfd);
/** /**
* convert level in string to log level in int. * convert level in string to log level in int.
* @return the log level defined in SrsLogLevel. * @return the log level defined in SrsLogLevel.
*/ */
extern int srs_get_log_level(std::string level); extern int srs_get_log_level(std::string level);
/** /**
* build the path according to vhost/app/stream, where replace variables: * build the path according to vhost/app/stream, where replace variables:
* [vhost], the vhost of stream. * [vhost], the vhost of stream.
* [app], the app of stream. * [app], the app of stream.
* [stream], the stream name of stream. * [stream], the stream name of stream.
* @return the replaced path. * @return the replaced path.
*/ */
extern std::string srs_path_build_stream(std::string template_path, std::string vhost, std::string app, std::string stream); extern std::string srs_path_build_stream(std::string template_path, std::string vhost, std::string app, std::string stream);
/** /**
* build the path according to timestamp, where replace variables: * build the path according to timestamp, where replace variables:
* [2006], replace this const to current year. * [2006], replace this const to current year.
* [01], replace this const to current month. * [01], replace this const to current month.
* [02], replace this const to current date. * [02], replace this const to current date.
* [15], replace this const to current hour. * [15], replace this const to current hour.
* [04], repleace this const to current minute. * [04], repleace this const to current minute.
* [05], repleace this const to current second. * [05], repleace this const to current second.
* [999], repleace this const to current millisecond. * [999], repleace this const to current millisecond.
* [timestamp],replace this const to current UNIX timestamp in ms. * [timestamp],replace this const to current UNIX timestamp in ms.
* @return the replaced path. * @return the replaced path.
*/ */
extern std::string srs_path_build_timestamp(std::string template_path); extern std::string srs_path_build_timestamp(std::string template_path);
/** /**
@ -118,7 +114,7 @@ public:
// the percent of usage. 0.153 is 15.3%. // the percent of usage. 0.153 is 15.3%.
float percent; float percent;
// data of /proc/[pid]/stat // data of /proc/[pid]/stat
public: public:
// pid %d The process ID. // pid %d The process ID.
int pid; int pid;
@ -265,34 +261,34 @@ public:
// to stat the cpu time. // to stat the cpu time.
// @see: man 5 proc, /proc/stat // @see: man 5 proc, /proc/stat
/** /**
* about the cpu time, @see: http://stackoverflow.com/questions/16011677/calculating-cpu-usage-using-proc-files * about the cpu time, @see: http://stackoverflow.com/questions/16011677/calculating-cpu-usage-using-proc-files
* for example, for ossrs.net, a single cpu machine: * for example, for ossrs.net, a single cpu machine:
* [winlin@SRS ~]$ cat /proc/uptime && cat /proc/stat * [winlin@SRS ~]$ cat /proc/uptime && cat /proc/stat
* 5275153.01 4699624.99 * 5275153.01 4699624.99
* cpu 43506750 973 8545744 466133337 4149365 190852 804666 0 0 * cpu 43506750 973 8545744 466133337 4149365 190852 804666 0 0
* where the uptime is 5275153.01s * where the uptime is 5275153.01s
* generally, USER_HZ sysconf(_SC_CLK_TCK)=100, which means the unit of /proc/stat is "1/100ths seconds" * generally, USER_HZ sysconf(_SC_CLK_TCK)=100, which means the unit of /proc/stat is "1/100ths seconds"
* that is, USER_HZ=1/100 seconds * that is, USER_HZ=1/100 seconds
* cpu total = 43506750+973+8545744+466133337+4149365+190852+804666+0+0 (USER_HZ) * cpu total = 43506750+973+8545744+466133337+4149365+190852+804666+0+0 (USER_HZ)
* = 523331687 (USER_HZ) * = 523331687 (USER_HZ)
* = 523331687 * 1/100 (seconds) * = 523331687 * 1/100 (seconds)
* = 5233316.87 seconds * = 5233316.87 seconds
* the cpu total seconds almost the uptime, the delta is more precise. * the cpu total seconds almost the uptime, the delta is more precise.
* *
* we run the command about 26minutes: * we run the command about 26minutes:
* [winlin@SRS ~]$ cat /proc/uptime && cat /proc/stat * [winlin@SRS ~]$ cat /proc/uptime && cat /proc/stat
* 5276739.83 4701090.76 * 5276739.83 4701090.76
* cpu 43514105 973 8548948 466278556 4150480 190899 804937 0 0 * cpu 43514105 973 8548948 466278556 4150480 190899 804937 0 0
* where the uptime is 5276739.83s * where the uptime is 5276739.83s
* cpu total = 43514105+973+8548948+466278556+4150480+190899+804937+0+0 (USER_HZ) * cpu total = 43514105+973+8548948+466278556+4150480+190899+804937+0+0 (USER_HZ)
* = 523488898 (USER_HZ) * = 523488898 (USER_HZ)
* = 523488898 * 1/100 (seconds) * = 523488898 * 1/100 (seconds)
* = 5234888.98 seconds * = 5234888.98 seconds
* where: * where:
* uptime delta = 1586.82s * uptime delta = 1586.82s
* cpu total delta = 1572.11s * cpu total delta = 1572.11s
* the deviation is more smaller. * the deviation is more smaller.
*/ */
class SrsProcSystemStat class SrsProcSystemStat
{ {
public: public:
@ -310,7 +306,7 @@ public:
// previous cpu total = this->total() - total_delta // previous cpu total = this->total() - total_delta
int64_t total_delta; int64_t total_delta;
// data of /proc/stat // data of /proc/stat
public: public:
// The amount of time, measured in units of USER_HZ // The amount of time, measured in units of USER_HZ
// (1/100ths of a second on most architectures, use // (1/100ths of a second on most architectures, use
@ -478,7 +474,7 @@ public:
float percent_ram; float percent_ram;
float percent_swap; float percent_swap;
// data of /proc/meminfo // data of /proc/meminfo
public: public:
// MemActive = MemTotal - MemFree // MemActive = MemTotal - MemFree
uint64_t MemActive; uint64_t MemActive;
@ -515,7 +511,7 @@ public:
// whether the data is ok. // whether the data is ok.
bool ok; bool ok;
// data of /proc/cpuinfo // data of /proc/cpuinfo
public: public:
// The number of processors configured. // The number of processors configured.
int nb_processors; int nb_processors;

Some files were not shown because too many files have changed in this diff Show more