ExoPlayer не воспроизводит видео из необработанной папки в Kitkat

1

Здравствуйте, я изучаю Exoplayer, поэтому я разработал простое приложение, в котором я получаю видео из необработанной папки. Это приложение отлично работает на леденце, но когда я запускаю то же самое приложение в версии Kitkat, оно показывает только черный экран с длиной видео на медиа контроллере. Я пытался найти, но ничего не получил по этой проблеме. Нужны некоторые предложения по этой проблеме. Спасибо заранее!

main.xml

     <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="20dp"
            tools:context=".MainActivity">

            <com.google.android.exoplayer2.ui.PlayerView
                android:id="@+id/player_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </RelativeLayout> 

Main.java

public class MainActivity extends AppCompatActivity {

    private PlayerView playerView;
    private SimpleExoPlayer player;

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

        playerView = findViewById(R.id.player_view);

    }

    @Override
    protected void onStart() {
        super.onStart();
        player = ExoPlayerFactory.newSimpleInstance(this,new DefaultTrackSelector());
        playerView.setPlayer(player);

        final RawResourceDataSource rawResourceDataSource = new RawResourceDataSource(this);
        DataSpec dataSpec = new DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.tara));
        try {
            rawResourceDataSource.open(dataSpec);

            DataSource.Factory factory = new DataSource.Factory() {
                @Override
                public DataSource createDataSource() {
                    return rawResourceDataSource;
                }
            };
            MediaSource videoSource = new ExtractorMediaSource.Factory(factory).createMediaSource(rawResourceDataSource.getUri());
            player.prepare(videoSource);
            player.setPlayWhenReady(true);

        } catch (RawResourceDataSource.RawResourceDataSourceException e) {
            e.printStackTrace();
        }


    }
}

Ошибка Logcat

E/ACodec: [OMX.google.h264.decoder] ERROR(0x80001001)
E/MediaCodec: Codec reported an error. (omx error 0x80001001, internalError -2147483648)
E/ExoPlayerImplInternal: Internal runtime error.
    java.lang.IllegalStateException
        at android.media.MediaCodec.dequeueOutputBuffer(Native Method)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1024)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:573)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:136)
        at android.os.HandlerThread.run(HandlerThread.java:61)
Теги:
exoplayer

1 ответ

0

Можете ли вы попробовать эту часть кода в методе onStart:

TrackSelection.Factory videoTrackSelectionFactory =
                new AdaptiveTrackSelection.Factory(null);
        player = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector(videoTrackSelectionFactory));
        player.setRepeatMode(Player.REPEAT_MODE_ONE);
        player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
        playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
        playerView.setUseController(false);
        playerView.setPlayer(player);
        player.setPlayWhenReady(true);
        final RawResourceDataSource rawResourceDataSource = new RawResourceDataSource(this);
        DataSpec dataSpec = new DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.tara));
        try {
            rawResourceDataSource.open(dataSpec);
            DataSource.Factory factory = new DataSource.Factory() {
                @Override
                public DataSource createDataSource() {
                    return rawResourceDataSource;
                }
            };
            MediaSource videoSource = new ExtractorMediaSource.Factory(factory).createMediaSource(rawResourceDataSource.getUri());
            player.prepare(videoSource);
        } catch (RawResourceDataSource.RawResourceDataSourceException e) {
            e.printStackTrace();
        }
  • 1
    Нет не работает, я использую эмулятор и .mp4 файл не работает на леденец также
  • 0
    Я рекомендую использовать реальное устройство или альтернативу, которую вы можете использовать Genymotion. Эмулятор не на 100% реалистичен, а Genymotion лучше, чем эмулятор. Кроме того, я работал с Exoplayer ниже API 21 (Lollipop), и он работал нормально.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню