Skip to content

Commit 19cf040

Browse files
committed
1. supported h265/mp3 for hls and rtmp, 2. fix timestamp, 3. transpond args to notify server
1 parent c1c2fbf commit 19cf040

16 files changed

+651
-167
lines changed

hls/ngx_rtmp_hls_module.c

Lines changed: 305 additions & 64 deletions
Large diffs are not rendered by default.

hls/ngx_rtmp_mpegts.c

Lines changed: 148 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
#include <ngx_config.h>
88
#include <ngx_core.h>
9+
#include "ngx_rtmp.h"
910
#include "ngx_rtmp_mpegts.h"
1011

1112

12-
static u_char ngx_rtmp_mpegts_header[] = {
13+
static u_char ngx_rtmp_mpegts_pat[] = {
1314

1415
/* TS */
1516
0x47, 0x40, 0x00, 0x10, 0x00,
@@ -36,44 +37,150 @@ static u_char ngx_rtmp_mpegts_header[] = {
3637
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3738
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3839
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
40+
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
41+
};
4042

43+
44+
static u_char ngx_mpegts_ts_header[] = {
4145
/* TS */
42-
0x47, 0x50, 0x01, 0x10, 0x00,
46+
0x47, 0x50, 0x01, 0x10, 0x00
47+
};
48+
49+
static u_char ngx_mpegts_pmt_header[] = {
4350
/* PSI */
4451
0x02, 0xb0, 0x17, 0x00, 0x01, 0xc1, 0x00, 0x00,
4552
/* PMT */
4653
0xe1, 0x00,
47-
0xf0, 0x00,
48-
0x1b, 0xe1, 0x00, 0xf0, 0x00, /* h264 */
49-
0x0f, 0xe1, 0x01, 0xf0, 0x00, /* aac */
50-
/*0x03, 0xe1, 0x01, 0xf0, 0x00,*/ /* mp3 */
51-
/* CRC */
52-
0x2f, 0x44, 0xb9, 0x9b, /* crc for aac */
53-
/*0x4e, 0x59, 0x3d, 0x1e,*/ /* crc for mp3 */
54-
/* stuffing 157 bytes */
55-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
56-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
57-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
58-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
59-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
60-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
61-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
62-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
63-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
64-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
65-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
66-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
67-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
69-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
70-
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
54+
0xf0, 0x00
7155
};
7256

7357

58+
enum {
59+
NGX_RTMP_MPEGTS_PID_H264 = 0,
60+
NGX_RTMP_MPEGTS_PID_H265,
61+
NGX_RTMP_MPEGTS_PID_AAC,
62+
NGX_RTMP_MPEGTS_PID_MP3
63+
};
64+
65+
static u_char ngx_mpegts_pid[4][5] = {
66+
{0x1b, 0xe1, 0x00, 0xf0, 0x00}, /* h264 */
67+
{0x24, 0xe1, 0x00, 0xf0, 0x00}, /* h265 */
68+
{0x0f, 0xe1, 0x01, 0xf0, 0x00}, /* aac */
69+
{0x03, 0xe1, 0x01, 0xf0, 0x00} /* mp3 */
70+
};
71+
7472
/* 700 ms PCR delay */
7573
#define NGX_RTMP_HLS_DELAY 63000
7674

75+
static uint32_t crc32table[256] = {
76+
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
77+
0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
78+
0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7,
79+
0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
80+
0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3,
81+
0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
82+
0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef,
83+
0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
84+
0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb,
85+
0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
86+
0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
87+
0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
88+
0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4,
89+
0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
90+
0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08,
91+
0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
92+
0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc,
93+
0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
94+
0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050,
95+
0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
96+
0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
97+
0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
98+
0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1,
99+
0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
100+
0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5,
101+
0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
102+
0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9,
103+
0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
104+
0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd,
105+
0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
106+
0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
107+
0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
108+
0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2,
109+
0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
110+
0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e,
111+
0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
112+
0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a,
113+
0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
114+
0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676,
115+
0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
116+
0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
117+
0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
118+
0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
119+
};
120+
121+
122+
uint32_t
123+
ngx_rtmp_mpegts_crc32(u_char *crc_buf, const u_char *data, int len)
124+
{
125+
int i;
126+
uint32_t crc = 0xFFFFFFFF;
127+
128+
for(i = 0; i < len; i++) {
129+
crc = (crc << 8) ^ crc32table[((crc >> 24) ^ *data++) & 0xFF];
130+
}
131+
132+
crc_buf[0] = (crc & 0xff000000) >> 24;
133+
crc_buf[1] = (crc & 0x00ff0000) >> 16;
134+
crc_buf[2] = (crc & 0x0000ff00) >> 8;
135+
crc_buf[3] = crc & 0x000000ff;
136+
137+
return crc;
138+
}
139+
140+
141+
ngx_int_t
142+
ngx_rtmp_mpegts_gen_pmt(ngx_int_t vcodec, ngx_int_t acodec, u_char *pmt)
143+
{
144+
u_char *p, crc_buf[4], *pmt_pos;
145+
ngx_int_t vpid = -1, apid = -1;
146+
147+
if (vcodec == acodec && vcodec == 0) {
148+
return NGX_ERROR;
149+
}
150+
151+
p = pmt;
152+
p = ngx_cpymem(p, ngx_mpegts_ts_header, sizeof(ngx_mpegts_ts_header));
153+
pmt_pos = p;
154+
155+
p = ngx_cpymem(p, ngx_mpegts_pmt_header, sizeof(ngx_mpegts_pmt_header));
156+
if (vcodec == NGX_RTMP_VIDEO_H264) {
157+
vpid = NGX_RTMP_MPEGTS_PID_H264;
158+
} else if (vcodec == NGX_RTMP_VIDEO_H265) {
159+
vpid = NGX_RTMP_MPEGTS_PID_H265;
160+
}
161+
162+
if (acodec == NGX_RTMP_AUDIO_AAC) {
163+
apid = NGX_RTMP_MPEGTS_PID_AAC;
164+
} else if (acodec == NGX_RTMP_AUDIO_MP3) {
165+
apid = NGX_RTMP_MPEGTS_PID_MP3;
166+
}
167+
168+
if (vpid != -1) {
169+
p = ngx_cpymem(p, ngx_mpegts_pid[vpid], 5);
170+
}
171+
172+
if (apid != -1) {
173+
p = ngx_cpymem(p, ngx_mpegts_pid[apid], 5);
174+
}
175+
176+
ngx_rtmp_mpegts_crc32(crc_buf, pmt_pos, p - pmt_pos);
177+
p = ngx_cpymem(p, crc_buf, 4);
178+
179+
ngx_memset(p, 0xff, 188 - (p - pmt));
180+
181+
return NGX_OK;
182+
}
183+
77184

78185
static ngx_int_t
79186
ngx_rtmp_mpegts_write_file(ngx_rtmp_mpegts_file_t *file, u_char *in,
@@ -157,8 +264,20 @@ ngx_rtmp_mpegts_write_file(ngx_rtmp_mpegts_file_t *file, u_char *in,
157264
static ngx_int_t
158265
ngx_rtmp_mpegts_write_header(ngx_rtmp_mpegts_file_t *file)
159266
{
160-
return ngx_rtmp_mpegts_write_file(file, ngx_rtmp_mpegts_header,
161-
sizeof(ngx_rtmp_mpegts_header));
267+
ngx_int_t ret;
268+
u_char pmt[188];
269+
270+
ret = ngx_rtmp_mpegts_write_file(file, ngx_rtmp_mpegts_pat,
271+
sizeof(ngx_rtmp_mpegts_pat));
272+
if (ret != NGX_OK) {
273+
return ret;
274+
}
275+
276+
if (ngx_rtmp_mpegts_gen_pmt(file->vcodec, file->acodec, pmt) != NGX_OK) {
277+
return NGX_ERROR;
278+
}
279+
280+
return ngx_rtmp_mpegts_write_file(file, pmt, sizeof(pmt));
162281
}
163282

164283

hls/ngx_rtmp_mpegts.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ typedef struct {
2121
u_char buf[16];
2222
u_char iv[16];
2323
AES_KEY key;
24+
ngx_int_t acodec;
25+
ngx_int_t vcodec;
2426
} ngx_rtmp_mpegts_file_t;
2527

2628

http/ngx_http_flv_live_module.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,10 @@ ngx_http_flv_live_parse(ngx_http_request_t *r, ngx_rtmp_session_t *s,
408408
return NGX_HTTP_BAD_REQUEST;
409409
}
410410

411+
if (hflcf->app.len) {
412+
app = hflcf->app;
413+
}
414+
411415
s->app = app;
412416

413417
if (ngx_http_arg(r, (u_char *) "flashver", 8, &s->flashver) != NGX_OK) {

ngx_rtmp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,7 @@ ngx_rtmp_init_listening(ngx_conf_t *cf, ngx_rtmp_conf_port_t *port)
952952
break;
953953
}
954954

955-
if (ngx_clone_listening(cf, ls) != NGX_OK) {
955+
if (ngx_clone_listening(cf->cycle, ls) != NGX_OK) {
956956
return NGX_ERROR;
957957
}
958958

ngx_rtmp.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,40 @@ typedef struct {
105105
* + max 4 extended header (timestamp) */
106106
#define NGX_RTMP_MAX_CHUNK_HEADER 18
107107

108+
#define IS_IRAP(_nal_type_) (_nal_type_ >= 16 && _nal_type_ <= 23)
109+
110+
/* Audio codecs */
111+
enum {
112+
/* Uncompressed codec id is actually 0,
113+
* but we use another value for consistency */
114+
NGX_RTMP_AUDIO_UNCOMPRESSED = 16,
115+
NGX_RTMP_AUDIO_ADPCM = 1,
116+
NGX_RTMP_AUDIO_MP3 = 2,
117+
NGX_RTMP_AUDIO_LINEAR_LE = 3,
118+
NGX_RTMP_AUDIO_NELLY16 = 4,
119+
NGX_RTMP_AUDIO_NELLY8 = 5,
120+
NGX_RTMP_AUDIO_NELLY = 6,
121+
NGX_RTMP_AUDIO_G711A = 7,
122+
NGX_RTMP_AUDIO_G711U = 8,
123+
NGX_RTMP_AUDIO_AAC = 10,
124+
NGX_RTMP_AUDIO_SPEEX = 11,
125+
NGX_RTMP_AUDIO_MP3_8 = 14,
126+
NGX_RTMP_AUDIO_DEVSPEC = 15,
127+
};
128+
129+
130+
/* Video codecs */
131+
enum {
132+
NGX_RTMP_VIDEO_JPEG = 1,
133+
NGX_RTMP_VIDEO_SORENSON_H263 = 2,
134+
NGX_RTMP_VIDEO_SCREEN = 3,
135+
NGX_RTMP_VIDEO_ON2_VP6 = 4,
136+
NGX_RTMP_VIDEO_ON2_VP6_ALPHA = 5,
137+
NGX_RTMP_VIDEO_SCREEN2 = 6,
138+
NGX_RTMP_VIDEO_H264 = 7,
139+
NGX_RTMP_VIDEO_H265 = 10
140+
};
141+
108142

109143
typedef struct {
110144
uint32_t csid; /* chunk stream id */
@@ -168,6 +202,9 @@ typedef struct ngx_live_server_s ngx_live_server_t;
168202
typedef struct ngx_rtmp_addr_conf_s ngx_rtmp_addr_conf_t;
169203

170204
typedef struct {
205+
ngx_int_t acodec;
206+
ngx_int_t vcodec;
207+
171208
uint32_t signature; /* "RTMP" */ /* <-- FIXME wtf */
172209

173210
ngx_event_t close;
@@ -485,6 +522,7 @@ typedef struct ngx_rtmp_core_srv_conf_s {
485522
#endif
486523

487524
ngx_str_t server_name;
525+
ngx_str_t serverid;
488526

489527
/* array of the ngx_rtmp_server_name_t, "server_name" directive */
490528
ngx_array_t server_names;

ngx_rtmp_cmd_module.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ void
154154
ngx_rtmp_cmd_middleware_init(ngx_rtmp_session_t *s)
155155
{
156156
ngx_rtmp_core_srv_dconf_t *rcsdf;
157+
ngx_rtmp_core_srv_conf_t *rcsf;
157158
ngx_request_url_t rurl;
158159

159160
if (ngx_parse_request_url(&rurl, &s->tc_url) == NGX_ERROR) {
@@ -163,6 +164,7 @@ ngx_rtmp_cmd_middleware_init(ngx_rtmp_session_t *s)
163164
s->scheme = rurl.scheme;
164165
s->domain = rurl.host;
165166

167+
rcsf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module);
166168
rcsdf = ngx_rtmp_get_module_srv_dconf(s, &ngx_rtmp_core_module);
167169
if (rcsdf && rcsdf->serverid.len) {
168170
s->serverid.data = ngx_pcalloc(s->connection->pool,
@@ -172,14 +174,21 @@ ngx_rtmp_cmd_middleware_init(ngx_rtmp_session_t *s)
172174
}
173175
s->serverid.len = rcsdf->serverid.len;
174176
ngx_memcpy(s->serverid.data, rcsdf->serverid.data, s->serverid.len);
175-
} else {
177+
} else if (rcsf && rcsf->serverid.len) {
178+
s->serverid.data = ngx_pcalloc(s->connection->pool,
179+
rcsf->serverid.len);
180+
if (s->serverid.data == NULL) {
181+
return;
182+
}
183+
s->serverid.len = rcsf->serverid.len;
184+
ngx_memcpy(s->serverid.data, rcsf->serverid.data, s->serverid.len);
185+
}else {
176186
s->serverid = s->domain;
177187
}
178188
}
179189

180190
void
181-
ngx_rtmp_cmd_stream_init(ngx_rtmp_session_t *s, u_char *name, u_char *args,
182-
unsigned publishing)
191+
ngx_rtmp_cmd_session_set(ngx_rtmp_session_t *s, u_char *name, u_char *args)
183192
{
184193
u_char *p;
185194

@@ -207,7 +216,12 @@ ngx_rtmp_cmd_stream_init(ngx_rtmp_session_t *s, u_char *name, u_char *args,
207216
*p++ = '/';
208217
p = ngx_copy(p, s->name.data, s->name.len);
209218
}
219+
}
210220

221+
222+
void
223+
ngx_rtmp_cmd_stream_init(ngx_rtmp_session_t *s, unsigned publishing)
224+
{
211225
s->live_stream = ngx_live_create_stream(&s->serverid, &s->stream);
212226

213227
ngx_live_create_ctx(s, publishing);
@@ -230,6 +244,8 @@ ngx_rtmp_publish_filter(ngx_rtmp_session_t *s, ngx_rtmp_publish_t *v)
230244

231245
s->published = 1;
232246

247+
ngx_rtmp_cmd_session_set(s, v->name, v->args);
248+
233249
ngx_rtmp_oclp_pnotify_start(s, 1);
234250

235251
if (s->relay) { /* relay pull */
@@ -240,7 +256,7 @@ ngx_rtmp_publish_filter(ngx_rtmp_session_t *s, ngx_rtmp_publish_t *v)
240256
ngx_live_put_relay_reconnect(rc);
241257
s->live_stream->pull_reconnect = NULL;
242258
} else {
243-
ngx_rtmp_cmd_stream_init(s, v->name, v->args, 1);
259+
ngx_rtmp_cmd_stream_init(s, 1);
244260
}
245261

246262
return ngx_rtmp_publish(s, v);
@@ -259,6 +275,8 @@ ngx_rtmp_play_filter(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v)
259275

260276
s->played = 1;
261277

278+
ngx_rtmp_cmd_session_set(s, v->name, v->args);
279+
262280
ngx_rtmp_oclp_pnotify_start(s, 0);
263281

264282
if (s->relay) { /* relay push */
@@ -267,7 +285,7 @@ ngx_rtmp_play_filter(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v)
267285

268286
--s->live_stream->push_count;
269287
} else {
270-
ngx_rtmp_cmd_stream_init(s, v->name, v->args, 0);
288+
ngx_rtmp_cmd_stream_init(s, 0);
271289
}
272290

273291
return ngx_rtmp_play(s, v);
@@ -1008,7 +1026,7 @@ ngx_rtmp_cmd_play_init(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
10081026
ngx_rtmp_cmd_fill_args(v.name, v.args);
10091027

10101028
ngx_log_debug6(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
1011-
"play: name='%s' args='%s' start=%i duration=%i "
1029+
"rtmp-cmd: play| name='%s' args='%s' start=%i duration=%i "
10121030
"reset=%i silent=%i",
10131031
v.name, v.args, (ngx_int_t) v.start,
10141032
(ngx_int_t) v.duration, (ngx_int_t) v.reset,

0 commit comments

Comments
 (0)