Как использовать Android MediaPlayer для воспроизведения видеопотока?FileDescriptor, Ури, путь, MediaDataSource? - PullRequest
0 голосов
/ 26 сентября 2018

MediaPlayer не может использовать InputStream в качестве источника данных.я хочу уменьшить или отменить подготовленное время MediaPlayer, поэтому мне нужно кэшировать поток в файл.Когда цель Sdk> = 23, я могу использовать

mMediaPlayer.setDataSource(new MediaDataSource() {
        @Override
        public int readAt(long position, byte[] buffer, int offset, int size) throws IOException {
            return 0;
        }

        @Override
        public long getSize() throws IOException {
            return 0;
        }

        @Override
        public void close() throws IOException {

        }
    });

, но как заставить ее работать на нижней цели.Теперь я исследовал два способа:

1: Точно так же, как поток кэша NanoHttp , построить локальный сервер, преобразовать удаленный URL в локальный URL и использовать setDataSource(localUri)

2: кэшировать видеоголовку в локальный файл, но FileDescriptor не может быть прочитан в течение времени записи.Есть другие структуры данных, которые можно читать и писать между тем?

У вас есть идея получше?

Может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 26 сентября 2018

Я рекомендую вам использовать ExoPlayer вместо использования Android MediaPlayer , поскольку MediaPlayer имеет некоторые проблемы с потоковым видео.

Если вы хотите использовать библиотеку, более простую, чем ExoPlayer, вы можете использовать ExoMedia .

...