|
|
|
@@ -885,10 +885,14 @@ skip: |
|
|
|
if (s->pb->seekable && (!s->duration || s->duration == AV_NOPTS_VALUE) && !flv->searched_for_end) { |
|
|
|
int size; |
|
|
|
const int64_t pos = avio_tell(s->pb); |
|
|
|
// Read the last 4 bytes of the file, this should be the size of the |
|
|
|
// previous FLV tag. Use the timestamp of its payload as duration. |
|
|
|
int64_t fsize = avio_size(s->pb); |
|
|
|
retry_duration: |
|
|
|
avio_seek(s->pb, fsize - 4, SEEK_SET); |
|
|
|
size = avio_rb32(s->pb); |
|
|
|
// Seek to the start of the last FLV tag at position (fsize - 4 - size) |
|
|
|
// but skip the byte indicating the type. |
|
|
|
avio_seek(s->pb, fsize - 3 - size, SEEK_SET); |
|
|
|
if (size == avio_rb24(s->pb) + 11) { |
|
|
|
uint32_t ts = avio_rb24(s->pb); |
|
|
|
|