MediaMetaDataRetActivity - getFrameAtTime:videoFrame是一个NULL指针

时间:2012-07-12 20:08:01

标签: android video media-player

我无法使用MediaMetaDataRetActivity显示MP4视频文件。

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 并且屏幕是空白的。

3 个答案:

答案 0 :(得分:4)

尝试使用OPTIONS_CLOSEST_SYNC而不是OPTIONS_CLOSEST。

但是,这将为您提供关键帧而不是确切的帧。

答案 1 :(得分:0)

adhavan.mp4可能正在使用非listed as supported的编解码器。如果是这种情况,请尝试使用更好的视频和/或convert您拥有的视频。

答案 2 :(得分:0)

我遇到了同样的错误。

检查您是否可以通过ExtractMetadata从视频中提取元数据信息。如果没有,则setDataSource()通话可能出现问题,或者视频格式/编解码器格式错误。

此代码适用于我。

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

我必须提供afd.getStartOffset()afd.getLength()

也许它可以帮助你走上正确的轨道。