【问题标题】:The app just crashes whenever I go into the activity每当我进入活动时,该应用程序就会崩溃
【发布时间】:2021-02-10 21:40:27
【问题描述】:

代码是

public class TwelfthActivity extends AppCompatActivity {
private Object HlsMediaSource;

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

    DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory();
    HlsMediaSource hlsMediaSource =
            new HlsMediaSource.Factory(dataSourceFactory)
            .createMediaSource(MediaItem.fromUri("http://37.77.2.234:1935/beyaz/live/chunklist_w269671748.m3u8"));
    SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).build();
    player.setMediaSource((MediaSource) HlsMediaSource);
    player.prepare();
}

}

除了应用程序本身崩溃之外,任何地方都不会弹出错误

【问题讨论】:

  • 别告诉我是因为NetworkOnMainThreadException
  • 提供logcat。

标签: java android http-live-streaming


【解决方案1】:
private SimpleExoPlayer moviePlayer;
private PlayerView playerView;
private DefaultTrackSelector trackSelector;
private int currentWindow = 0;
private long playbackPosition = 0;

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

    playerView = findViewById(R.id.moviePlayer);

    trackSelector = new DefaultTrackSelector(this, new AdaptiveTrackSelection.Factory());  
    trackSelector.setParameters(trackSelector.buildUponParameters().setMaxVideoSizeSd());
    DefaultLoadControl loadControl = new DefaultLoadControl.Builder().setBufferDurationsMs(50000, 50000, 4000, 1024).build();
    moviePlayer = new SimpleExoPlayer.Builder(this, new DefaultRenderersFactory(this)).setLoadControl(loadControl).setTrackSelector(trackSelector).build();
    playerView.setPlayer(moviePlayer);
    
    DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(getString(R.string.app_name));
    MediaSource mediaSource = new HlsMediaSource.Factory(dataSourceFactory).setAllowChunklessPreparation(true).createMediaSource(new MediaItem.Builder().setUri(Uri.parse("http://37.77.2.234:1935/beyaz/live/chunklist_w269671748.m3u8")).build());

    moviePlayer.setMediaSource(mediaSource);
    moviePlayer.setPlayWhenReady(true);
    moviePlayer.seekTo(currentWindow, playbackPosition);
    moviePlayer.prepare();

}

【讨论】:

  • 嗨。非常感谢您的代码。现在唯一的错误来自currentWindow 和playbackPosition。你知道如何解决这些问题吗?它说他们无法解析符号
  • 检查已编辑的答案,如果回答了您的问号,则将其标记为已回答。
  • 是的,该程序现在正在运行。我想知道你是否知道为什么没有最大化屏幕的选项?这是对 ExoPlayer 的限制还是我需要编写代码?
  • 提出一个单独的问题。
【解决方案2】:

您能否展示 AndroidManifest 文件以及如何打开此活动?

另外,请尝试添加https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html#addListener(com.google.android.exoplayer2.Player.EventListener),看看可能有错误。

如果 logcat 中没有关于崩溃的信息,可能会重新启动 android studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多