[Patch] flv: add support for time offset

Jianyong Chen balus at foxmail.com
Mon Aug 12 14:01:13 UTC 2019



> On Aug 12, 2019, at 7:06 PM, winshining <winshining at 163.com> wrote:
> 
> Hi, balus
> I think the second parameter of ngx_http_flv_read in ngx_http_flv_read_metadata and ngx_http_flv_read_tags is incorrect, it should be NGX_FLV_TAG_HEADER_SIZE.
> Besides, 'keyframes' is a non-standard object in metadata, there is no description about it in official tech document, you can refer to https://www.adobe.com/devnet/f4v.html <https://www.adobe.com/devnet/f4v.html> for details. Therefore, if a FLV file without the 'keyframes' object in metadata is played, the member 'times' of structure ngx_http_flv_file_t will be NULL, ngx_http_flv_timestamp_to_offset will crash then.
> 
> 
>  
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel


Thanks for reading my code!

The first problem is a little confusing indeed. Notice that
NGX_FLV_HEADER_SIZE == NGX_FLV_TAG_HEADER_SIZE + NGX_FLV_PREV_TAG_SIZE,
and when I read a tag, I actually read tag_header + tag_data + prev_tag_size,
thus NGX_FLV_HEADER_SIZE is just what I need. Anyway, this is my fault, I
should have unified the two macros.

The second probelm has been carefully considered in the code. If there is no
‘keyframes’ object found in metadata, ngx_http_flv_parse_metadata() will return
NGX_DECLINED, which means to send the whole file, and therefore
ngx_http_flv_timestamp_to_offset() won’t be called and thus won’t crash.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20190812/aeaa6279/attachment.html>


More information about the nginx-devel mailing list