[FFmpeg-devel] [PATCH] libavformat/movenc: Support encryption of H265 stream in AnnexB format

Вадим Бездушный vadim.bezdush at gmail.com
Tue Jun 29 09:55:55 EEST 2021


Ping.
This patch will allow to encrypt streams, which were produced by
hevc_mp4toannexb or movenc muxer.
Currently, encryption doesn't work for HEVC AnnexB. The resulting mp4 is
not written correctly and can't be played.
The patch is quite small and it contains tests, which will allow
checking encryption before and after.
Feel free to ask any questions.

чт, 17 июн. 2021 г. в 11:32, Вадим Бездушный <vadim.bezdush at gmail.com>:

> Ping.
> This patch will allow to encrypt streams, which were produced by
> hevc_mp4toannexb or movenc muxer.
> Currently, encryption doesn't work for HEVC AnnexB. The resulting mp4 is
> not written correctly and can't be played.
> The patch is quite small and it contains tests, which will allow
> checking encryption before and after.
> Feel free to ask any questions.
>
> пт, 4 июн. 2021 г. в 11:08, Eran Kornblau <eran.kornblau at kaltura.com>:
>
>> >
>> > -----Original Message-----
>> > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
>> ????? ?????????
>> > Sent: Friday, June 4, 2021 9:27 AM
>> > To: ffmpeg-devel at ffmpeg.org
>> > Subject: Re: [FFmpeg-devel] [PATCH] libavformat/movenc: Support
>> encryption of H265 stream in AnnexB format
>> >
>> >
>> > Ping.
>> >
>> > This change is quite simple and should be quick to review. Feel free to
>> ask any questions
>>
>> Looks good to me
>>
>> Eran
>>
>> > пн, 22 мар. 2021 г. в 11:29, Вадим Бездушный <vadim.bezdush at gmail.com>:
>> >
>> > > Ping.
>> > >
>> > > чт, 11 мар. 2021 г. в 10:14, Вадим Бездушный <vadim.bezdush at gmail.com
>> >:
>> > >
>> > >> Ping.
>> > >>
>> > >> вт, 9 мар. 2021 г. в 00:05, Вадим Бездушный <vadim.bezdush at gmail.com
>> >:
>> > >>
>> > >>> Ping.
>> > >>>
>> > >>> This change is quite simple and should be quick to review. Feel
>> free
>> > >>> to ask any questions
>> > >>>
>> > >>> On Mon, 1 Mar 2021, 14:54 Vadym Bezdushnyi,
>> > >>> <vadim.bezdush at gmail.com>
>> > >>> wrote:
>> > >>>
>> > >>>> Add an ability to accept H265 AnnexB stream at encryption similar
>> > >>>> to how its done for H264 AnnexB stream.
>> > >>>>
>> > >>>> Steps to test:
>> > >>>>
>> > >>>> 1. Create h265 test files - mp4 and h265 AnnexB streams:
>> > >>>> ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -c:v
>> > >>>> hevc
>> > >>>> input_h265.mp4
>> > >>>> ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -c:v
>> > >>>> hevc -bsf:v hevc_mp4toannexb input_h265.h265
>> > >>>>
>> > >>>> 2. Encrypt and decrypt files. Put appropriate input file name here:
>> > >>>> input_h265.mp4 or input_h265.h265
>> > >>>> ffmpeg -i input_h265.h265 -vcodec copy -acodec copy
>> > >>>> -encryption_scheme cenc-aes-ctr \  -encryption_key
>> > >>>> 00000000000000000000000000000000 -encryption_kid
>> > >>>> 00000000000000000000000000000000 \
>> > >>>>  encrypted_h265.mp4
>> > >>>> ffplay -i encrypted_h265.mp4  -decryption_key
>> > >>>> 00000000000000000000000000000000
>> > >>>>
>> > >>>> Signed-off-by: Vadym Bezdushnyi <vadim.bezdush at gmail.com>
>> > >>>> ---
>> > >>>>  libavformat/movenc.c | 16 ++++++++++++++--
>> > >>>>  1 file changed, 14 insertions(+), 2 deletions(-)
>> > >>>>
>> > >>>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c index
>> > >>>> 545b0885ae..0433968cd2 100644
>> > >>>> --- a/libavformat/movenc.c
>> > >>>> +++ b/libavformat/movenc.c
>> > >>>> @@ -5685,7 +5685,15 @@ int ff_mov_write_packet(AVFormatContext *s,
>> > >>>> AVPacket *pkt)
>> > >>>>                  return ret;
>> > >>>>              avio_write(pb, reformatted_data, size);
>> > >>>>          } else {
>> > >>>> -            size = ff_hevc_annexb2mp4(pb, pkt->data, pkt->size, 0,
>> > >>>> NULL);
>> > >>>> +            if (trk->cenc.aes_ctr) {
>> > >>>> +                size =
>> ff_mov_cenc_avc_parse_nal_units(&trk->cenc,
>> > >>>> + pb,
>> > >>>> pkt->data, size);
>> > >>>> +                if (size < 0) {
>> > >>>> +                    ret = size;
>> > >>>> +                    goto err;
>> > >>>> +                }
>> > >>>> +            } else {
>> > >>>> +                size = ff_hevc_annexb2mp4(pb, pkt->data,
>> > >>>> + pkt->size, 0,
>> > >>>> NULL);
>> > >>>> +            }
>> > >>>>          }
>> > >>>>      } else if (par->codec_id == AV_CODEC_ID_AV1) {
>> > >>>>          if (trk->hint_track >= 0 && trk->hint_track <
>> > >>>> mov->nb_streams) { @@ -5727,6 +5735,9 @@ int
>> > >>>> ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
>> > >>>>              if (par->codec_id == AV_CODEC_ID_H264 &&
>> > >>>> par->extradata_size > 4) {
>> > >>>>                  int nal_size_length = (par->extradata[4] & 0x3) +
>> 1;
>> > >>>>                  ret = ff_mov_cenc_avc_write_nal_units(s,
>> > >>>> &trk->cenc, nal_size_length, pb, pkt->data, size);
>> > >>>> +            } else if(par->codec_id == AV_CODEC_ID_HEVC &&
>> > >>>> par->extradata_size > 21) {
>> > >>>> +                int nal_size_length = (par->extradata[21] & 0x3)
>> + 1;
>> > >>>> +                ret = ff_mov_cenc_avc_write_nal_units(s,
>> > >>>> + &trk->cenc,
>> > >>>> nal_size_length, pb, pkt->data, size);
>> > >>>>              } else {
>> > >>>>                  ret = ff_mov_cenc_write_packet(&trk->cenc, pb,
>> > >>>> pkt->data, size);
>> > >>>>              }
>> > >>>> @@ -6711,7 +6722,8 @@ static int mov_init(AVFormatContext *s)
>> > >>>>
>> > >>>>          if (mov->encryption_scheme == MOV_ENC_CENC_AES_CTR) {
>> > >>>>              ret = ff_mov_cenc_init(&track->cenc,
>> mov->encryption_key,
>> > >>>> -                track->par->codec_id == AV_CODEC_ID_H264,
>> s->flags &
>> > >>>> AVFMT_FLAG_BITEXACT);
>> > >>>> +                (track->par->codec_id == AV_CODEC_ID_H264 ||
>> > >>>> track->par->codec_id == AV_CODEC_ID_HEVC),
>> > >>>> +                s->flags & AVFMT_FLAG_BITEXACT);
>> > >>>>              if (ret)
>> > >>>>                  return ret;
>> > >>>>          }
>> > >>>> --
>> > >>>> 2.30.0
>> > >>>>
>> > >>>>
>> > _______________________________________________
>> > ffmpeg-devel mailing list
>> > ffmpeg-devel at ffmpeg.org
>> >
>> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fffmpeg.org%2Fmailman%2Flistinfo%2Fffmpeg-devel&data=04%7C01%7C%7C724744e3bfed40c5995508d92725c852%7C0c503748de3f4e2597e26819d53a42b6%7C1%7C1%7C637583865496478909%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=l2rO0HEmDBCJ8RdN3keR0oGE1IZub2TZeN4o%2FdJKcfM%3D&reserved=0
>> >
>> > To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> >
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>
>


More information about the ffmpeg-devel mailing list