Domanda

Ho provato diversi esempi diversi, ma non posso ottenere qualsiasi video da visualizzare. audio ascoltate, io, ma non il video. Ho pensato che forse ho appena avuto un formato video errato così ho scaricato una Fiat commerciale in formato 3gp ed ancora nessuna gioia. Sto usando Eclipse Java EE con Android SDK e la mia app obiettivi del 1.5 sdk (Api Livello 3) senza API di Google. Qualcuno potrebbe postare un link ad un video noto a svolgere in Android o punto il mio problema con il codice. Ho provato tutto quello che potevo pensare .. con / senza preparare .. diversi layout ecc

Ecco il mio onCreate nell'attività

/** 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();
    }

il suo è il layout in 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> 

> Blockquote

È stato utile?

Soluzione

Se si sta utilizzando l'emulatore, potrebbe non funzionare. L'emulatore manca l'accelerazione hardware disponibili nei dispositivi Android. Ad esempio, su un 2.6GHz Core 2 Duo, a volte posso ottenere un video per riprodurre, ma non sempre. Su macchine più lente, la riproduzione di video non funziona mai. Su un 2.5GHz Core 2 Quad, ho sempre arrivare la riproduzione di video. Detto questo, io di solito la riproduzione di video di prova su dispositivi reali.

Sono anche incerto se la riproduzione video funziona da risorse prime. Vi incoraggio vivamente di provare a utilizzare un video da un file sulla scheda SD.

Per quanto riguarda i video che sicuramente il lavoro, so che "Documentari e You" e "Musica per i nostri nipoti" da lavoro qui nelle loro forme MP4.

Altri suggerimenti

class è necessario implementare SurfaceHolder.Callback e call metodi SetDisplay, preparano ed ecc solo dopo si ottiene in surfaceCreated. Inoltre potrebbe essere necessario cambiare il tipo di supporto di superficie da SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS. In questo modo:

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) {
    }

}

// ...
}

Se lo provate in OnCreate non hai nulla come risultato, perché la superficie non è ancora creata ...

È possibile ottenere un esempio completo, cercando in l'applicazione di esempio ApiDemo Android (Guarda l'esempio in 'media'): http://developer.android.com/resources/samples/ApiDemos/index.html

Per quanto riguarda un film campione da utilizzare con il demo, ho usato collegamenti al sito mobile di YouTube con successo.

mi sono imbattuto nello stesso problema. Sono stato in grado di risolvere il problema modificando SurfaceView al VideoView nel file di layout XML. Mantenere tutto il resto del codice stesso. Che ha lavorato per me, non so perché.

Questo è un vecchio problema, ma la mia risposta potrebbe aiutare qualcuno.

Per supportare le vecchie versioni di Android è necessario aggiungere questa riga:

videoHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Se un dato file video verrà riprodotto in un determinato giocatore dipende da tre cose:

  • Il formato video contenitore (tipo di file).
  • Il codec video (e potenzialmente audio) flussi codifica; il supporto del lettore per quella combinazione di formato contenitore e codec
  • Il supporto codec e il lettore / dispositivo perché è quasi certamente la causa dei risultati inconsistenti che hai visto. (Un codec, se non si sa, è fondamentalmente una formula matematica ripetibile che indica il sistema come trasformare bit e byte compresso in un file in immagini (in movimento e viceversa, se è per questo))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top