2011-01-02 14 views
1

Abend,Wiedergabe von Videos von Raw-Ordner

Ich habe gerade angefangen Programmierung mit Android und machten ein paar Programme und alles, damit ich noch ein bisschen eine Anfänger bin, aber im Versuch, alles zu verstehen.

Also hier ist mein Problem, ich versuche ein Video zu spielen, die Sache ist, ich habe es funktioniert, wenn ich es von einer URL mit VideoView über das Internet streamen oder wenn ich auf meiner SD-Karte.

Was ich jetzt tun möchte, ist ein Video zu spielen, das ich in meinem res/row-Ordner habe, aber es spielt nur Audio und ich verstehe nicht warum, es gibt keinen Fehler in meinem Logcat soweit wie ich sehen kann, konnte auch mit google nicht wirklich eine lösung gefunden werden, da die meisten der antworten über videoview sind und einfach das video auf ihre sdcard legen.

Jetzt sagte mir jemand, ich hätte setDisplay (SurfaceHolder) verwenden müssen und ich habe das auch ausprobiert, aber ich bekomme immer noch nur Audio.

Ich hoffe, jemand kann mir helfen, eine Lösung für dieses Problem zu finden.

VideoDemo.java

package nl.melvin.videodemo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.media.MediaPlayer; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 


public class videodemo extends Activity { 

    public SurfaceHolder holder; 
    public SurfaceView surfaceView; 


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


     MediaPlayer mp = MediaPlayer.create(this, R.raw.mac); 

     mp.setDisplay(holder); 
     mp.start(); 

     } 

} 

XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <SurfaceView 
     android:id="@+id/surfaceview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    </SurfaceView>> 
</LinearLayout> 

Ich habe Uri.parse auch versucht, aber es sagt, es ist nicht das Video (MP4-Format) abspielen kann.

Antwort

7

Ich hatte das gleiche Problem und konnte immer noch das Video nicht laden (nur der Ton). aber ich habe es wie folgt aus:

getWindow().setFormat(PixelFormat.TRANSLUCENT); 
    videoView = new VideoView(this); 
    videoView.setMediaController(new MediaController(this)); 
    videoView.setVideoURI(Uri.parse("android.resource://pt.beware.smdemo/" + R.raw.video)); 
    videoView.requestFocus(); 
    videoView.start(); 
    setContentView(videoView); 
+0

Es funktionierte perfekt für mich, aber warum haben Sie das Pixelformat auf durchscheinend gesetzt? –

+0

Wieder funktioniert diese Antwort nicht für mich. Ich habe festgestellt, dass eine Nachricht wie Video nicht abgespielt werden kann – Siddharth

0

Verwenden Sie ein VideoView in der XML-Datei anstelle von SurfaceView. VideoView erweitert SurfaceView speziell für die Videoverarbeitung - SurfaceView weiß nicht, wie das geht.

Siehe die Klassenhierarchie für VideoView

Sie sollten dann als den Halter zu bekommen in der Lage ...

mp.setDisplay(surfaceView.getHolder()); 

Auch Ihr Code, den Sie nicht zeigen einen Verweis auf die Zuweisung von Surface in ...

surfaceView = (SurfaceView) findViewById(R.id.surfaceView); 

... und auf Vollständigkeit halber, wenn Sie einen Videoview verwenden dann die Typklasse ändern und Variablennamen in Ihrem Code und auch die Id-Namen in der XM L.

+0

Hat Folgendes getan und hinzugefügt: öffentliche SurfaceView SurfaceView; öffentliche SurfaceHolder SurfaceHolder; Oberflächenansicht = (SurfaceView) findViewById (R.id.VideoView); SurfaceHolder = Oberflächenansicht.getHolder(); öffentliche SurfaceView SurfaceView; öffentliche SurfaceHolder SurfaceHolder; Aber ich bekomme immer noch nur Audio. – SterAllures

0
mp.setDisplay(surfaceView.getHolder()); 

Auch der Code nicht zeigen Sie einen Verweis auf SurfaceView wie bei der Zuordnung:

surfaceView = (SurfaceView) findViewById(R.id.surfaceView); 

und auf Vollständigkeit halber, wenn Sie eine verwenden VideoView Ändern Sie dann den Klassentyp und den Variablennamen in Ihrem Code sowie den ID-Namen im XML-Code.

Verwandte Themen