下载丢失的编解码器?
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。
我遇到了无法为某些随机媒体文件下载编解码器的问题。我希望有一种方法可以告诉 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。