2015-02-21 24 views
10

Tôi đang cố gắng sử dụng ExoPlayer thay vì MediaPlayer vì đó là lỗi phổ biến mà MediaPlayer trả về getCurrentPosition() và tôi cần thay thế.ExoPlayer - cách phát tệp mp3 cục bộ

Nhưng tôi không thể tìm thấy một thông tin bất cứ nơi nào làm thế nào để mở một tập tin địa phương thông qua các đường dẫn tập tin vào tập tin giống như MediaPlayer của .setDataSource(String filepath)

Google không có bất kỳ ví dụ và các trang web tài liệu chính thức kỳ lạ sụp đổ FireFox của tôi trình duyệt trên cả hai máy tính

+0

Lỗi nào? Bạn đã có một tài liệu tham khảo? – Marcus

+1

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

Trả lời

9

Ứng dụng demo ExoPlayer trong github có thể được sửa đổi để phát các tệp cục bộ. Để làm điều đó, hãy chỉnh sửa https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java tệp để thêm bộ video mới.

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), 
}; 

Để làm điều đó, hãy chỉnh sửa https://github.com/google/ExoPlayer/blob/master/demo/src/main/java/com/google/android/exoplayer/demo/Samples.java tệp để thêm tập hợp mẫu mới.

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

Trả lời tốt, cảm ơn bạn! Dù sao tôi nghĩ rằng việc sử dụng 'Environment.getExternalStorageDirectory()' là một cách giống như anroid hơn. – thomasb

+0

@Srikanth bạn có thể chia sẻ lại liên kết – Erum

5

Một thay đổi nhỏ với mã Srikanth Peddibhotla của việc

Chuỗi Uri cho các tập tin cần được "file: ///mnt/sdcard/YourFilename.mp4" thay vì "/ mnt/sdcard/YourFilename .mp4" trong 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), 
}; 

Ngoài ra, thêm những dòng sau đây để SampleChooserActivity.java

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

Google đã thay đổi một số tên biến và định nghĩa lớp học những ngày này! Dưới đây là các công trình khác nhau đối với tôi.

--- 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

Sử dụng ExoPlayer 2.1, và bắt đầu với dự án demo, bạn có thể chơi các file mp3 từ thư mục assets mà không sửa đổi bất kỳ mã Java, chỉ bằng cách thêm các file mp3 trong thư mục assets và tạo ra hoặc sửa đổi một tập tin json . Bắt đầu với những dự án ExoPlayer demo:

  1. Đặt các tập tin mp3 trong thư mục demo/assets (với media.exolist.json).

  2. Hoặc sửa đổi media.exolist.json hoặc tạo một file mới như my.exolist.json chứa một hoặc nhiều mục được định dạng như thế này:

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

(Dấu phẩy thức giả định sẽ có một loại sau đây, chẳng hạn như Blues Songs, Jazz Songs v.v. với nhiều mục nhập mp3 hơn. Danh mục cuối cùng không có dấu phẩy sau nó.)

Hình bên dưới hiển thị màn hình hoạt động cụ chọn sau khi bạn click vào Children's Songs:

ExoPlayer Chooser Activity

Bấm Mary Had a Little Lamb hoặc Itsy Bitsy Spider và mp3 lượt.