4

test.mp4プロジェクトのres/rawディレクトリにビデオを保存します。私はSurfaceViewそのように宣言しました:

  <SurfaceView android:id="@+id/surface"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
  </SurfaceView>

次に、私のアクティビティのonCreate ()メソッドには、次のものがあります。

private MediaPlayer mp;
private SurfaceView view;
private SurfaceHolder holder;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    view = (SurfaceView) findViewById (R.id.surface);
    holder = view.getHolder();
    holder.setKeepScreenOn (true); 
    mp = MediaPlayer.create(this.getBaseContext (), R.raw.test);
    mp.setDisplay (holder);
    mp.setLooping (true);
    mp.start();
}

ディスプレイを設定しても、ビデオが表示されない理由がわかりません。私は API 7 (2.1.1) で実行しており、オーディオを取得しています。コントロール パネルのない、ビデオのみのタイプのインターフェイスが必要です。私が知る限りVideoView、 は より単純ですがMediaPlayer、コントロール層が組み込まれています。VideoViewまた、リソースで使用する方法がわかりません。私が抱えているこれら 2 つの問題の回避策がある場合、または私の仮定VideoViewが間違っている場合は、教えていただければ幸いです。


更新:私は現在VideoViewクラスを使用しています。自動的に UI コントロール パネルが表示されるという私の想定は、本当に間違っていました。それでも、クラスをres/raw介して保存されたビデオを再生できませんでした。MediaPlayer電話をかけたりオーディオを再生したりすると常に失敗しますprepare ()が、ビデオは再生されません。このため、私の質問はまだ残っています。

私が VideoView をどのように使用したかについて誰かが私の質問に出くわした場合は、res/raw. 次のスニペットは、レイアウト ファイルにVideoViewの ID を持つ があることを前提としています。viewmain.xml

public class generalActivity extends Activity {
    @Override
    public void onCreate (Bundle icicle) {
        super.onCreate (icicle);
        this.setContent (R.layout.main);

        // You know the that view is an instance of VideoView, so cast it as such
        VideoView v = (VideoView) this.findViewById (R.id.view);

        // This is the name of the video WITHOUT the file extension.
        // In this example, the name of the video is 'test.mp4'
        String videoName = "test"

        // You build the URI to your video here
        StringBuilder uriPathBuilder = new StringBuilder ();
        uriPathBuilder.append ("android.resource://");
        uriPathBuilder.append (this.getPackageName ());
        uriPathBuilder.append (File.separator);
        uriPathBuilder.append ("raw");
        uriPathBuilder.append (File.separator);
        uriPathBuilder.append (videoName);
        Uri uri = Uri.parse (uriPathBuilder.toString ());

        view.setVideoURI (uri);
        view.start ();
    }
}

URIパスを取得するために参照として使用したリンクは次のとおりです:参照リンク

res/rawMediaPlayer を使用してビデオを再生できるかどうかを尋ねたので、これを開いたままにしますVideoView。を使用して思い通りに動作させたVideoViewとしても、私の知る限り、できることとできないMediaPlayerことVideoViewがあります。私が間違っている可能性もありますが、ビデオを表示するだけで高度なものは必要ない場合は、VideoView十分だと確信しています。

ああ、そしてすべての助けをしてくれた@Raviに感謝します。

4

2 に答える 2

3

MediaPlayer の代わりにVideoViewを使用する方が良いと思います。これは、プレーヤー、サーフェス、およびホルダーをラップするためです。VideoView でビデオが表示されない場合、Android でビデオ ファイルを再生できない可能性があります。

于 2011-08-24T06:05:21.887 に答える
0

setDisplayサーフェスの作成時に APIを呼び出す必要があります。

を実装し、SurfaceHolder.Callbackバッファをプッシュするサーフェスのタイプを設定しますsetType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)

setDataSourceまた、どこでAPIを呼び出していますか?

いつでもVideoView.javaを見て、メディア プレーヤーがどのように実装されているかを確認できます :)

于 2011-08-24T07:59:26.637 に答える