2012-06-01 4 views
4

Я очень хочу играть в mp4-видео в своем приложении для Android. Я даже написал немного кода для этого:Не могу воспроизвести mp4-видео в приложении для Android

String sourceUrl = "http://tvstream.cn.ru/storage/1kanal/20120530/" 
     + "1kanal-20120530-01-14-00-20120530-03-16-00.mp4"; 

final VideoView videoView = (VideoView) findViewById(R.id.videoView); 
getWindow().setFormat(PixelFormat.TRANSLUCENT); 

final MediaController mediaController = new MediaController(this); 
mediaController.setMediaPlayer(videoView); 
videoView.setMediaController(mediaController); 
videoView.setVideoURI(Uri.parse(sourceUrl)); 

videoView.setOnPreparedListener(new OnPreparedListener() { 

    public void onPrepared(MediaPlayer mp) { 
     videoView.requestFocus(); 
     videoView.start(); 
     mediaController.show(); 
    } 
}); 

Но ничего не работает :(Когда я запускаю мое приложение в эмуляторе (Android 2.3.3) У меня есть странное StackTrace с некоторыми общими кодами ошибок:

Через несколько часов выходных и прибегая к помощи экспериментов я решил попробовать запустить мое приложение на реальном устройстве и смотреть LogCat:

D/test.tv.activity.PlayerActivity(3428): Player source: http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 
D/VideoView(3428): onMeasure() 
I/VideoView(3428):  Setting size: 320x430 
I/Launcher( 260): onWindowFocusChanged(false) 
D/Launcher( 260): setWallpaperDimension() called 
D/Launcher( 260): USE_NON_SCROLLABLE_IMAGE_WALLPAPER is true 
I/ActivityManager( 163): Start proc org.reactivephone for broadcast org.reactivephone/ru.yandex.common.clid.ClidBroadcastReceiver: pid=3448 uid=10073 gids={1015, 3003} 
I/ActivityManager( 163): No longer want com.sec.android.provider.badge (pid 2310): hidden #16 
I/MediaPlayer(3428): uri is:http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 
I/MediaPlayer(3428): path is null 
D/MediaPlayer(3428): Couldn't open file on client side, trying server side 
D/Launcher( 260): It's image wallpaper. suggestDesiredDimensions(-1,-1) 
I/ActivityManager( 163): Displayed test.tv/.activity.PlayerActivity: +943ms 
D/VideoView(3428): onMeasure() 
I/VideoView(3428):  Setting size: 320x430 
W/dalvikvm(3406): threadid=5: spin on suspend #1 threadid=22 (pcf=0) 
W/dalvikvm(3406): threadid=5: spin on suspend resolved in 1154 msec 
W/SearchableInfo( 163): Invalid searchable metadata for org.reactivephone/.ui.RegionForm: Search label must be a resource reference. 
I/ActivityManager( 163): Start proc com.google.android.googlequicksearchbox for broadcast com.google.android.googlequicksearchbox/.SourceUpdateReceiver: pid=3457 uid=10027 gids={3003} 
I/WindowOrientationListener( 163): orientation 295.6932 gives new rotation = 2 
I/OrientationDebug( 163): [pwm] in MyOrientationListener.onOrientationChanged() rotation=3 mFancyRotationAnimation=0 now call mWindowManager.setRotation() 
I/OrientationDebug( 163): [wms] in setRotation() rotation=3 alwaysSendConfiguration=false animFlags=0 
I/OrientationDebug( 163): [wms] in setRotation() now call setRotationUnchecked() 
I/WindowManager( 163): Setting rotation to 3, animFlags=0 
I/ActivityManager( 163): Config changed: { scale=1.0 imsi=250/1 loc=ru_RU touch=3 keys=1/1/2 nav=1/1 orien=2 layout=18 uiMode=17 seq=7} 
D/PhoneApp( 241): updateProximitySensorMode: lock already released. 
I/ActivityThread(3457): Pub com.google.android.googlequicksearchbox.shortcuts: com.google.android.googlequicksearchbox.WebHistoryProvider 
I/ActivityThread(3457): Pub com.google.android.googlequicksearchbox.google: com.google.android.googlequicksearchbox.google.GoogleSuggestionProvider 
I/ActivityManager( 163): No longer want com.sec.android.widgetapp.clockweather.clockwidget (pid 1214): hidden #16 
D/Finsky (3406): [1] 2.run: Loaded library for account: [Y091GklnFtI4Ab1gmLOw-nJkJXQ] 
D/Finsky (3406): [1] 2.run: Finished loading 1 libraries. 
W/dalvikvm(3406): VFY: unable to resolve instance field 78 
D/DfeApi (3406): [1] DfeApiContext.getSmallestScreenWidthDp: smallestScreenWidthDp does not exist, using pre-ics hack. 
E/QCvdec ( 95): Setparameter: unknown param 2130706451 
W/TimedEventQueue( 95): Event 3 was not found in the queue, already cancelled? 
E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. 
W/QCvdec ( 95): ====================================================================== 
W/QCvdec ( 95):     Open Max Statistics         
W/QCvdec ( 95): ====================================================================== 
W/QCvdec ( 95): empty this buffer rate = NaN 
W/QCvdec ( 95): empty this buffer total time = 0 
W/QCvdec ( 95): empty this buffer count = 0 
W/QCvdec ( 95): ====================================================================== 
D/test.tv.activity.PlayerActivity(3428): Player source: http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 
D/VideoView(3428): onMeasure() 
I/VideoView(3428):  Setting size: 480x270 
I/MediaPlayer(3428): uri is:http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 
I/MediaPlayer(3428): path is null 
D/MediaPlayer(3428): Couldn't open file on client side, trying server side 
D/VideoView(3428): onMeasure() 
I/VideoView(3428):  Setting size: 480x270 
D/WifiService( 163): [mPersistState] : On 
D/BatteryService( 163): update start 
D/BatteryService( 163): update start 
D/BatteryService( 163): update start 
E/QCvdec ( 95): Setparameter: unknown param 2130706451 
I/VideoView(3428): start() 
D/WifiService( 163): [mPersistState] : On 
D/WifiService( 163): [mPersistState] : On 
D/WifiWatchdogService( 163): (android.server.ServerThread) wntk (1c:af:f7:2e:7f:c8) does not require the watchdog 
E/QCvdec ( 95): Unsupported profile, level, or widht, height 
E/QCvdec ( 95): Unsupported clip 
E/QCvdec ( 95): Unsupported profile, level, or widht, height 
E/QCvdec ( 95): Unsupported clip 
E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. 
E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. 
E/QCvdec ( 95): Empty this buffer in Invalid State 
E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) 
E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) 
E/OMXCodec( 95): read : mState[9] is wrong... 
E/MediaPlayer(3428): error (1, -2147483648) 
E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) 
E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. 
D/VideoView(3428): onMeasure() 
I/VideoView(3428):  Setting size: 335x270 
I/VideoView(3428): start() 
E/MediaPlayer(3428): start called in state 0 
E/MediaPlayer(3428): error (-38, 0) 
E/MediaPlayer(3428): Error (1,-2147483648) 
D/VideoView(3428): Error: 1,-2147483648 
E/MediaPlayer(3428): Error (-38,0) 
D/VideoView(3428): Error: -38,0 
D/PowerManagerService( 163): reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=false 
I/PowerManagerService( 163): Ulight 1->3|0 
W/InputManagerService( 163): Window already focused, ignoring focus gain of: [email protected] 
I/PowerManagerService( 163): Light Animator Finished curIntValue=141 
D/Finsky (3406): [1] 5.onFinished: Installation state replication succeeded. 
D/BatteryService( 163): update start 
D/BatteryService( 163): update start 
D/BatteryService( 163): update start 

Я пытаюсь найти что-то о «OMX.qcom.video.decoder.avc] ERROR (0x8000100a , 0) ", но не нашел ничего интересного. О" Не удалось открыть файл на стороне клиента, попробовать сервер боковая "проблема stackoverflow имеет много ответов, но никто не помог.

Когда я запускаю это приложение на ICS (в эмуляторе) У меня подобные ошибки:

06-01 10:22:14.674: I/NuCachedSource2(37): ERROR_END_OF_STREAM 
06-01 10:22:15.375: I/OMXCodec(37): [OMX.google.h264.decoder] AVC profile = 100 (High), level = 30 
06-01 10:22:15.384: I/OMXCodec(37): [OMX.google.h264.decoder] video dimensions are 320 x 240 
06-01 10:22:15.384: I/OMXCodec(37): [OMX.google.h264.decoder] Crop rect is 320 x 240 @ (0, 0) 
06-01 10:22:16.253: W/NetworkManagementSocketTagger(89): setKernelCountSet(10013, 0) failed with errno -2 
06-01 10:22:16.374: I/Launcher(553): setLoadOnResume 
06-01 10:22:16.584: D/MediaPlayer(602): getMetadata 
06-01 10:22:16.614: I/NuCachedSource2(37): new range: offset= 0 
06-01 10:22:16.694: I/ChromiumHTTPDataSource(37): connect to http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 @0 
06-01 10:22:16.834: E/SoftAVC(37): Decoder failed: -2 
06-01 10:22:16.844: E/OMXCodec(37): [OMX.google.h264.decoder] ERROR(0x80001001, -1007) 
06-01 10:22:16.884: D/AudioSink(37): bufferCount (4) is too small and increased to 12 

Как я знаю, Android поддерживает воспроизведение видео декодируется с h264 (http://developer.android. ком/руководство/приложение/медиа-formats.html). Итак, кто-нибудь может сказать мне, что я делаю неправильно.

ответ

-2

Классы VideoView не позволяют воспроизводить видео в формате MP4. Пройдите через this link for Android Media Formats. Попробуйте проверить видео с Daroon Player

+0

mp4 указан в ссылке вы предоставили. – yorkw

+0

Какая версия SDK предназначена для разработки? –

7

Вероятно файл использует неподдерживаемый профиль, обратите внимание, что официальный media formats страница только перечисляет Baseline Profile, как поддерживается H.264 AVC.

Попробуйте перекодировать видео с указанием Baseline Profile, как предложено в this stackoverflow question, то есть, если ваш контейнер MP4 пробег:

ffmpeg -i yourfile.mp4 -c:v libx264 -profile:v baseline -level 1 yourfile_BaselineProfile.mp4 

Если это работает, это не проблема в вашем коде, вы просто должны использовать поддерживаемые форматы.

0

Попробуйте

File clip=new File(Environment.getExternalStorageDirectory(), 
         "test.mp4"); 

    if (clip.exists()) { 
     video=(VideoView)findViewById(R.id.video); 
     video.setVideoPath(clip.getAbsolutePath()); 

     ctlr=new MediaController(this); 
     ctlr.setMediaPlayer(video); 
     video.setMediaController(ctlr); 
     video.requestFocus(); 
     video.start(); 
Смежные вопросы