Загрузка отсутствующего кодека? - PullRequest
0 голосов
/ 05 сентября 2018

Возникла проблема, из-за которой я не могу загрузить кодек для некоторых файлов мультимедиа. я надеялся, что есть способ, которым я могу сказать операционной системе Android загрузить соответствующий кодек для воспроизведения файла? сейчас я использую https://github.com/brianwernick/ExoMedia плеер, который является своего рода форком exoPlayer для Android. и я это не поддерживает кодек и будет играть только аудио или ничего. как я могу получить его (или даже ОС) для загрузки отсутствующего кодека?

Вот информация о кодеке файла mp4, которая не будет воспроизводиться на многих устройствах, которые я хочу решить:

enter image description here

сам код тривиален:

 class MediaPlayerActivity : AppCompatActivity(), OnPreparedListener {

    private var uri: String = ""

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_media_player)
        uri = intent.getStringExtra("uri")

        setupVideoView(uri)
    }

    private fun setupVideoView(uri: String) {
        videoView.setOnPreparedListener(this)
        videoView.setVideoURI(Uri.parse(uri))
    }

    override fun onPrepared() {
        //Starts the video playback as soon as it is ready
        videoView.start()
    }

}

и, соответственно, XML-файл:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black">

    <com.devbrackets.android.exomedia.ui.widget.VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:useDefaultControls="true" />

</RelativeLayout>

Я также установил mx player на устройство Android, а mx player не предлагал установить кодек. вместо этого он играл только аудио, без визуального. Также, если я открою MP4 в Chrome, он играет хорошо.

1 Ответ

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

Вы пытаетесь воспроизвести видео UHD (2160x3840), закодированное в формате H.264, на различных устройствах. Это плохая идея, поскольку каждое устройство имеет верхний предел того, что оно может декодировать разумно, даже с аппаратным декодированием. Это объясняет, почему вы можете слышать звук, но ничего не видеть.

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

На сайте Android есть рекомендации по размеру / формату:

https://developer.android.com/guide/topics/media/media-formats

, но реальные данные перечислены в Документе определения совместимости Android (CDD)

Вы должны transcode ваше видео в виде набора файлов соответствующих кодеков и битрейтов для клиентов, которых вы ожидаете и доставляете согласно. Например, если файл предназначен для высокопроизводительных устройств с UHD-экранами, как определено Display.getSupportedModes(), тогда вам следует кодировать видео в H.265 или VP9 со скоростью 20 Мбит / с.

...