2012-07-12 4 views
-1

MediaMetaDataRetActivity을 사용하여 MP4 비디오 파일을 표시하는 데 문제가 있습니다.MediaMetaDataRetActivity - getFrameAtTime : videoFrame이 NULL 포인터입니다.

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   
    filepath = Environment.getExternalStorageDirectory().getPath()+"/adhavan.mp4"; 
     System.out.println("imagepath"+filepath); 
MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
     retriever.setDataSource(filepath); 
bitmap = retriever.getFrameAtTime(10000 ,MediaMetadataRetriever.OPTION_CLOSEST); 
System.out.println("BITMAP"+bitmap); 
     Log.d(TAG, "METADATA_KEY_ALBUM: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); 
     Log.d(TAG, "METADATA_KEY_ALBUMARTIST: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST)); 
     Log.d(TAG, "METADATA_KEY_ARTIST: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); 
     Log.d(TAG, "METADATA_KEY_AUTHOR: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)); 
     Log.d(TAG, "METADATA_KEY_COMPILATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER)); 
     Log.d(TAG, "METADATA_KEY_COMPILATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPILATION)); 
     Log.d(TAG, "METADATA_KEY_DATE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)); 
     Log.d(TAG, "METADATA_KEY_DISC_NUMBER: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER)); 
     Log.d(TAG, "METADATA_KEY_DURATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); 
     Log.d(TAG, "METADATA_KEY_GENRE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE)); 
     Log.d(TAG, "METADATA_KEY_MIMETYPE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)); 
     Log.d(TAG, "METADATA_KEY_NUM_TRACKS: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS)); 
     Log.d(TAG, "METADATA_KEY_TITLE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)); 
     Log.d(TAG, "METADATA_KEY_WRITER: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER)); 
     Log.d(TAG, "METADATA_KEY_YEAR: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)); 
      imageView = (ImageView)findViewById(R.id.imageview); 
     imageView.setImageBitmap(bitmap); 

오류는 getFrameAtTime: videoFrame is NULL pointer입니다. 이것은 내가 들어간 Logcat을 실행하는 동안 화면에 아무 것도 나타나지 않습니다.

+0

올바른 비디오 파일을 가져와야합니다. 즉, 좋은 품질의 파일로 만들어야합니다. – Jeevanandhan

+0

내가 묻는 것에 혼란스러워합니다. – BlackHatSamurai

+0

BlaineOmega 나는 대답을 얻었다. 나를 도우려는 것에 대해 얼마나 감사하다. – Jeevanandhan

답변

0

adhavan.mp4listed as supported이 아닌 코덱을 사용 중일 수 있습니다. 이 경우 더 나은 비디오 및/또는 convert으로 테스트하십시오.

+0

실제로, 나는 Hanika에게 대답을 찾았습니다. adhavan.mp4 비디오는 지원하지 않습니다. 그래서 다른 비디오를 바꿔서 완벽하게 이미지를 얻었습니다. 하니카에게 감사합니다. – Jeevanandhan

4

OPTIONS_CLOSEST 대신 OPTIONS_CLOSEST_SYNC를 사용해보세요.

정확한 프레임 대신 키 프레임을 제공합니다.

+0

그건 내 실수 였고 위의 설명에서도 언급했습니다 ... 감사합니다 ... – Jeevanandhan

0

동일한 오류가 발생했습니다.

ExtractMetadata을 통해 비디오에서 메타 데이터 정보를 추출 할 수 있는지 확인하십시오. 그렇지 않은 경우 setDataSource() 호출에 문제가 있거나 비디오의 형식/코덱이 잘못되었습니다.

이 코드는 저에게 적합합니다.

AssetFileDescriptor afd=getAssets().openFd("t.mp4"); 
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

나는 afd.getStartOffset()

어쩌면 당신이 올바른 궤도에 얻을 수 있도록 도와 afd.getLength()를 제공했다.

+0

그건 내 실수 였고 위의 의견도 ... 고마워 ... – Jeevanandhan

관련 문제