Mercurial > hg > nginx
comparison src/http/modules/ngx_http_mp4_module.c @ 4688:5fedb27c3e36
Mp4: fixed streaming if moov atom is at buffer edge.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 18 Jun 2012 14:02:20 +0000 |
parents | 7f50a4063100 |
children | 9a43b145a8ba |
comparison
equal
deleted
inserted
replaced
4687:7f50a4063100 | 4688:5fedb27c3e36 |
---|---|
1022 | 1022 |
1023 mp4->buffer_size = (size_t) atom_data_size | 1023 mp4->buffer_size = (size_t) atom_data_size |
1024 + NGX_HTTP_MP4_MOOV_BUFFER_EXCESS * no_mdat; | 1024 + NGX_HTTP_MP4_MOOV_BUFFER_EXCESS * no_mdat; |
1025 } | 1025 } |
1026 | 1026 |
1027 if (ngx_http_mp4_read(mp4, atom_data_size) != NGX_OK) { | |
1028 return NGX_ERROR; | |
1029 } | |
1030 | |
1027 mp4->trak.elts = &mp4->traks; | 1031 mp4->trak.elts = &mp4->traks; |
1028 mp4->trak.size = sizeof(ngx_http_mp4_trak_t); | 1032 mp4->trak.size = sizeof(ngx_http_mp4_trak_t); |
1029 mp4->trak.nalloc = 2; | 1033 mp4->trak.nalloc = 2; |
1030 mp4->trak.pool = mp4->request->pool; | 1034 mp4->trak.pool = mp4->request->pool; |
1031 | 1035 |
1041 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom done"); | 1045 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom done"); |
1042 | 1046 |
1043 if (no_mdat) { | 1047 if (no_mdat) { |
1044 mp4->buffer_start = mp4->buffer_pos; | 1048 mp4->buffer_start = mp4->buffer_pos; |
1045 mp4->buffer_size = NGX_HTTP_MP4_MOOV_BUFFER_EXCESS; | 1049 mp4->buffer_size = NGX_HTTP_MP4_MOOV_BUFFER_EXCESS; |
1050 | |
1051 if (mp4->buffer_start + mp4->buffer_size > mp4->buffer_end) { | |
1052 mp4->buffer = NULL; | |
1053 mp4->buffer_pos = NULL; | |
1054 mp4->buffer_end = NULL; | |
1055 } | |
1046 | 1056 |
1047 } else { | 1057 } else { |
1048 /* skip atoms after moov atom */ | 1058 /* skip atoms after moov atom */ |
1049 mp4->offset = mp4->end; | 1059 mp4->offset = mp4->end; |
1050 } | 1060 } |