正在下载缺少的编解码器?

时间:2018-09-05 16:02:42

标签: android kotlin codec exoplayer

我遇到了无法为某些随机媒体文件下载编解码器的问题。我希望有一种方法可以告诉android OS下载受尊敬的编解码器以播放文件?现在我正在使用https://github.com/brianwernick/ExoMedia播放器,它是exoPlayer for 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>

我还在Android设备上安装了mx播放器,而mx播放器不提供安装编解码器的功能。相反,它只播放音频,没有视觉效果。另外,如果我在Chrome中打开mp4,播放效果会很好。

1 个答案:

答案 0 :(得分:1)

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

一般的解决方案是为目标客户端提供适当的编码视频。暗示着,这意味着如果最终用户处于计量数据连接中,则您所传递的文件/流不会大于所需的大小。

Android网站有尺寸/格式建议:

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

但实际详细信息在Android Compatibility Definition Document (CDD)

中列出

您应该将视频transcode分成一组适合您期望并交付的适当编解码器和比特率的文件。例如,如果文件用于具有Display.getSupportedModes()的具有UHD屏幕的高端设备,则您应该以20 Mbps的速度在H.265或VP9中对视频进行编码。