[guardian-dev] ffmpeg md5 muxer different outputs on ARM and x86

Nathan of Guardian nathan at guardianproject.info
Fri Nov 15 09:33:06 EST 2013


I am working on a project that using the ffmpeg md5 muxer to ensure that
video captured on an Android phone has not manipulated between the time
it was captured, and when it is received on a remote server. To do this,
we want to use the md5 and framemd5 muxers to hash the actual video
contents, and not the entire file itself.

I've built the exact same version of ffmpeg (0.11.1) for Android (ARM)
and my Linux desktop (x86), but when I run the md5 muxer on the exact
same file (ffmpeg -i foo.mp4 -f md5 -), I receive different md5 hashes.

Logs for both posted below

DESKTOP OUTPUT:
ffmpeg -i VID_20131109_104011.mp4 -f md5 -ffmpeg version 0.11.1
Copyright (c) 2000-2012 the FFmpeg developers
  built on Nov 15 2013 00:10:11 with gcc 4.6.3
  configuration: --target-os=linux --enable-runtime-cpudetect --prefix=
--enable-pic --disable-shared --enable-static --enable-version3
--enable-gpl --disable-doc --enable-yasm --enable-decoders
--enable-encoders --enable-muxers --enable-demuxers --enable-parsers
--enable-protocols --enable-filters --enable-avresample
--enable-libfreetype --disable-indevs --enable-indev=lavfi
--disable-outdevs --enable-hwaccels --enable-ffmpeg --disable-ffplay
--disable-ffprobe --disable-ffserver --disable-network --enable-libx264
--enable-zlib --enable-muxer=md5
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20131109_104011.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2013-11-09 15:40:32
  Duration: 00:00:19.84, start: 0.000000, bitrate: 8208 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 /
0x31637661), yuv420p, 1280x720, 8055 kb/s, SAR 65536:65536 DAR 16:9,
30.29 fps, 30.33 tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, mono,
s16, 96 kb/s
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : SoundHandle
[buffer @ 0x2d02a40] w:1280 h:720 pixfmt:yuv420p tb:1/90000
sar:65536/65536 sws_param:flags=2
[buffersink @ 0x2d02f20] No opaque field provided
Output #0, md5, to 'pipe:':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2013-11-09 15:40:32
    encoder         : Lavf54.6.100
    Stream #0:0(eng): Video: rawvideo (I420 / 0x30323449), yuv420p,
1280x720 [SAR 65536:65536 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 30.33 tbc
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: pcm_s16le, 48000 Hz, mono, s16, 768 kb/s
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : SoundHandle
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> rawvideo)
  Stream #0:1 -> #0:1 (aac -> pcm_s16le)
Press [q] to stop, [?] for help
MD5=3fb1aee08ce60d37b786a1d494f80b45  0kB time=00:00:19.45 bitrate=
0.0kbits/s dup=1 drop=0
frame=  594 fps=106 q=0.0 Lsize=       0kB time=00:00:19.58 bitrate=
0.0kbits/s dup=1 drop=0
video:801900kB audio:1860kB global headers:0kB muxing overhead -99.999996%


ANDROID OUTPUT:

adb shell /data/local/tmp/ffmpeg -i
/sdcard/DCIM/Camera/VID_20131109_104011.mp4 -f md5 -
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Nov 15 2013 00:50:10 with gcc 4.6 20120106 (prerelease)
  configuration: --arch=arm --cpu=cortex-a8 --target-os=linux
--enable-runtime-cpudetect --enable-small
--prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic
--disable-shared --enable-static
--cross-prefix=/home/n8fr8/dev/android/ndk//toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
--sysroot=/home/n8fr8/dev/android/ndk//platforms/android-3/arch-arm
--extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon'
--extra-ldflags=-L../x264 --enable-version3 --enable-gpl --disable-doc
--enable-yasm --enable-decoders --enable-encoders --enable-muxers
--enable-demuxers --enable-parsers --enable-protocols --enable-filters
--enable-avresample --enable-libfreetype --disable-indevs
--enable-indev=lavfi --disable-outdevs --enable-hwaccels --enable-ffmpeg
--disable-ffplay --disable-ffprobe --disable-ffserver --disable-network
--enable-libx264 --enable-zlib --enable-muxer=md5
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'/sdcard/DCIM/Camera/VID_20131109_104011.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2013-11-09 15:40:32
  Duration: 00:00:19.84, start: 0.000000, bitrate: 8208 kb/s
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p,
1280x720, 8055 kb/s, SAR 65536:65536 DAR 16:9, 30.29 fps, 30.33 tbr, 90k
tbn, 180k tbc
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, mono,
s16, 96 kb/s
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : SoundHandle
[buffer @ 0x2427a20] w:1280 h:720 pixfmt:yuv420p tb:1/90000
sar:65536/65536 sws_param:flags=2
[buffersink @ 0x2427bf0] No opaque field provided
Output #0, md5, to 'pipe:':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2013-11-09 15:40:32
    encoder         : Lavf54.6.100
    Stream #0:0(eng): Video: rawvideo (I420 / 0x30323449), yuv420p,
1280x720 [SAR 65536:65536 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 30.33 tbc
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: pcm_s16le, 48000 Hz, mono, s16, 768 kb/s
    Metadata:
      creation_time   : 2013-11-09 15:40:32
      handler_name    : SoundHandle
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> rawvideo)
  Stream #0:1 -> #0:1 (aac -> pcm_s16le)
Press [q] to stop, [?] for help
MD5=ce52a8eefa56a09633428acd1ab62b59  0kB time=00:00:19.13 bitrate=
0.0kbits/s dup=1 drop=0
frame=  594 fps= 28 q=0.0 Lsize=       0kB time=00:00:19.58 bitrate=
0.0kbits/s dup=1 drop=0
video:801900kB audio:1860kB global headers:0kB muxing overhead -99.999996%


More information about the Guardian-dev mailing list