> On Aug 12, 2019, at 7:06 PM, winshining <[email protected]> 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 > [email protected] > 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.
_______________________________________________ nginx-devel mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-devel
