2015-02-21 5 views
10

Sto cercando di utilizzare ExoPlayer anziché MediaPlayer perché è un errore comune che MediaPlayer restituisce errato getCurrentPosition() e ho bisogno di un sostituto.ExoPlayer - come riprodurre file mp3 locale

Ma io non riesco a trovare un info da nessuna parte come aprire un file locale attraverso il percorso del file per il file stesso del MediaPlayer .setDataSource(String filepath)

Google non ha alcun esempio e il sito documentazione ufficiale stranamente in crash il mio FireFox browser su entrambi i computer

+0

Quale bug è? Hai un riferimento? – Marcus

+1

https://www.google.com/#newwindow=1&q=android+media+player+getcurrentposition+bug –

risposta

9

L'app demo di ExoPlayer in github può essere modificata per riprodurre file locali. Per fare ciò, modifica il file https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java per aggiungere un nuovo set di video.

public static final Sample[] LOCAL_VIDEOS = new Sample[] { 
    new Sample("Some User friendly name of video 1", 
    "/mnt/sdcard/video1.mp4", DemoUtil.TYPE_OTHER), 
    new Sample("Some User friendly name of video 2", 
    "/mnt/sdcard/video2.mp4", DemoUtil.TYPE_OTHER), 
}; 

Per fare questo, modificare https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java file per aggiungere un nuovo set di esempio.

sampleAdapter.add(new Header("Local Videos")); 
sampleAdapter.addAll((Object[]) Samples.LOCAL_VIDEOS); 
+0

Buona risposta, grazie! Comunque penso che l'uso di 'Environment.getExternalStorageDirectory()' sia un modo più simile ad un anroid. – thomasb

+0

@Srikanth può nuovamente condividere il collegamento – Erum

5

Una modifica minore con il codice di Srikanth Peddibhotla funziona

La stringa di Uri per il file dovrebbe essere "file: ///mnt/sdcard/YourFilename.mp4" invece di "/ mnt/sdcard/yourfilename .mp4" in Samples.java

public static final Sample[] LOCAL_VIDEOS = new Sample[] { 
new Sample("Some User friendly name of video 1", 
"file:///mnt/sdcard/video1.mp4", DemoUtil.TYPE_MP4), 
new Sample("Some User friendly name of video 2", 
"file:///mnt/sdcard/video2.mp4", DemoUtil.TYPE_MP4), 
}; 

Inoltre, aggiungere le seguenti righe per SampleChooserActivity.java

sampleAdapter.add(new Header("Local Videos")); 
sampleAdapter.addAll((Object[]) Samples.LOCAL_VIDEOS); 
0

Google ha cambiato alcuni nome di variabile e definizione di classe in questi giorni! Di seguito differiscono opere per me.

--- a/demo/src/main/java/com/google/android/exoplayer/demo/SampleChooserActivity.java 
+++ b/demo/src/main/java/com/google/android/exoplayer/demo/SampleChooserActivity.java 
@@ -30,6 +28,8 @@ import android.widget.ExpandableListView; 
import android.widget.ExpandableListView.OnChildClickListener; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
@@ -44,7 +44,12 @@ public class SampleChooserActivity extends Activity { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sample_chooser_activity); 
    final List<SampleGroup> sampleGroups = new ArrayList<>(); 
- SampleGroup group = new SampleGroup("YouTube DASH"); 
+ 
+ SampleGroup group = new SampleGroup("test videos"); 
+ group.addAll(Samples.LOCAL_VIDEOS); 
+ sampleGroups.add(group); 
+ 
+ group = new SampleGroup("YouTube DASH"); 
    group.addAll(Samples.YOUTUBE_DASH_MP4); 
    group.addAll(Samples.YOUTUBE_DASH_WEBM); 
    sampleGroups.add(group); 
diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java b/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java 
index 9f58528..9e86f99 100644 
--- a/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java 
+++ b/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java 
@@ -248,6 +248,13 @@ import java.util.Locale; 
     "http://vod.leasewebcdn.com/bbb.flv?ri=1024&rs=150&start=0", Util.TYPE_OTHER), 
    }; 

+ public static final Sample[] LOCAL_VIDEOS = new Sample[] { 
+   new Sample("Some User friendly name of video 1", 
+     "file:///mnt/sdcard/test1.mp4", Util.TYPE_OTHER), 
+   new Sample("Some User friendly name of video 2", 
+     "file:///mnt/sdcard/test2.mp4", Util.TYPE_OTHER), 
+ }; 
+ 
    private Samples() {} 

} 
1

Utilizzando ExoPlayer 2.1, e partendo con il progetto demo, è possibile riprodurre file mp3 dalla cartella assets senza modificare alcun codice Java, semplicemente aggiungendo i file mp3 nella cartella assets e creazione o la modifica di un file json . A partire con il progetto ExoPlayer demo:

  1. Inserire i file mp3 nella cartella demo/assets (con media.exolist.json).

  2. O modificare media.exolist.json o creare un nuovo file, ad esempio my.exolist.json contenente una o più voci formattata in questo modo:

{ "name": "Children's Songs", "samples": [ { "name": "Mary Had a Little Lamb", "uri": "asset:///mary1.mp3" }, { "name": "Itsy Bitsy Spider", "uri": "asset:///spider1.mp3" } ] },

(La virgola finale presuppone ci sarà un'altra categoria seguente, ad esempio come Blues Songs, Jazz Songs ecc. con più voci mp3. La categoria finale non ha alcuna virgola.)

La figura seguente mostra la schermata di selezione di attività dopo aver fatto clic sul Children's Songs:

ExoPlayer Chooser Activity

Clicca Mary Had a Little Lamb o Itsy Bitsy Spider e che gioca mp3.