Как я могу передать URL-адрес m4v из Google Cloud Platform с помощью Exoplayer

Я хочу использовать Exoplayer для потоковой передачи URL-ссылки видео m4v https://storage.cloud.google.com/math_oneticha/Numbers/NUMBERS.m4v?authuser=2 из облачного хранилища Google, но мое приложение продолжает давать сбой, потому что ни один доступный экстрактор Exoplayer не может прочитать поток. Когда я использую ту же URL-ссылку в браузере, она отлично транслируется. Я также пробовал передавать URL-адрес mp4, https://media.publit.io/file/Mathematic/LinearEquation/Linear-Equation-4.mp4с приложением exoplayer, и он отлично транслируется, что означает, что приложение exoplayer просто испытывает проблемы с URL-адресом m4v. Ниже мой код для экзоплеера

 Uri videoUrl;
// Initialize Player view and variables
 PlayerView player;
ProgressBar vprogressBar;
ImageView fullScreenImage, closeLecture;
SimpleExoPlayer simpleExoPlayer;

// ref Player variables
    player = findViewById(R.id.playerView);
    vprogressBar = findViewById(R.id.video_loading_bar);
    fullScreenImage = findViewById(R.id.fullscreen_option);
    closeLecture = findViewById(R.id.videoClose);

    String stringUrl = "https://storage.cloud.google.com/math_oneticha/Numbers/NUMBERS.m4v?authuser=2";
    videoUrl = Uri.parse(stringUrl);
    LoadControl loadControl = new DefaultLoadControl();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelector trackSelector = new DefaultTrackSelector(
            new AdaptiveTrackSelection.Factory(bandwidthMeter)
    );

    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(LectureActivity.this, trackSelector,loadControl);
    DefaultHttpDataSourceFactory factory = new DefaultHttpDataSourceFactory("exoplayer video");
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    MediaSource mediaSource = new ExtractorMediaSource(videoUrl,factory,extractorsFactory,null,null);
    player.setPlayer(simpleExoPlayer);
    player.setKeepScreenOn(true);
    simpleExoPlayer.prepare(mediaSource);
    simpleExoPlayer.setPlayWhenReady(true);
    simpleExoPlayer.addListener(new Player.EventListener(){
        
         @Override
        public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
            if (playbackState == Player.STATE_BUFFERING){
                vprogressBar.setVisibility(View.VISIBLE);

            }else if (playbackState == Player.STATE_READY){
                vprogressBar.setVisibility(View.INVISIBLE);
            }

        }
    }

И ниже мой журнал сбоев

E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor) could read the stream.

Пожалуйста, что я могу сделать по-другому, чтобы мое приложение могло транслировать мою ссылку URL-адреса m4v из облачного хранилища Google?


person Eric    schedule 10.07.2020    source источник


Ответы (1)


Насколько я знаю, вам нужно использовать gsutil cp для потоковой передачи в ExoPlayer.
Я мало что знаю обо всем процессе, но я нашел документацию, которая может направить вас в правильном направлении.

person Bruno    schedule 10.07.2020
comment
Я ничего не понимаю, что написано в упомянутом документе. Кроме того, я только что обнаружил, что код exoplayer хорошо работает с некоторыми URL-адресами облака Google и выдает ошибку для других. Я не могу понять, почему. - person Eric; 10.07.2020
comment
Нужны подробности, чтобы двигаться дальше. Какую ошибку вы видите при попытке? Возможно, проблема с разрешением, API для включения и т. Д. Пожалуйста, поделитесь более подробной информацией. - person Bruno; 13.07.2020
comment
Спасибо, @Bruno, но я разобрался. Судя по всему, Exoplayer работал нормально, просто возникли проблемы с некоторыми ссылками на облачное хранилище. - person Eric; 14.07.2020