On Thu, Jul 16, 2015 at 03:57:26AM +0300, Vesselin Bontchev wrote: > Hi, > > A sample Audible .aax file can be downloaded from the following link, > > https://gitlab.com/vesselin.bontchev/audible-samples/tree/master > > Usage, > > ffmpeg -activation_bytes 62689101 -i Audible_AAX_sample_62689101.aax -vn -c:a > copy -v debug output.mp4 > > Thanks, > Vesselin
> doc/general.texi | 2 > doc/muxers.texi | 7 +++ > libavformat/isom.h | 6 ++ > libavformat/mov.c | 122 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 137 insertions(+) > d6cf740b4d4f4193458dbf1d8f4e1d2375eb4501 > 0001-Add-support-for-Audible-AAX-and-AAX-files.patch > From 933c6d8fd44ff4683e16fbed9d5ca01253fc9f94 Mon Sep 17 00:00:00 2001 > From: Vesselin Bontchev <vesselin.bontc...@yandex.com> > Date: Sat, 11 Jul 2015 18:02:47 +0000 > Subject: [PATCH] Add support for Audible AAX (and AAX+) files > > --- > doc/general.texi | 2 + > doc/muxers.texi | 7 +++ > libavformat/isom.h | 6 +++ > libavformat/mov.c | 122 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 137 insertions(+) > > diff --git a/doc/general.texi b/doc/general.texi > index dc22d90..617be66 100644 > --- a/doc/general.texi > +++ b/doc/general.texi > @@ -226,6 +226,8 @@ library: > @item 4xm @tab @tab X > @tab 4X Technologies format, used in some games. > @item 8088flex TMV @tab @tab X > +@item AAX @tab @tab X > + @tab Audible Enhanced Audio format, used in audiobooks. > @item ACT Voice @tab @tab X > @tab contains G.729 audio > @item Adobe Filmstrip @tab X @tab X > diff --git a/doc/muxers.texi b/doc/muxers.texi > index d75d7de..b5fc598 100644 > --- a/doc/muxers.texi > +++ b/doc/muxers.texi > @@ -667,6 +667,13 @@ point on IIS with this muxer. Example: > ffmpeg -re @var{<normal input/transcoding options>} -movflags > isml+frag_keyframe -f ismv > http://server/publishingpoint.isml/Streams(Encoder1) > @end example > > +@subsection Audible AAX > + > +Audible AAX files are encrypted M4B files, and they can be decrypted by > specifying a 4 byte activation secret. > +@example > +ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4 > +@end example > + > @section mp3 > > The MP3 muxer writes a raw MP3 stream with the following optional features: > diff --git a/libavformat/isom.h b/libavformat/isom.h > index 5d48989..6ea1da1 100644 > --- a/libavformat/isom.h > +++ b/libavformat/isom.h > @@ -198,6 +198,12 @@ typedef struct MOVContext { > MOVFragmentIndex** fragment_index_data; > unsigned fragment_index_count; > int atom_depth; > + unsigned int aax_mode; ///< 'aax' file has been detected > + uint8_t file_key[20]; > + uint8_t file_iv[20]; > + void *activation_bytes; > + int activation_bytes_size; > + struct AVAES *aes_decrypt; > } MOVContext; > > int ff_mp4_read_descr_len(AVIOContext *pb); > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 9d6b2e4..b248eb7 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -37,6 +37,8 @@ > #include "libavutil/dict.h" > #include "libavutil/display.h" > #include "libavutil/opt.h" > +#include "libavutil/aes.h" > +#include "libavutil/sha.h" > #include "libavutil/timecode.h" > #include "libavcodec/ac3tab.h" > #include "avformat.h" > @@ -807,6 +809,116 @@ static int mov_read_mdat(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > return 0; /* now go for moov */ > } > > +#define DRM_BLOB_SIZE 56 > + > +static int mov_read_adrm(MOVContext *c, AVIOContext *pb, MOVAtom atom) > +{ > + // extracted from libAAX_SDK.so and AAXSDKWin.dll files! > + uint8_t fixed_key[] = { 0x77, 0x21, 0x4d, 0x4b, 0x19, 0x6a, 0x87, 0xcd, > + 0x52, 0x00, 0x45, 0xfd, 0x20, 0xa5, 0x1d, > 0x67 }; I think this should not be hardcoded but provided by the user via an AVOption [...] > @@ -4058,6 +4171,10 @@ static int mov_read_close(AVFormatContext *s) > } > av_freep(&mov->fragment_index_data); > > + if (mov->aes_decrypt) { > + av_free(mov->aes_decrypt); > + } the if() is unneeded, and av_freep() should be used [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB During times of universal deceit, telling the truth becomes a revolutionary act. -- George Orwell
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel