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 }