What i am trying to do is convert video into mp4 format that will play in Android.
I've gone through http://developer.android.com/guide/appendix/media-formats.html
I am setting the following options
-vcodec libx264 -vprofile baseline -acodec libfaac -ar 44100 -ac 1 -ab 128k
yet I get the error message "Sorry, This Video is not valid for streaming to this device"
I Played the video in android browser using videoJS http://video-js.zencoder.com/oceans-clip.mp4 and it WORKS fine.
I download the video oceans-clip.mp4 and tried to convert using minimalist options
-y -i working.mp4 -vprofile baseline pleasework.mp4
yet I get the same error message.
The following is the FFMPEG info dump of the video files
Working.mp4
Array ( [0] => ffmpeg version N-40229-g24e3f44-syslint Copyright (c) 2000-2012 the FFmpeg developers [1] => built on Apr 29 2012 22:01:41 with gcc 4.1.2 20080704 (Red Hat 4.1.2-52) [2] => configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint [3] => libavutil 51. 48.100 / 51. 48.100 [4] => libavcodec 54. 17.101 / 54. 17.101 [5] => libavformat 54. 3.100 / 54. 3.100 [6] => libavdevice 53. 4.100 / 53. 4.100 [7] => libavfilter 2. 72.100 / 2. 72.100 [8] => libswscale 2. 1.100 / 2. 1.100 [9] => libswresample 0. 11.100 / 0. 11.100 [10] => libpostproc 52. 0.100 / 52. 0.100 [11] => Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'working.mp4': [12] => Metadata: [13] => major_brand : isom [14] => minor_version : 1 [15] => compatible_brands: isomavc1 [16] => creation_time : 2010-05-18 04:24:00 [17] => Duration: 00:00:46.54, start: 0.000000, bitrate: 3342 kb/s [18] => Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x264 [SAR 132:133 DAR 320:133], 3195 kb/s, SAR 127:128 DAR 635:264, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc [19] => Metadata: [20] => creation_time : 2010-05-18 04:24:00 [21] => handler_name : GPAC ISO Video Handler [22] => Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 144 kb/s [23] => Metadata: [24] => creation_time : 2010-05-18 04:24:01 [25] => handler_name : GPAC ISO Audio Handler [26] => At least one output file must be specified )
Not Working.mp4
Array ( [0] => ffmpeg version N-40229-g24e3f44-syslint Copyright (c) 2000-2012 the FFmpeg developers [1] => built on Apr 29 2012 22:01:41 with gcc 4.1.2 20080704 (Red Hat 4.1.2-52) [2] => configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint [3] => libavutil 51. 48.100 / 51. 48.100 [4] => libavcodec 54. 17.101 / 54. 17.101 [5] => libavformat 54. 3.100 / 54. 3.100 [6] => libavdevice 53. 4.100 / 53. 4.100 [7] => libavfilter 2. 72.100 / 2. 72.100 [8] => libswscale 2. 1.100 / 2. 1.100 [9] => libswresample 0. 11.100 / 0. 11.100 [10] => libpostproc 52. 0.100 / 52. 0.100 [11] => Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pleasework.mp4': [12] => Metadata: [13] => major_brand : isom [14] => minor_version : 512 [15] => compatible_brands: isomiso2avc1mp41 [16] => creation_time : 2010-05-18 04:24:00 [17] => encoder : Lavf54.3.100 [18] => Duration: 00:00:46.54, start: 0.000000, bitrate: 1843 kb/s [19] => Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x264 [SAR 127:128 DAR 635:264], 1715 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc [20] => Metadata: [21] => creation_time : 2010-05-18 04:24:00 [22] => handler_name : VideoHandler [23] => Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 124 kb/s [24] => Metadata: [25] => creation_time : 2010-05-18 04:24:00 [26] => handler_name : SoundHandler [27] => At least one output file must be specified )
The metadata looks almost the same yet it doesn't seem to play in android. Any help appreciated.
To integrate FFmpeg in your android application you can use pre-compiled libraries like FFmpeg, which provide multiple predefined multimedia operations(Queries) and which is easy to integrate by adding FFmpeg dependency in app module gradle file and sync project.
FFmpeg can input most container formats natively, including MP4, . ts, MOV, AVI, Y4M, MKV, and many others. This is the output file.
The MP4 created by ffmpeg has the moov header at the tail. That is why you are getting this error message. ffmpeg can put the moov header in front (suitable for streaming).
Simply run:
ffmpeg -i <input> -c:v libx264 -c:a aac -movflags +faststart output.mp4
Also refer to Post processing in ffmpeg to move 'moov atom' in MP4 files (qt-faststart)
libfaac is not supported anymore, You can use this configuration:
ffmpeg -i <input> -s 480x320 -vcodec mpeg4 -acodec aac -strict -2 -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 <output>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With