From 208ae228fa129041dc6671dcc45c025a11bf2cc6 Mon Sep 17 00:00:00 2001 From: Swaraj Hota Date: Sat, 6 Apr 2019 15:53:43 +0200 Subject: [PATCH] lavf/flvdec: added support for KUX container Fixes ticket #4519. The metadata starting at 0xe00004 is encrypted with the password "meta" but zlib does not support decryption, so no kux metadata is read. --- Changelog | 1 + libavformat/allformats.c | 1 + libavformat/flvdec.c | 38 ++++++++++++++++++++++++++++++++++++++ libavformat/version.h | 4 ++-- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index cd4ed54f2c..8c866cd0c2 100644 --- a/Changelog +++ b/Changelog @@ -21,6 +21,7 @@ version : - Support decoding of HEVC 4:4:4 content in nvdec and cuviddec - removed libndi-newtek - agm decoder +- KUX demuxer version 4.1: diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 73d69cda99..d316a0529a 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -210,6 +210,7 @@ extern AVInputFormat ff_ivr_demuxer; extern AVInputFormat ff_jacosub_demuxer; extern AVOutputFormat ff_jacosub_muxer; extern AVInputFormat ff_jv_demuxer; +extern AVInputFormat ff_kux_demuxer; extern AVOutputFormat ff_latm_muxer; extern AVInputFormat ff_lmlm4_demuxer; extern AVInputFormat ff_loas_demuxer; diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 445d58d8f7..b531a39adc 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -113,6 +113,20 @@ static int live_flv_probe(const AVProbeData *p) return probe(p, 1); } +static int kux_probe(const AVProbeData *p) +{ + const uint8_t *d = p->buf; + + if (d[0] == 'K' && + d[1] == 'D' && + d[2] == 'K' && + d[3] == 0 && + d[4] == 0) { + return AVPROBE_SCORE_EXTENSION + 1; + } + return 0; +} + static void add_keyframes_index(AVFormatContext *s) { FLVContext *flv = s->priv_data; @@ -738,6 +752,10 @@ static int flv_read_header(AVFormatContext *s) int offset; int pre_tag_size = 0; + /* Actual FLV data at 0xe40000 in KUX file */ + if(!strcmp(s->iformat->name, "kux")) + avio_skip(s->pb, 0xe40000); + avio_skip(s->pb, 4); flags = avio_r8(s->pb); @@ -1386,3 +1404,23 @@ AVInputFormat ff_live_flv_demuxer = { .priv_class = &live_flv_class, .flags = AVFMT_TS_DISCONT }; + +static const AVClass kux_class = { + .class_name = "kuxdec", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +AVInputFormat ff_kux_demuxer = { + .name = "kux", + .long_name = NULL_IF_CONFIG_SMALL("KUX (YouKu)"), + .priv_data_size = sizeof(FLVContext), + .read_probe = kux_probe, + .read_header = flv_read_header, + .read_packet = flv_read_packet, + .read_seek = flv_read_seek, + .read_close = flv_read_close, + .extensions = "kux", + .priv_class = &kux_class, +}; diff --git a/libavformat/version.h b/libavformat/version.h index 69d3f691f0..495a6ee8e1 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,8 +32,8 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 26 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MINOR 27 +#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \