2011-09-25 3 views
0

내 VideoViewer에서 MKV 파일을 재생하지 않습니다. .3gp 비디오 파일을 테스트했는데 제대로 작동하지만 MKV 파일은 작동하지 않습니다. 비디오가 나타나지 않으며, 버퍼링이나 아무 것도 나타나지 않습니다. 화면은 잘 보이지만 내가 말했듯이 비디오 플레이어는 보이지 않거나 거기에 있지 않습니다. 말할 수 없습니다. 출력에서는의 라인을 따라 뭔가 말할 것이다 :Android VideoView에서 MKV 파일을 재생할 수 없습니다.

connect to ........ 
new range: ........ 

을하고 MKV가 얼마나 큰지에 따라 반복을 반복합니다. 그런 다음 응용 프로그램이 응답을 중지 시키거나 다음 출력을 제공합니다.

출력은 다음과 같습니다

09-25 07:54:40.767: INFO/ActivityManager(68): Starting: Intent { cmp=com.anime/.VideoPlayer } from pid 336 
09-25 07:54:41.227: DEBUG/MediaPlayer(336): Couldn't open file on client side, trying server side 
09-25 07:54:41.237: INFO/StagefrightPlayer(34): setDataSource('http://pbgl.net/Android/Naruto%20Shippuden/Hun_subtitle_sample1.mkv') 
09-25 07:54:41.237: INFO/NuHTTPDataSource(34): connect to pbgl.net:80/Android/Naruto%20Shippuden/Hun_subtitle_sample1.mkv @0 
09-25 07:54:41.767: INFO/ActivityManager(68): Displayed com.anime/.VideoPlayer: +968ms 
09-25 07:54:43.017: INFO/NuCachedSource2(34): new range: offset= 821676 
09-25 07:54:43.017: INFO/NuHTTPDataSource(34): connect to pbgl.net:80/Android/Naruto%20Shippuden/Hun_subtitle_sample1.mkv @821676 
09-25 07:54:43.954: INFO/NuCachedSource2(34): new range: offset= 959025 
09-25 07:54:43.954: INFO/NuHTTPDataSource(34): connect to pbgl.net:80/Android/Naruto%20Shippuden/Hun_subtitle_sample1.mkv @959025 
09-25 07:54:45.564: INFO/NuCachedSource2(34): new range: offset= 1173410 
09-25 07:54:45.564: INFO/NuHTTPDataSource(34): connect to pbgl.net:80/Android/Naruto%20Shippuden/Hun_subtitle_sample1.mkv @1173410 
09-25 07:54:46.126: INFO/NuCachedSource2(34): ERROR_END_OF_STREAM 
09-25 07:54:46.266: INFO/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
09-25 07:54:46.266: INFO/DEBUG(31): Build fingerprint: 'generic/sdk/generic:2.3.3/GRI34/101070:eng/test-keys' 
09-25 07:54:46.266: INFO/DEBUG(31): pid: 34, tid: 345 >>> /system/bin/mediaserver <<< 
09-25 07:54:46.266: INFO/DEBUG(31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000024 
09-25 07:54:46.266: INFO/DEBUG(31): r0 00000000 r1 00000008 r2 00000003 r3 000151c0 
09-25 07:54:46.266: INFO/DEBUG(31): r4 0000fac0 r5 00014fb0 r6 00000000 r7 a30638bc 
09-25 07:54:46.266: INFO/DEBUG(31): r8 a2f60ab1 r9 0000f444 10 00100000 fp 00000001 
09-25 07:54:46.266: INFO/DEBUG(31): ip afc01100 sp 40606d58 lr a2ff0fd3 pc a2ff2b78 cpsr 40000030 
09-25 07:54:46.426: INFO/DEBUG(31):   #00 pc 000f2b78 /system/lib/libstagefright.so 
09-25 07:54:46.426: INFO/DEBUG(31):   #01 pc 000f0fce /system/lib/libstagefright.so 
09-25 07:54:46.426: INFO/DEBUG(31):   #02 pc 000f140e /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #03 pc 00054624 /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #04 pc 00046290 /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #05 pc 00047f08 /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #06 pc 00044ea8 /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #07 pc 00060a7e /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #08 pc 00060acc /system/lib/libstagefright.so 
09-25 07:54:46.436: INFO/DEBUG(31):   #09 pc 00011a7c /system/lib/libc.so 
09-25 07:54:46.446: INFO/DEBUG(31):   #10 pc 00011640 /system/lib/libc.so 
09-25 07:54:46.446: INFO/DEBUG(31): code around pc: 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff2b58 685cd104 d101428c e0031c18 42933318 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff2b68 2000d1f4 46c0bd70 47706a00 47706b00 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff2b78 47706a40 600b6ac3 47706a80 47702001 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff2b88 47702000 47702000 47702000 47702000 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff2b98 6d591c03 47706d00 6dd91c03 47706d80 
09-25 07:54:46.446: INFO/DEBUG(31): code around lr: 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff0fb0 fd4cf001 1c2b4f76 447f3308 90079306 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff0fc0 e0cb2300 98079904 fe26f001 f0011c06 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff0fd0 a909fdd3 1c309003 fdd0f001 201c9005 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff0fe0 ebb0f74d f7631c04 9408ff6f d0032c00 
09-25 07:54:46.446: INFO/DEBUG(31): a2ff0ff0 a9081c20 eba0f74d f0011c30 2801fd97 
09-25 07:54:46.446: INFO/DEBUG(31): stack: 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d18 000154c8 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d1c afc009cf /system/lib/libstdc++.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d20 000154c8 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d24 a8114ba7 /system/lib/libutils.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d28 0000fac0 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d2c 000154c8 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d30 a3060eb0 /system/lib/libstagefright.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d34 a8114ca9 /system/lib/libutils.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d38 00000002 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d3c 40606d78 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d40 00014fb0 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d44 000154f0 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d48 a30638bc /system/lib/libstagefright.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d4c a2f42a4d /system/lib/libstagefright.so 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d50 df002777 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d54 e3a070ad 
09-25 07:54:46.446: INFO/DEBUG(31): #01 40606d58 00000004 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d5c 00000000 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d60 00000004 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d64 000152b0 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d68 00000002 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d6c 00000000 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d70 00014fb8 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d74 00015198 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d78 0000fac0 [heap] 
09-25 07:54:46.446: INFO/DEBUG(31):  40606d7c 00000000 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d80 000152f0 [heap] 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d84 40606da0 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d88 00014fb0 [heap] 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d8c 00000000 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d90 40606e74 
09-25 07:54:46.457: INFO/DEBUG(31):  40606d94 a2ff1413 /system/lib/libstagefright.so 
09-25 07:54:47.646: WARN/MediaMetadataRetriever(260): MediaMetadataRetriever server died! 
09-25 07:54:47.646: WARN/AudioSystem(124): AudioFlinger server died! 
09-25 07:54:47.646: WARN/AudioSystem(124): AudioPolicyService server died! 
09-25 07:54:47.646: WARN/AudioSystem(336): AudioFlinger server died! 
09-25 07:54:47.646: WARN/IMediaDeathNotifier(336): media server died 
09-25 07:54:47.646: ERROR/MediaPlayer(336): error (100, 0) 
09-25 07:54:47.646: ERROR/MediaPlayer(336): Error (100,0) 
09-25 07:54:47.646: DEBUG/VideoView(336): Error: 100,0 
09-25 07:54:47.666: WARN/AudioSystem(68): AudioFlinger server died! 
09-25 07:54:47.666: WARN/AudioSystem(68): AudioPolicyService server died! 
09-25 07:54:47.666: INFO/ServiceManager(28): service 'media.audio_flinger' died 
09-25 07:54:47.666: INFO/ServiceManager(28): service 'media.audio_policy' died 
09-25 07:54:47.666: INFO/ServiceManager(28): service 'media.player' died 
09-25 07:54:47.666: INFO/ServiceManager(28): service 'media.camera' died 
09-25 07:54:47.666: INFO/BootReceiver(68): Copying /data/tombstones/tombstone_04 to DropBox (SYSTEM_TOMBSTONE) 
09-25 07:54:49.166: ERROR/AudioService(68): Media server died. 
09-25 07:54:49.166: INFO/ServiceManager(68): Waiting for service media.audio_flinger... 
09-25 07:54:49.977: INFO/(348): ServiceManager: 0xad50 
09-25 07:54:49.977: DEBUG/AudioHardwareInterface(348): setMode(NORMAL) 
09-25 07:54:49.977: INFO/CameraService(348): CameraService started (pid=348) 
09-25 07:54:49.977: INFO/AudioFlinger(348): AudioFlinger's thread 0xc658 ready to run 
09-25 07:54:50.198: ERROR/AudioService(68): Media server started. 
09-25 07:54:50.207: DEBUG/AudioHardwareInterface(348): setMode(NORMAL) 

내 코드 : (아니 주요 활동)

package com.anime; 

import java.io.IOException; 
import java.net.URI; 
import java.net.URL; 
import java.util.ArrayList; 

import android.app.*; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.*; 
import android.text.*; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.*; 
import android.widget.AdapterView.OnItemClickListener; 

public class VideoPlayer extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 

    VideoView vv; 
    Button close; 
    public static String selectedVideo = ""; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.vidplayer); 
     close = (Button) findViewById(R.id.button1); 
     vv = (VideoView) findViewById(R.id.videoView1); 
     playVideo(selectedVideo); 
     View btn1 = findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 
    } 

    public void playVideo(String selected) { 
     setContentView(R.layout.vidplayer); 
     String url = RunApp.videoUrls.get(RunApp.currentShow).get(RunApp.videos.get(RunApp.currentShow).indexOf(selected)).toString(); // your URL here 
     vv = (VideoView) findViewById(R.id.videoView1); 
     try { 
      vv.setVideoURI(Uri.parse(url)); 
      vv.setMediaController(new MediaController(this)); 
      vv.requestFocus(); 
      vv.start(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     System.out.println("ID: " + v.getId()); 
      switch (v.getId()){ 
      case R.id.button1: 
       finish(); 
       break; 
      } 

    } 
} 

답변

2

MKV 안드로이드 아래 supported media 컨테이너 아니다는.

지원되는 비디오 파일 형식 (컨테이너 형식)은 .3gp, .mp4 및 .webm입니다. 지원되는 비디오 코덱에도 제한이 있습니다.

또한 비디오 코덱 형식 (h263, h264, mpeg-4, vp8) 및 컨테이너 형식 (3gp, mp4, webm)은 서로 다른 두 가지입니다. 즉, .mp4 파일이 있어도 Android에서 재생할 수있는 것은 아닙니다. 콘텐츠도 지원되는 코덱으로 인코딩해야합니다.

+0

코덱을 설치하여 MKV를 재생할 수 있다고 생각 했습니까? 나는 커널이 그것을 지원한다는 것을 안다. –

+0

MKV는 코덱이 아닌 컨테이너 형식입니다. –

+0

Erm, 그러면 미디어 플레이어 앱이 MKV 파일을 어떻게 재생합니까? 나는 꽤 이해하지 못한다. – Fritz

0

Android 4.0 이상이므로 MKV 비디오는 here과 같이 지원됩니다. 그러나 @Peter Knego가 말했듯이 비디오 코덱 형식과 컨테이너 형식은 서로 다른 두 가지입니다.

다른 사람들이 이미 here을 지적했기 때문에 Android Media API에 대해 문서화가 잘 안되는 것 같습니다 (또는 최소한 질문 시간이었습니다). 그러나, 사용 팁 this postthis answer에서 나는 두 개의 샘플 비디오에서 모두 정보를 검색 할 수 있었다 :

D/VideoActivity: CODEC: video/mp4v-es 
D/VideoActivity: CONTAINER: video/x-matroska 

D/VideoActivity: CODEC: video/avc 
D/VideoActivity: CONTAINER: video/x-matroska 

나는 생각했지만 : 두 개의 서로 다른 MKV 비디오에서

Uri videoUri = Uri.parse("android.resource://" 
      + getPackageName() + "/" + R.raw.sample_video); 
// Codec Format 
extractor = new MediaExtractor(); 
extractor.setDataSource(this, videoUri, null); 

for (int i = 0; i < extractor.getTrackCount(); i++) { 
    MediaFormat format = extractor.getTrackFormat(i); 
    String mime = format.getString(MediaFormat.KEY_MIME); 
    if (mime.startsWith("video/")) { 
     Log.d(TAG, "CODEC: " + mime); 
     break; 
    } 
} 
// Container Format 
MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(this, videoUri); 

Log.d(TAG, "CONTAINER: " 
     + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)); 

, 나는 다음과 같은 출력을 가지고 지원되지 않는 파일을 처리하는 가장 좋은 방법은 try/catch 블록 및/또는 VideoView.setOnErrorListening (doc & example) 일 수 있으므로 위의 방법을 사용하여 재생하기 전에 자세한 내용을 추출하거나 적어도 뭔가 잘못되었을 때 일어난 일을 기록합니다.

관련 문제