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:
parent
62b7204514
commit
f32aab3d92
175 changed files with 15529 additions and 15935 deletions
|
@ -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();
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue