方法不重写或实现超类型ExoPlayer的方法。

问题描述 投票:0回答:1

我找遍了所有的地方,都没有找到解决这个错误的方法。我知道在StackOverflow上有很多与这个主题相关的问题,但我不明白。而且我使用的是ExoPlayer。

错误:方法没有覆盖或实现一个超类型的方法。

安卓工作室强调8 @Overrides.

AdaptiveMediaSourceEventListeners的方法被划成红色。

onTimelineChanged 被划成红色

onPositionDiscontinuity 被划成红色

MainActivity。

package rusiptv.net;

//http://mos.rusiptv.net:8080/live/@celalsonat/784512/94815.m3u8

public class MainActivity extends AppCompatActivity implements ExoPlayer.EventListener {

private SimpleExoPlayerView simpleExoPlayerView;
private String hlsVideoUri = "http://mos.rusiptv.net:8080/live/@celalsonat/784512/94815.m3u8";
private SimpleExoPlayer player;
private ProgressBar progressBar;

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

    // 1. Create a default TrackSelector
    Handler mainHandler = new Handler();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory = new 
 AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

    // 2. Create a default LoadControl
    LoadControl loadControl = new DefaultLoadControl();

    // 3. Create the player
    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

    simpleExoPlayerView = (SimpleExoPlayerView)findViewById(R.id.player_view);
    simpleExoPlayerView.setPlayer(player);

    // Measures bandwidth during playback. Can be null if not required.
    DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();

    // Produces DataSource instances through which media data is loaded.
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "Exo2"), defaultBandwidthMeter);
    // Produces Extractor instances for parsing the media data.
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    // This is the MediaSource representing the media to be played.
    HlsMediaSource hlsMediaSource = new HlsMediaSource(Uri.parse(hlsVideoUri), dataSourceFactory, mainHandler, new AdaptiveMediaSourceEventListener(){

        @Override
        public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs){

        }

        @Override
        public void onLoadCompleted(DataSpec dataSpec, int dataType, int trackType, Format 
        trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, 
        long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {

        }

        @Override
        public void onLoadCanceled(DataSpec dataSpec, int dataType, int trackType, Format 
        trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, 
        long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {

        }

        @Override
        public void onLoadError(DataSpec dataSpec, int dataType, int trackType, Format 
        trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, 
        long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded, 
        IOException error, boolean wasCanceled) {

        }

        @Override
        public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long 
        mediaEndTimeMs) {

        }

        @Override
        public void onDownstreamFormatChanged(int trackType, Format trackFormat, int 
    trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {

        }
    });

    player.addListener(this);
    player.prepare(hlsMediaSource);
    simpleExoPlayerView.requestFocus();
    player.setPlayWhenReady(true);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {

}

@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {

}

@Override
public void onLoadingChanged(boolean isLoading) {

}

@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {

    switch (playbackState) {
        case Player.STATE_BUFFERING:
            //You can use progress dialog to show user that video is preparing or buffering so 
    please wait
            progressBar.setVisibility(View.VISIBLE);
            break;
        case Player.STATE_IDLE:
            //idle state
            break;
        case Player.STATE_READY:
            // dismiss your dialog here because our video is ready to play now
            progressBar.setVisibility(View.GONE);
            break;
        case Player.STATE_ENDED:
            // do your processing after ending of video
            break;
    }
}

@Override
public void onPlayerError(ExoPlaybackException error) {

    AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
    adb.setTitle("Could not able to stream video");
    adb.setMessage("It seems that something is going wrong.\nPlease try again.");
    adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            finish(); // take out user from this activity. you can skip this
        }
    });
    AlertDialog ad = adb.create();
    ad.show();
}

@Override
public void onPositionDiscontinuity() {

}

@Override
protected void onPause() {
    super.onPause();
    if (player != null) {
        player.setPlayWhenReady(false); //to pause a video because now our video player is not in 
focus
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    player.release();
}


} 
java android exoplayer
1个回答
0
投票

使用 :

@Override
    public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
    }


@Override
    public void onPositionDiscontinuity(int reason)
    {

    }

更多信息

© www.soinside.com 2019 - 2024. All rights reserved.