Message ID | 20220514091756.6255-1-ffmpeg@gyani.pro |
---|---|
State | Accepted |
Commit | 8b64d8d9aa7fede94ab531b7be3f73cd2f3c448c |
Headers | show |
Series | [FFmpeg-devel] avformat/dashdec: accept and relay CENC decryption key | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Gyan Doshi <ffmpeg@gyani.pro> 于2022年5月14日周六 17:18写道: > > Allows to process CENC-encrypted media segments. > Option arg syntax is same as that for option decryption_key in MOV demuxer > --- > doc/demuxers.texi | 11 +++++++++++ > libavformat/dashdec.c | 5 +++++ > 2 files changed, 16 insertions(+) > > diff --git a/doc/demuxers.texi b/doc/demuxers.texi > index 238b8e03a8..c95a9ae594 100644 > --- a/doc/demuxers.texi > +++ b/doc/demuxers.texi > @@ -274,6 +274,17 @@ which streams to actually receive. > Each stream mirrors the @code{id} and @code{bandwidth} properties from the > @code{<Representation>} as metadata keys named "id" and "variant_bitrate" respectively. > > +@subsection Options > + > +This demuxer accepts the following option: > + > +@table @option > + > +@item cenc_decryption_key > +16-byte key, in hex, to decrypt files encrypted using ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). > + > +@end table > + > @section imf > > Interoperable Master Format demuxer. > diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c > index 0b5ff5aeb9..0f66251354 100644 > --- a/libavformat/dashdec.c > +++ b/libavformat/dashdec.c > @@ -150,6 +150,7 @@ typedef struct DASHContext { > char *allowed_extensions; > AVDictionary *avio_opts; > int max_url_size; > + char *cenc_decryption_key; > > /* Flags for init section*/ > int is_init_section_common_video; > @@ -1893,6 +1894,9 @@ static int reopen_demux_for_component(AVFormatContext *s, struct representation > pls->ctx->pb = &pls->pb.pub; > pls->ctx->io_open = nested_io_open; > > + if (c->cenc_decryption_key) > + av_dict_set(&in_fmt_opts, "decryption_key", c->cenc_decryption_key, AV_OPT_FLAG_DECODING_PARAM); > + > // provide additional information from mpd if available > ret = avformat_open_input(&pls->ctx, "", in_fmt, &in_fmt_opts); //pls->init_section->url > av_dict_free(&in_fmt_opts); > @@ -2344,6 +2348,7 @@ static const AVOption dash_options[] = { > OFFSET(allowed_extensions), AV_OPT_TYPE_STRING, > {.str = "aac,m4a,m4s,m4v,mov,mp4,webm,ts"}, > INT_MIN, INT_MAX, FLAGS}, > + { "cenc_decryption_key", "Media decryption key (hex)", OFFSET(cenc_decryption_key), AV_OPT_TYPE_STRING, {.str = NULL}, INT_MIN, INT_MAX, .flags = FLAGS }, > {NULL} > }; > > -- > 2.36.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". LGTM Thanks
On 2022-05-14 04:08 pm, Steven Liu wrote: > Gyan Doshi <ffmpeg@gyani.pro> 于2022年5月14日周六 17:18写道: >> Allows to process CENC-encrypted media segments. >> Option arg syntax is same as that for option decryption_key in MOV demuxer >> --- >> doc/demuxers.texi | 11 +++++++++++ >> libavformat/dashdec.c | 5 +++++ >> 2 files changed, 16 insertions(+) >> >> diff --git a/doc/demuxers.texi b/doc/demuxers.texi >> index 238b8e03a8..c95a9ae594 100644 >> --- a/doc/demuxers.texi >> +++ b/doc/demuxers.texi >> @@ -274,6 +274,17 @@ which streams to actually receive. >> Each stream mirrors the @code{id} and @code{bandwidth} properties from the >> @code{<Representation>} as metadata keys named "id" and "variant_bitrate" respectively. >> >> +@subsection Options >> + >> +This demuxer accepts the following option: >> + >> +@table @option >> + >> +@item cenc_decryption_key >> +16-byte key, in hex, to decrypt files encrypted using ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). >> + >> +@end table >> + >> @section imf >> >> Interoperable Master Format demuxer. >> diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c >> index 0b5ff5aeb9..0f66251354 100644 >> --- a/libavformat/dashdec.c >> +++ b/libavformat/dashdec.c >> @@ -150,6 +150,7 @@ typedef struct DASHContext { >> char *allowed_extensions; >> AVDictionary *avio_opts; >> int max_url_size; >> + char *cenc_decryption_key; >> >> /* Flags for init section*/ >> int is_init_section_common_video; >> @@ -1893,6 +1894,9 @@ static int reopen_demux_for_component(AVFormatContext *s, struct representation >> pls->ctx->pb = &pls->pb.pub; >> pls->ctx->io_open = nested_io_open; >> >> + if (c->cenc_decryption_key) >> + av_dict_set(&in_fmt_opts, "decryption_key", c->cenc_decryption_key, AV_OPT_FLAG_DECODING_PARAM); >> + >> // provide additional information from mpd if available >> ret = avformat_open_input(&pls->ctx, "", in_fmt, &in_fmt_opts); //pls->init_section->url >> av_dict_free(&in_fmt_opts); >> @@ -2344,6 +2348,7 @@ static const AVOption dash_options[] = { >> OFFSET(allowed_extensions), AV_OPT_TYPE_STRING, >> {.str = "aac,m4a,m4s,m4v,mov,mp4,webm,ts"}, >> INT_MIN, INT_MAX, FLAGS}, >> + { "cenc_decryption_key", "Media decryption key (hex)", OFFSET(cenc_decryption_key), AV_OPT_TYPE_STRING, {.str = NULL}, INT_MIN, INT_MAX, .flags = FLAGS }, >> {NULL} >> }; >> >> -- >> 2.36.1 >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > > LGTM Pushed as 8b64d8d9aa7fede94ab531b7be3f73cd2f3c448c Thanks, Gyan
diff --git a/doc/demuxers.texi b/doc/demuxers.texi index 238b8e03a8..c95a9ae594 100644 --- a/doc/demuxers.texi +++ b/doc/demuxers.texi @@ -274,6 +274,17 @@ which streams to actually receive. Each stream mirrors the @code{id} and @code{bandwidth} properties from the @code{<Representation>} as metadata keys named "id" and "variant_bitrate" respectively. +@subsection Options + +This demuxer accepts the following option: + +@table @option + +@item cenc_decryption_key +16-byte key, in hex, to decrypt files encrypted using ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7). + +@end table + @section imf Interoperable Master Format demuxer. diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 0b5ff5aeb9..0f66251354 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -150,6 +150,7 @@ typedef struct DASHContext { char *allowed_extensions; AVDictionary *avio_opts; int max_url_size; + char *cenc_decryption_key; /* Flags for init section*/ int is_init_section_common_video; @@ -1893,6 +1894,9 @@ static int reopen_demux_for_component(AVFormatContext *s, struct representation pls->ctx->pb = &pls->pb.pub; pls->ctx->io_open = nested_io_open; + if (c->cenc_decryption_key) + av_dict_set(&in_fmt_opts, "decryption_key", c->cenc_decryption_key, AV_OPT_FLAG_DECODING_PARAM); + // provide additional information from mpd if available ret = avformat_open_input(&pls->ctx, "", in_fmt, &in_fmt_opts); //pls->init_section->url av_dict_free(&in_fmt_opts); @@ -2344,6 +2348,7 @@ static const AVOption dash_options[] = { OFFSET(allowed_extensions), AV_OPT_TYPE_STRING, {.str = "aac,m4a,m4s,m4v,mov,mp4,webm,ts"}, INT_MIN, INT_MAX, FLAGS}, + { "cenc_decryption_key", "Media decryption key (hex)", OFFSET(cenc_decryption_key), AV_OPT_TYPE_STRING, {.str = NULL}, INT_MIN, INT_MAX, .flags = FLAGS }, {NULL} };