下载丢失的编解码器?

Downloading a missing codec?

我遇到了无法为某些随机媒体文件下载编解码器的问题。我希望有一种方法可以告诉 android OS 下载受人尊敬的编解码器以便播放文件?现在我正在使用 https://github.com/brianwernick/ExoMedia 播放器,它是 android 的 exoPlayer 的某种分支。而且我不支持编解码器,只能播放音频或什么都不播放。我怎样才能得到它(甚至 OS)来下载丢失的编解码器?

这里是 mp4 文件的编解码器信息,我希望解决在许多设备上无法播放的问题:

代码本身很简单:

 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>

我还在 android 设备上安装了 mx player,但 mx player 没有安装编解码器。相反,它只播放音频,没有视觉效果。如果我在 chrome 中打开 mp4,它也可以正常播放。

您正在尝试在各种设备上播放以 H.264 编码的超高清 (2160x3840) 视频。这是一个坏主意,因为即使使用硬件解码,每个设备都有一个可以合理解码的上限。这可以解释为什么您可以听到声音但看不到任何东西。

一般的解决方案是为目标客户提供适当的编码视频。这意味着如果最终用户使用的是按流量计费的数据连接,那么您不会提供超过必要的容量 file/stream。

Android 站点有 size/format 个推荐:

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

但真正的细节列在 Android Compatibility Definition Document (CDD)

您应该 transcode 将您的视频放入一组具有适当编解码器和比特率的文件中,以供您期望并交付的客户使用。例如,如果文件适用于具有 UHD 屏幕的高端设备,由 Display.getSupportedModes() 确定,那么您应该以 20 Mbps 的速度将视频编码为 H.265 或 VP9。