Воспроизведение в Exoplayer с обновлением файла и продолжением подготовки исходного кода - PullRequest
0 голосов
/ 02 августа 2020

Итак, после долгих проб и ошибок при попытке добиться воспроизведения с возможностью поиска и не выдержав терпения, я попытался заставить exoplayer воспроизводить носители с возможностью поиска.

Новый подход, который у меня есть Взято включает в себя загрузку файла с последующим его воспроизведением, поэтому я сделал поток доступным для поиска с оговоркой об ограниченном времени воспроизведения.

Медиа внезапно останавливается, но если я снова воспроизведу медиафайл, он затем проиграет до новой буферизованной позиции, которая указывает на то, что exoplayer может получить обновленный файл и воспроизвести его, пока он не остановится снова.

Ниже из журналов:

2020-08- 02 12: 53: 28.063 21570-21570 / com.demo.de.exoplayerseeker D / BUFFER_BYTES: bytesRead = 10704979

2020-08-02 12:53: 28.964 21570-21636 / com.demo.de.exoplayerseeker D / AudioTrack: stop (), вызываемый с доставленными 9863424 кадрами

2020-08-02 12:53: 29.065 21570-21570 / com.demo.de .exoplayerseeker D / BUFFER_BYTES: байт sRead = 10737580

Итак, мой запрос имеет два типа для достижения одной единственной цели:

  1. Есть ли способ сообщить exoplayer, что файл обновляется с новым контентом?
  2. Или мы можем сделать так, чтобы exoplayer постоянно готовил медиаисточник из того же URI или источника?

Вот что я пробовал до сих пор:

private void readCStream() {
       
        final File dir = new File(getFilesDir(), "webStream");

        if (!directoryExist(dir)) {
            dir.mkdirs();
            Log.d("DIRECTORY", "Created");
        }
        streamPath = null;
        if (directoryExist(dir)) {            
            streamPath = new File(dir, "streamFile.mp3");
            try {
                streamPath.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Uri weburi = null;
        if (streamPath != null)
            weburi = Uri.fromFile(streamPath);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(stream_url_mp3);
                    InputStream inputStream = url.openStream();
                        
                    FileOutputStream fileOutputStream = new FileOutputStream(streamPath);
                   
                    int c;

                    while ((c = inputStream.read()) != -1) {                            
                        fileOutputStream.write(c);
                        bytesRead++;
                    }
                } catch (Exception ex) {
                    Log.d("BUFFER_ERROR", "" + ex);
                }

            }
        }).start();

        final Handler handler = new Handler();

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Log.d("BUFFER_BYTES", "bytesRead=" + bytesRead);
                handler.postDelayed(this, 1000);
            }
        };

        handler.post(runnable);
        if (streamPath != null) {
              
            initPlayer(weburi);

        }
    }

private void initPlayer(Uri uri) {
        exoPlayer = new SimpleExoPlayer.Builder(this).build();
       
        playerView.setPlayer(exoPlayer);
        
        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "exo-app"));
        DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory()
                .setMp3ExtractorFlags(Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING)
                .setConstantBitrateSeekingEnabled(true);
        
        MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(uri);
        
        exoPlayer.prepare(mediaSource);

    }

ВЫХОД:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...