2017-06-07 3 views
0

Ich habe eine Anwendung, die ExoPlayer verwendet. Aber es ist so vor dem Start getan, ich muss wissen, dass Prepared bereits bereit ist oder nicht.So verwenden Sie PreparedAsync In ExoPlayer

PreparedAsync kann im ExoPlayer nicht gefunden werden. Daher stürzt die Anwendung

Laufen und Training ist 2 verschiedene Dinge.

Ich muss herausfinden, wann die Vorbereitung vorbei ist, um die Länge der Videospur zu erhalten.


Ich brauche irgendwelche Vorschläge. Schon 4 Tage rackere ich mir den Kopf ab. Hilfe Entwickler ((

Antwort

0

Sie können den folgenden Code ausprobieren:..

// Measures bandwidth during playback. Can be null if not required. 
     DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); 
// Produces DataSource instances through which media data is loaded. 
     DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, 
       Util.getUserAgent(this, "com.yourapp.appname"), bandwidthMeter); 
// Produces Extractor instances for parsing the media data. 
     ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); 
// This is the MediaSource representing the media to be played. 
     MediaSource videoSource = new ExtractorMediaSource(uri, 
       dataSourceFactory, extractorsFactory, null, null); 
// Prepare the player with the source. 
     exoPlayer.prepare(videoSource); 
+0

А как использовать Async vorbereiten | Im Media Player gibt es prepareAsync. Und hier gibt es keine –

0

Sie sollten einen Listener hinzufügen Sein onPlayerStateChanged wird aufgerufen, wenn eine Zustandsänderung auftritt

Beachten Sie, dass, wenn alles, was Sie‘ Wenn Sie versuchen, die Wiedergabe so schnell wie möglich zu starten, müssen Sie nicht warten, bis die Vorbereitung erfolgt ist, damit Sie dem Player mitteilen können, dass die Wiedergabe gestartet werden soll. Rufen Sie einfach setPlayWhenReady(true) an und es wird sofort abgespielt wie möglich

Beispiel:

public class MainActivity extends AppCompatActivity { 

    private ExoPlayer exoPlayer; 
    private SurfaceView surfaceView; 
    private int RENDERER_COUNT = 300000; 
    private int minBufferMs = 250000; 
    private final int BUFFER_SEGMENT_SIZE = 64 * 1024; 
    private final int BUFFER_SEGMENT_COUNT = 256; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

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

     String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0"; 
     String url = "http://www.sample-videos.com/video/mp4/480/big_buck_bunny_480p_5mb.mp4"; 
     Allocator allocator = new DefaultAllocator(minBufferMs); 
     DataSource dataSource = new DefaultUriDataSource(this, null, userAgent); 


     ExtractorSampleSource sampleSource = new ExtractorSampleSource(Uri.parse(url), dataSource, allocator, 
       BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE); 

     MediaCodecVideoTrackRenderer videoRenderer = new 
       MediaCodecVideoTrackRenderer(this, sampleSource, MediaCodecSelector.DEFAULT, 
       MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT); 

     MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT); 

     exoPlayer = ExoPlayer.Factory.newInstance(RENDERER_COUNT); 
     exoPlayer.prepare(videoRenderer, audioRenderer); 
     exoPlayer.sendMessage(videoRenderer, 
       MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, 
       surfaceView.getHolder().getSurface()); 
exoPlayer.setPlayWhenReady(true); 

    } 
} 

BY: Jens Klingenberg