我在另一個問題中詢問(http://stackoverflow.com/questions/8012494/sorry-this-video-cannot-be-played-streaming-mp4-to-android/8012874#8012874)使用VideoView在Android中進行視頻播放。顯然,問題在於我的視頻編碼方式,因爲使用我的代碼播放另一個視頻(網絡上的512Kb mp4)正確播放。由於視頻是由我的最終用戶上傳到網站的,因此我沒有對視頻本身的任何控制權,但是我可以控制對這些視頻進行重新編碼。我使用ffmpeg
將它們重新編碼爲標準MP4(H.264 + AAC)格式,並將它們縮放到相同尺寸(320x240)。使用ffmpeg進行視頻重新編碼
這裏有一個視頻的ffmpeg的信息,不會玩:
sh-3.2$ ffmpeg -i video.bad.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
built on Nov 5 2010 09:34:37 with gcc 4.3.2
configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
libavutil 50.32. 6/50.32. 6
libavcore 0.12. 0/0.12. 0
libavcodec 52.94. 3/52.94. 3
libavformat 52.84. 0/52.84. 0
libavdevice 52. 2. 2/52. 2. 2
libavfilter 1.56. 0/1.56. 0
libswscale 0.12. 0/0.12. 0
libpostproc 51. 2. 0/51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.bad.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf52.84.0
Duration: 00:00:45.93, start: 0.000000, bitrate: 591 kb/s
Stream #0.0(und): Video: h264, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 535 kb/s, 15 fps, 15 tbr, 15 tbn, 30 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 51 kb/s
及這裏的正常播放視頻的ffmpeg的信息:
sh-3.2$ ffmpeg -i video.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
built on Nov 5 2010 09:34:37 with gcc 4.3.2
configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
libavutil 50.32. 6/50.32. 6
libavcore 0.12. 0/0.12. 0
libavcodec 52.94. 3/52.94. 3
libavformat 52.84. 0/52.84. 0
libavdevice 52. 2. 2/52. 2. 2
libavfilter 1.56. 0/1.56. 0
libswscale 0.12. 0/0.12. 0
libpostproc 51. 2. 0/51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: mp41
title : crazytown - http://www.archive.org/details/Cartoon-Crazytown
encoder : Lavf51.10.0
Duration: 00:07:50.40, start: 0.000000, bitrate: 578 kb/s
Stream #0.0(und): Video: h264, yuv420p, 320x240, 510 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 63 kb/s
我有兩個問題在這裏,實際上。首先,我的「壞」視頻中的哪些細節確實不像android?其次,我應該使用哪些參數與ffmpeg重新編碼我的視頻?由於目前我用這個:
ffmpeg -i $input_video_file -y -s 320x240 -vcodec libx264 -vpre medium -acodec libfaac -b 510K -ar 48000 -aspect 4:3 $tmpfile.mp4
qt-faststart $tmpfile.mp4 $output_video_file.mp4
但是,這會產生一個視頻,這不是在Android上播放。任何幫助是極大的讚賞。
嗨,Aleks,我可以問你,你是如何成功在Android中運行FFmpeg命令的?這對我很重要。謝謝。 – iSun
@iSun我不在android中運行命令。 FFmpeg在我的網絡服務器上運行,然後通過android設備檢索視頻。 –
啊哈,你知道在android中運行命令的方式嗎? – iSun