ExoPlayer подготавливает исходный код из байтовых массивов

avatar
Call me K
8 апреля 2018 в 04:58
965
1
3

Я работаю с ExoPlayer. Я понял, что ByteArratDataSource используется для подготовки видео из byte[], но до сих пор не знаю, как его использовать. Обычно я использую Uri для подготовки исходного кода

private void initPlayer() {
    ...
    DataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(
            context,
            Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));


    MediaSource currentMediaSource = new ExtractorMediaSource.Factory(dataSourceFactory)
            .createMediaSource(songUri);


    simpleExoPlayer.prepare(currentMediaSource, false, true);
}

Но теперь у меня есть источник байтовых данных, как я могу его использовать, я не нашел на этом сайте руководства по байтовым данным https://google.github.io/ExoPlayer/guide.html. Пожалуйста помогите. Большое спасибо

Источник

Ответы (1)

avatar
Jade
8 апреля 2018 в 05:55
0

Если ваш byte[] исходит из файла, есть более простой способ воспроизвести файл, чем использовать ByteArrayDataSource. ExtractorMediaSource с помощью DefaultDataSource может воспроизводить данные из локального файла.

Из документов:

Для извлечения данных из локального файла (например, file:///path/to/media/media.mp4 или просто /path/to/media/media.mp4, поскольку реализация предполагает, что URI без схемы URI локального файла).

Просто передайте путь к файлу в качестве URI на createMediaSource.

Что касается ByteArrayDataSource, похоже, что вы просто передаете байты в конструктор: byte[] bytes; DataSource byteArrayDataSource = new ByteArrayDataSource(bytes);

А затем перейдите от byteArrayDataSource к ExtractorMediaSource.Factory как обычно. Конечно, поскольку большинство видеофайлов имеют большой размер, это нужно использовать с осторожностью, чтобы не использовать лишнюю оперативную память. Один из других DataSources является предпочтительным.

Call me K
8 апреля 2018 в 16:08
0

К сожалению, вы не можете сделать DataSource.Factory dataSourceFactory = new ByteArrayDataSource(bytes); Это должно быть ByteArrayDataSource dataSource = new ByteArrayDataSource(bytes); Однако в приведенной выше строке кода произошел сбой.

Jade
8 апреля 2018 в 16:12
0

Да, вы правы, это должно быть DataSource вместо DataSourceFactory. Исправленный

Jade
8 апреля 2018 в 16:13
0

@CallmeK, знание этого сбоя поможет ответить на ваш вопрос. Не могли бы вы добавить описание этого сбоя к своему вопросу, включая любые сообщения об ошибках в logcat?

Call me K
9 апреля 2018 в 07:17
0

Я исправил этот сбой. Однако MediaSource mediaSource = new ExtractorMediaSource.Factory(factory).createMediaSource(uri); createMediaSource принимает только Uri, а не DataSource. Я также пробовал DataSource dataSource = new ByteArrayDataSource(bytes) <------- это сработало нормально, он вернул что-то вроде com.google.android.exoplayer2.upstream.ByteArrayDataSource@f013ca4. Но dataSource.getUri() было null