0

getFrameAtTime()クラスのメソッドを使用MediaMetadataRetrieverして、ビデオ(mp4)の特定の時間にあるフレームを取得しています。これは、ビデオの解像度が 480 x 270 などの低解像度の場合は正常に機能します。しかし、同じビデオの HD バージョン (1280 x 720) を使用すると、エラーが発生します。抜け道はありますか?

ログキャット:

06-11 08:24:45.714: D/dalvikvm(511): GC_EXTERNAL_ALLOC が 41K を解放、53% が 2550K/5379K を解放、外部 1625K/2137K、一時停止 120ms

06-11 08:24:46.974: E/MediaMetadataRetrieverJNI(511): getFrameAtTime: videoFrame は NULL ポインターです

コードはこれです:

package com.asin.amit;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;

import android.media.MediaMetadataRetriever;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class AsinActivity extends Activity {
/** Called when the activity is first created. */
private MediaMetadataRetriever mediam;
private Bitmap bmp;
private int g;

private ImageView myImageView;
private TextView tv ;

@Override


public void onCreate(Bundle savedInstanceState) {


    try {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mediam = new MediaMetadataRetriever();
        String str= "/sdcard/DCIM/wdc.mp4";
        mediam.setDataSource(str);

    } catch (Exception e) {
        // handle any errors
        Log.e("HelloWorld", "1", e);  // log the error
        // Also let the user know something went wrong
        Toast.makeText(
                getApplicationContext(),
                e.getClass().getName() + " " + e.getMessage(),
                Toast.LENGTH_LONG).show();
    }

    try {
        bmp=mediam.getFrameAtTime();


    } catch (Exception e) {
        // handle any errors
        Log.e("HelloWorld", "2", e);  // log the error
        // Also let the user know something went wrong
        Toast.makeText(
                getApplicationContext(),
                e.getClass().getName() + " " + e.getMessage(),
                Toast.LENGTH_LONG).show();
    }



}

}

4

1 に答える 1

0

それは私の間違いでした。インターネットからダウンロードしたビデオを使用していました。ただし、モバイルで撮影したビデオを使用する場合は機能します。

于 2012-07-03T23:33:44.083 に答える