improved mp4 brands

This commit is contained in:
Roman Arutyunyan 2013-12-01 10:28:21 +04:00
parent 51c80e2179
commit 9e634ae882
3 changed files with 32 additions and 30 deletions

View file

@ -489,8 +489,7 @@ ngx_rtmp_dash_write_init_segments(ngx_rtmp_session_t *s)
b.end = b.start + sizeof(buffer);
b.pos = b.last = b.start;
ngx_rtmp_mp4_write_ftyp(&b, NGX_RTMP_MP4_FILETYPE_INIT,
NGX_RTMP_MP4_VIDEO_TRACK);
ngx_rtmp_mp4_write_ftyp(&b);
ngx_rtmp_mp4_write_moov(s, &b, NGX_RTMP_MP4_VIDEO_TRACK);
rc = ngx_write_fd(fd, b.start, (size_t) (b.last - b.start));
@ -516,8 +515,7 @@ ngx_rtmp_dash_write_init_segments(ngx_rtmp_session_t *s)
b.pos = b.last = b.start;
ngx_rtmp_mp4_write_ftyp(&b, NGX_RTMP_MP4_FILETYPE_INIT,
NGX_RTMP_MP4_AUDIO_TRACK);
ngx_rtmp_mp4_write_ftyp(&b);
ngx_rtmp_mp4_write_moov(s, &b, NGX_RTMP_MP4_AUDIO_TRACK);
rc = ngx_write_fd(fd, b.start, (size_t) (b.last - b.start));
@ -559,9 +557,7 @@ ngx_rtmp_dash_close_fragment(ngx_rtmp_session_t *s, ngx_rtmp_dash_track_t *t)
b.end = buffer + sizeof(buffer);
b.pos = b.last = b.start;
ngx_rtmp_mp4_write_ftyp(&b, NGX_RTMP_MP4_FILETYPE_SEG, t->type == 'v' ?
NGX_RTMP_MP4_VIDEO_TRACK :
NGX_RTMP_MP4_AUDIO_TRACK);
ngx_rtmp_mp4_write_styp(&b);
pos = b.last;
b.last += 44; /* leave room for sidx */

View file

@ -183,40 +183,46 @@ ngx_rtmp_mp4_write_matrix(ngx_buf_t *buf, uint32_t a, uint32_t b, uint32_t c,
ngx_int_t
ngx_rtmp_mp4_write_ftyp(ngx_buf_t *b, ngx_rtmp_mp4_file_type_t ftype,
ngx_rtmp_mp4_track_type_t ttype)
ngx_rtmp_mp4_write_ftyp(ngx_buf_t *b)
{
u_char *pos;
switch (ftype) {
pos = ngx_rtmp_mp4_start_box(b, "ftyp");
case NGX_RTMP_MP4_FILETYPE_INIT:
/* major brand */
ngx_rtmp_mp4_box(b, "iso6");
pos = ngx_rtmp_mp4_start_box(b, "ftyp");
/* minor version */
ngx_rtmp_mp4_field_32(b, 1);
ngx_rtmp_mp4_box(b, "iso5");
ngx_rtmp_mp4_field_32(b, 1);
/* compatible brands */
ngx_rtmp_mp4_box(b, "isom");
ngx_rtmp_mp4_box(b, "iso6");
ngx_rtmp_mp4_box(b, "dash");
if (ttype == NGX_RTMP_MP4_VIDEO_TRACK) {
ngx_rtmp_mp4_box(b, "avc1");
}
ngx_rtmp_mp4_update_box_size(b, pos);
ngx_rtmp_mp4_box(b, "iso5");
ngx_rtmp_mp4_box(b, "dash");
return NGX_OK;
}
break;
default: /* NGX_RTMP_MP4_FILETYPE_SEG */
ngx_int_t
ngx_rtmp_mp4_write_styp(ngx_buf_t *b)
{
u_char *pos;
pos = ngx_rtmp_mp4_start_box(b, "styp");
pos = ngx_rtmp_mp4_start_box(b, "styp");
ngx_rtmp_mp4_box(b, "msdh");
ngx_rtmp_mp4_field_32(b, 0);
ngx_rtmp_mp4_box(b, "msdh");
ngx_rtmp_mp4_box(b, "msix");
/* major brand */
ngx_rtmp_mp4_box(b, "iso6");
break;
}
/* minor version */
ngx_rtmp_mp4_field_32(b, 1);
/* compatible brands */
ngx_rtmp_mp4_box(b, "isom");
ngx_rtmp_mp4_box(b, "iso6");
ngx_rtmp_mp4_box(b, "dash");
ngx_rtmp_mp4_update_box_size(b, pos);

View file

@ -36,8 +36,8 @@ typedef enum {
} ngx_rtmp_mp4_track_type_t;
ngx_int_t ngx_rtmp_mp4_write_ftyp(ngx_buf_t *b, ngx_rtmp_mp4_file_type_t ftype,
ngx_rtmp_mp4_track_type_t ttype);
ngx_int_t ngx_rtmp_mp4_write_ftyp(ngx_buf_t *b);
ngx_int_t ngx_rtmp_mp4_write_styp(ngx_buf_t *b);
ngx_int_t ngx_rtmp_mp4_write_moov(ngx_rtmp_session_t *s, ngx_buf_t *b,
ngx_rtmp_mp4_track_type_t ttype);
ngx_int_t ngx_rtmp_mp4_write_moof(ngx_buf_t *b, uint32_t earliest_pres_time,