Skip to content

Commit 9431058

Browse files
committed
fixed HLS/MPEG-TS PES header stuffing when adaptation is present
1 parent 47f74f7 commit 9431058

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

hls/ngx_rtmp_mpegts.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ ngx_rtmp_mpegts_write_frame(ngx_file_t *file, ngx_rtmp_mpegts_frame_t *f,
123123
ngx_buf_t *b)
124124
{
125125
ngx_uint_t pes_size, header_size, body_size, in_size, stuff_size, flags;
126-
u_char packet[188], *p;
126+
u_char packet[188], *p, *base;
127127
ngx_int_t first, rc;
128128

129129
ngx_log_debug6(NGX_LOG_DEBUG_HTTP, file->log, 0,
@@ -208,19 +208,24 @@ ngx_rtmp_mpegts_write_frame(ngx_file_t *file, ngx_rtmp_mpegts_frame_t *f,
208208
stuff_size = (body_size - in_size);
209209

210210
if (packet[3] & 0x20) {
211+
212+
/* has adaptation */
213+
214+
base = &packet[5] + packet[4];
215+
p = ngx_movemem(base + stuff_size, base, p - base);
216+
ngx_memset(base, 0xff, stuff_size);
211217
packet[4] += stuff_size;
212-
p = ngx_movemem(&packet[6] + stuff_size, &packet[6], p - &packet[4]);
213-
ngx_memset(&packet[6], 0xff, stuff_size);
214218

215219
} else {
220+
221+
/* no adaptation */
222+
216223
packet[3] |= 0x20;
217-
if (stuff_size == 1) {
218-
p = ngx_movemem(&packet[5], &packet[4], p - &packet[4]);
219-
packet[4] = 0;
220-
} else {
221-
p = ngx_movemem(&packet[4] + stuff_size, &packet[4],
222-
p - &packet[4]);
223-
packet[4] = stuff_size - 1;
224+
p = ngx_movemem(&packet[4] + stuff_size, &packet[4],
225+
p - &packet[4]);
226+
227+
packet[4] = stuff_size - 1;
228+
if (stuff_size >= 2) {
224229
packet[5] = 0;
225230
ngx_memset(&packet[6], 0xff, stuff_size - 2);
226231
}

0 commit comments

Comments
 (0)