Merge of r4688, r4689, r4706:
*) Mp4: fixed non-keyframe seeks in some cases (ticket #175). Number of entries in stsc atom was wrong if we've added an entry to split a chunk. Additionally, there is no need to add an entry if we are going to split last chunk in an entry, it's enough to update the entry we already have. Previously new entry was added and old one was left as is, resulting in incorrect entry with zero chunks which might confuse some software. *) Mp4: fixed streaming if moov atom is at buffer edge.
This commit is contained in:
parent
1e7eedc24f
commit
9c9360a7b5
|
@ -1024,6 +1024,10 @@ ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
|
|||
+ NGX_HTTP_MP4_MOOV_BUFFER_EXCESS * no_mdat;
|
||||
}
|
||||
|
||||
if (ngx_http_mp4_read(mp4, (size_t) atom_data_size) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
mp4->trak.elts = &mp4->traks;
|
||||
mp4->trak.size = sizeof(ngx_http_mp4_trak_t);
|
||||
mp4->trak.nalloc = 2;
|
||||
|
@ -1044,6 +1048,12 @@ ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
|
|||
mp4->buffer_start = mp4->buffer_pos;
|
||||
mp4->buffer_size = NGX_HTTP_MP4_MOOV_BUFFER_EXCESS;
|
||||
|
||||
if (mp4->buffer_start + mp4->buffer_size > mp4->buffer_end) {
|
||||
mp4->buffer = NULL;
|
||||
mp4->buffer_pos = NULL;
|
||||
mp4->buffer_end = NULL;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* skip atoms after moov atom */
|
||||
mp4->offset = mp4->end;
|
||||
|
@ -2488,7 +2498,13 @@ found:
|
|||
|
||||
ngx_mp4_set_32value(entry->chunk, 1);
|
||||
|
||||
if (trak->chunk_samples) {
|
||||
if (trak->chunk_samples && next_chunk - trak->start_chunk == 2) {
|
||||
|
||||
/* last chunk in the entry */
|
||||
|
||||
ngx_mp4_set_32value(entry->samples, samples - trak->chunk_samples);
|
||||
|
||||
} else if (trak->chunk_samples) {
|
||||
|
||||
first = &trak->stsc_chunk_entry;
|
||||
ngx_mp4_set_32value(first->chunk, 1);
|
||||
|
@ -2504,6 +2520,7 @@ found:
|
|||
|
||||
ngx_mp4_set_32value(entry->chunk, 2);
|
||||
|
||||
entries++;
|
||||
atom_size += sizeof(ngx_mp4_stsc_entry_t);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue