7

いくつかの異なる例を試しましたが、表示するビデオを取得できません。音は聞こえますが、ビデオは聞こえません。ビデオフォーマットが間違っているのではないかと思ったので、3gpフォーマットのフィアットコマーシャルをダウンロードしましたが、それでも喜びはありませんでした。私はAndroidSDKでEclipseJavaEEを使用しており、私のアプリはgoogleapiなしで1.5sdk(Apiレベル3)をターゲットにしています。誰かがアンドロイドで再生することが知られているビデオへのリンクを投稿するか、コードに関する私の問題を指摘してください。私は考えられるすべてのことを試しました..準備の有無にかかわらず..異なるレイアウトなど。

これが私のonCreateinアクティビティです

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

this.setContentView(R.layout.video_test);
    SurfaceView v = (SurfaceView) findViewById(R.id.surface_video); 
    SurfaceHolder holder = v.getHolder(); 
 // Set the transparency 
    //getWindow().setFormat(PixelFormat.UNKNOWN); 


    // Set a size for the video screen 
    //holder.addCallback(this); 
    holder.setFixedSize(400,300); 


    MediaPlayer mp = MediaPlayer.create(this, R.raw.fiat); 
    mp.setDisplay(holder);
    //mp.setAudioStreamType(2); 
    try {
        //mp.prepare();
        mp.start();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

彼女はvideo_test.xmlのレイアウトです

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<SurfaceView android:id="@+id/surface_video" 
android:layout_width="250px" 
android:layout_height="250px"> 
</SurfaceView> 
<LinearLayout 
android:orientation="horizontal" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:padding="10dip" 
> 
</LinearLayout> 
</LinearLayout> 

>ブロッククォート

4

6 に答える 6

17

クラスは SurfaceHolder.Callback を実装し、メソッド setDisplay、prepare などを呼び出してから、surfaceCreated に入る必要があります。また、サーフェス ホルダーのタイプを SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS に変更する必要がある場合もあります。このような:

import android.view.SurfaceHolder.Callback;

public class TestActivity extends Activity implements Callback {

// ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...
        mSurfaceView = (SurfaceView)findViewById(R.id.yousurfaceview); 
        holder = mSurfaceView.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mp.setDisplay(holder);
        mp.setDataSource(somesource);
        mp.prepare();
        mp.start();
        // etc...
    } catch (IOException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalStateException e) {
    }

}

// ...
}

OnCreate で試してみると、Surface がまだ作成されていないため、結果として何も得られません...

于 2012-04-04T08:49:07.657 に答える
1

Android ApiDemo サンプル アプリケーション (「Media」の下の例を参照) を見ると、完全な例を取得できます: http://developer.android.com/resources/samples/ApiDemos/index.html

デモで使用するサンプル ムービーについては、YouTube のモバイル サイトのリンクを使用しました。

于 2010-08-11T17:36:29.350 に答える
1

エミュレータを使用している場合、動作しない場合があります。エミュレーターには、Android デバイスで利用できるハードウェア アクセラレーションがありません。たとえば、2.6GHz Core 2 Duo では、ビデオを再生できる場合がありますが、常にではありません。低速のマシンでは、ビデオの再生が機能しません。2.5GHz Core 2 Quad では、常にビデオを再生できます。そうは言っても、私は通常、実際のデバイスでビデオの再生をテストします。

ビデオの再生が生のリソースから機能するかどうかもわかりません。最初に SD カードのファイルからビデオを使用してみることを強くお勧めします。

間違いなく機能するビデオに関しては、ここからの「ドキュメンタリーとあなた」と「孫のための音楽」が MP4 形式で機能することを知っています。

于 2010-02-02T14:00:20.407 に答える
0

特定のビデオ ファイルが特定のプレーヤーで再生されるかどうかは、次の 3 つの要素に依存します。

  • ビデオ コンテナー形式 (ファイルの種類)。
  • ビデオ (および場合によってはオーディオ) ストリームのエンコードのコーデック。コンテナ形式とコーデックの組み合わせに対するプレーヤーのサポート
  • コーデックとプレーヤー/デバイスのサポートは、ほぼ確実に、一貫性のない結果の原因です。(ご存じない場合は、コーデックは基本的に、ファイルにパックされたビットとバイトを動画に変換する方法をシステムに指示する反復可能な数式です (さらに言えば、元に戻すこともできます))
于 2015-09-15T05:39:45.350 に答える
0

私は同じ問題に遭遇しました。XMLレイアウトファイルでSurfaceViewをVideoViewに変更することで修正できました。残りのコードはすべて同じにします。それは私にとってはうまくいきましたが、理由はわかりません。

于 2011-09-14T05:06:45.087 に答える