无法使用 exoPlayer 2.11 播放 MKV Matroska 视频

2023-11-23

当我尝试播放时在我的视频播放器中MKV Matroska文件保持静止,视频未播放。

我跟着CodeLabs and ExoPlayer开发并构建可以播放的播放器.MP4但无法播放.MKV

这是我的播放器:(exoplayer 2.11.5)

private void initializePlayer() {
    if (player == null) {
        player = new SimpleExoPlayer.Builder(this).build();
        playerView.setPlayer(player);
        Uri uri = Uri.parse(String.valueOf(videoUri));
        MediaSource mediaSource = buildMediaSource(uri);
        player.setPlayWhenReady(playWhenReady);
        player.seekTo(currentWindow, playbackPosition);
        player.addListener(playbackStateListener);
        player.prepare(mediaSource, false, false);
    }
}

private MediaSource buildMediaSource(Uri uri) {
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, "exoplayer-codelab");
    @C.ContentType int type = Util.inferContentType(uri);
    switch (type) {
        case C.TYPE_DASH:
            return new DashMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
        case C.TYPE_SS:
            return new SsMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
        case C.TYPE_HLS:
            return new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
        case C.TYPE_OTHER:
            return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
        default:
            throw new IllegalStateException("Unsupported type: " + type);
    }
}

展示我应该怎么玩MKV使用 exoplayer 播放视频。所有文件都是存储中的本地文件。

我什至尝试了以下方法:

    private MediaSource buildMediaSource(Uri uri) {
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, "exoplayer-codelab") ;
            return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
    }
}

在 logcat 中我看到这个错误:

2826-3120/com.example.jlplayer E/ACodec:[OMX.google.hevc.decoder] setPortMode 输出到 DynamicANWBuffer 失败,错误 -1010

EDIT:

经过多次研究,这就是我尝试过的https://github.com/sanoj26692/pay/blob/master/player

这是我尝试在离线模式下播放的文件。http://jell.yfish.us/media/jellyfish-3-mbps-hd-h264.mkv

这是我的 logcat:

2020-08-17 01:36:23.384 10937-10937/com.google.android.exoplayer2.demo V/AudioManager: playSoundEffect   effectType: 0
    
    --------- beginning of system
2020-08-17 01:36:23.427 10937-10937/com.google.android.exoplayer2.demo D/HwCust: Create obj success use class android.app.HwCustActivityImpl
2020-08-17 01:36:23.430 10937-10937/com.google.android.exoplayer2.demo D/HwCust: Create obj success use class android.app.HwCustHwWallpaperManagerImpl
2020-08-17 01:36:23.432 10937-10937/com.google.android.exoplayer2.demo V/ActivityThread: ActivityThread,callActivityOnCreate
2020-08-17 01:36:23.455 10937-10937/com.google.android.exoplayer2.demo D/HwRTBlurUtils: check blur style for HwPhoneWindow, themeResId : 0x7f1000fc, context : com.google.android.exoplayer2.demo.PlayerActivity@b211450, Nhwext : 0, get Blur : disable with , null
2020-08-17 01:36:23.456 10937-10937/com.google.android.exoplayer2.demo D/HwRTBlurUtils: check blur style for HwPhoneWindow, themeResId : 0x7f1000fc, context : com.google.android.exoplayer2.demo.PlayerActivity@b211450, Nhwext : 0, get Blur : disable with , null
2020-08-17 01:36:23.555 10937-10937/com.google.android.exoplayer2.demo I/ExoPlayerImpl: Init cb3d2e5 [ExoPlayerLib/2.11.7] [HWPRA-H, PRA-AL00X, HUAWEI, 26]
2020-08-17 01:36:23.562 10937-10937/com.google.android.exoplayer2.demo V/AudioManager: registerAudioFocusListener...
2020-08-17 01:36:23.565 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: state [eventTime=0.01, mediaPos=0.00, window=0, true, BUFFERING]
2020-08-17 01:36:23.567 10937-10937/com.google.android.exoplayer2.demo D/ActivityThread: add activity client record, r= ActivityRecord{b53b861 token=android.os.BinderProxy@862c24d {com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity}} token= android.os.BinderProxy@862c24d
2020-08-17 01:36:23.578 10937-10978/com.google.android.exoplayer2.demo D/OpenGLRenderer:   HWUI Binary is  enabled
2020-08-17 01:36:23.581 10937-11127/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [sizeAndRate.support, 1920x1080x-1.0] [OMX.IMG.MSVDX.Decoder.HEVC, video/hevc] [HWPRA-H, PRA-AL00X, HUAWEI, 26]
2020-08-17 01:36:23.581 10937-10945/com.google.android.exoplayer2.demo I/zygote64: Compiler allocated 5MB to compile void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int)
2020-08-17 01:36:23.583 10937-11127/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [sizeAndRate.support, 1920x1080x-1.0] [OMX.IMG.MSVDX.Decoder.HEVC, video/hevc] [HWPRA-H, PRA-AL00X, HUAWEI, 26]
2020-08-17 01:36:23.588 10937-11127/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [sizeAndRate.support, 1920x1080x-1.0] [OMX.IMG.MSVDX.Decoder.HEVC, video/hevc] [HWPRA-H, PRA-AL00X, HUAWEI, 26]
2020-08-17 01:36:23.596 10937-10937/com.google.android.exoplayer2.demo I/PressGestureDetector: onAttached begin
2020-08-17 01:36:23.598 10937-10937/com.google.android.exoplayer2.demo I/PressGestureDetector: onAttached end
2020-08-17 01:36:23.598 10937-11131/com.google.android.exoplayer2.demo I/PressGestureDetector: HiTouch restricted: AboardArea.
2020-08-17 01:36:23.599 10937-11130/com.google.android.exoplayer2.demo I/OMXClient: Treble IOmx obtained
2020-08-17 01:36:23.604 10937-11130/com.google.android.exoplayer2.demo I/ACodec: In onAllocateComponent create compenent, codec name: OMX.google.hevc.decoder
2020-08-17 01:36:23.617 10937-11134/com.google.android.exoplayer2.demo E/BufferQueueProducer: [] Can not get hwsched service
2020-08-17 01:36:23.619 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7d3548d010, reason connectToSurface
2020-08-17 01:36:23.619 10937-11129/com.google.android.exoplayer2.demo I/MediaCodec: [OMX.google.hevc.decoder] setting surface generation to 11199492
2020-08-17 01:36:23.619 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7d3548d010, reason connectToSurface(reconnect)
2020-08-17 01:36:23.619 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7d3548d010, reason connectToSurface(reconnect)
2020-08-17 01:36:23.619 10937-11130/com.google.android.exoplayer2.demo W/HwExtendedUtils: hw configLocalPlayBack err = -1010
2020-08-17 01:36:23.620 10937-11130/com.google.android.exoplayer2.demo E/ACodec: [OMX.google.hevc.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
2020-08-17 01:36:23.620 10937-11130/com.google.android.exoplayer2.demo I/HwExtendedCodec: mime is [video/hevc] at setVideoFormat
2020-08-17 01:36:23.623 10937-11130/com.google.android.exoplayer2.demo I/ACodec: codec does not support config priority (err -1010)
2020-08-17 01:36:23.628 10937-11130/com.google.android.exoplayer2.demo I/ACodec: onStart
2020-08-17 01:36:23.656 10937-10978/com.google.android.exoplayer2.demo D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000
2020-08-17 01:36:23.668 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: surfaceSize [eventTime=0.11, mediaPos=0.00, window=0, 1080, 1722]
2020-08-17 01:36:23.714 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7d33473010, reason connectToSurface
2020-08-17 01:36:23.714 10937-11129/com.google.android.exoplayer2.demo I/MediaCodec: [OMX.google.hevc.decoder] setting surface generation to 11199493
2020-08-17 01:36:23.714 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7d33473010, reason connectToSurface(reconnect)
2020-08-17 01:36:23.714 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7d33473010, reason connectToSurface(reconnect)
2020-08-17 01:36:23.715 10937-11129/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7d3548d010, reason disconnectFromSurface
2020-08-17 01:36:23.731 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=0.17, mediaPos=0.00, window=0, periodCount=1, windowCount=1, reason=PREPARED
2020-08-17 01:36:23.732 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2020-08-17 01:36:23.732 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   window [?, false, false]
2020-08-17 01:36:23.732 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: ]
2020-08-17 01:36:23.756 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: mediaPeriodCreated [eventTime=0.20, mediaPos=0.00, window=0, period=0]
2020-08-17 01:36:23.758 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: loading [eventTime=0.20, mediaPos=0.00, window=0, period=0, true]
2020-08-17 01:36:23.761 10937-10978/com.google.android.exoplayer2.demo D/OpenGLRenderer:   HWUI Binary is  enabled
2020-08-17 01:36:23.762 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=0.20, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=DYNAMIC
2020-08-17 01:36:23.763 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   period [30.10]
2020-08-17 01:36:23.763 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   window [30.10, true, false]
2020-08-17 01:36:23.763 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: ]
2020-08-17 01:36:23.787 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: decoderEnabled [eventTime=0.23, mediaPos=0.00, window=0, period=0, video]
2020-08-17 01:36:23.788 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: tracks [eventTime=0.23, mediaPos=0.00, window=0, period=0
2020-08-17 01:36:23.788 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:0 [
2020-08-17 01:36:23.789 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
2020-08-17 01:36:23.789 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=1, mimeType=video/hevc, res=1920x1080, supported=YES
2020-08-17 01:36:23.789 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:     ]
2020-08-17 01:36:23.789 10937-10937/com.google.android.exoplayer2.demo D/EventLogger:   ]
2020-08-17 01:36:23.789 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: ]
2020-08-17 01:36:23.794 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: mediaPeriodReadingStarted [eventTime=0.23, mediaPos=0.00, window=0, period=0]
2020-08-17 01:36:23.795 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: downstreamFormat [eventTime=0.24, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/hevc, res=1920x1080]
2020-08-17 01:36:23.798 10937-10937/com.google.android.exoplayer2.demo W/InputMethodManager: startInputReason = 1
2020-08-17 01:36:23.820 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: decoderInitialized [eventTime=0.26, mediaPos=0.00, window=0, period=0, video, OMX.google.hevc.decoder]
2020-08-17 01:36:23.821 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: decoderInputFormat [eventTime=0.26, mediaPos=0.00, window=0, period=0, video, id=1, mimeType=video/hevc, res=1920x1080]
2020-08-17 01:36:23.828 10937-10978/com.google.android.exoplayer2.demo W/libEGL: EGLNativeWindowType 0x7d37723010 disconnect failed
2020-08-17 01:36:23.828 10937-10978/com.google.android.exoplayer2.demo D/OpenGLRenderer: endAllActiveAnimators on 0x7d55764800 (ExpandableListView) with handle 0x7d5575c9a0
2020-08-17 01:36:24.185 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: loading [eventTime=0.63, mediaPos=0.00, window=0, period=0, false]
2020-08-17 01:36:24.258 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: state [eventTime=0.70, mediaPos=0.00, window=0, period=0, true, READY]
2020-08-17 01:36:24.262 10937-10937/com.google.android.exoplayer2.demo D/EventLogger: isPlaying [eventTime=0.70, mediaPos=0.00, window=0, period=0, true]

我在 Github 上制作了一个示例项目,可以与您的文件正常配合。您可以在下面的链接中检查和测试它:

https://github.com/squti/ExoPlayer-MKV-Sample

如果您只想在项目中使用代码,请先从设备或模拟器中卸载以前安装的应用程序,然后运行新的应用程序。

以下是该项目的基本代码:

MainActiviy.java

public class MainActivity extends AppCompatActivity {

    private PlayerView playerView;
    private SimpleExoPlayer player;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        playerView = findViewById(R.id.player_view);

    }

    @Override
    protected void onStart() {
        super.onStart();
        player = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector());
        playerView.setPlayer(player);

        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(
                this,
                Util.getUserAgent(this, getString(R.string.app_name)));
        ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse("file:///android_asset/jellyfish-3-mbps-hd-h264.mkv"));

        player.prepare(mediaSource);
        player.setPlayWhenReady(true);
    }

    @Override
    protected void onStop() {
        super.onStop();
        playerView.setPlayer(null);
        player.release();
    }
}

活动主文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        app:resize_mode="fill" />

</androidx.constraintlayout.widget.ConstraintLayout>

此外,您需要将这些依赖项添加到应用程序级别 Gradle 文件中:

implementation 'com.google.android.exoplayer:exoplayer-core:2.11.7'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.11.7'

我把视频文件放在asset文件夹,但您可以根据需要更改它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 exoPlayer 2.11 播放 MKV Matroska 视频 的相关文章

随机推荐

  • JavaScript 中的解构赋值

    正如在 JavaScript 1 7 的 Mozilla 变更日志中可以看到的 他们添加了解构赋值 遗憾的是我不太喜欢这种语法 为什么要写两次 a 和 b var a b a b f 像这样的事情会好得多 var a b f 那仍然是向后兼
  • 用于检测模板特化的模板元函数

    灵感来自这个问题 我想知道是否可以引入一些编译时检查来检测是否有两个给定的模板实例化 template
  • 如何在 sails.js 中配置 https

    我正在尝试设置本地 HTTPS 服务器以在 Sails js 中进行测试 我无法找到任何指针如何在 sails js 中执行此操作 对于快递来说 var express require express var https require h
  • 如何在Python中将函数作为函数参数传递

    这是我目前拥有的并且运行良好 def iterate seed num x seed orbit x for i in range num x 2 x 1 x orbit append x return orbit 现在 如果我想将第 5
  • 如何创建一个可以固定行和列滚动的自定义控件?

    我试图弄清楚如何制作一个自定义控件 使用户可以向各个方向滚动 但具有固定的行和列 网格不适合我想要做的事情 因为它逐列滚动 我需要水平滚动逐像素平滑 我没有使用列 只有视觉网格线 垂直滚动不仅应该滚动右侧的区域 还应该滚动左侧的固定区域 与
  • Git - 不包括 {} 的颜色词

    我使用 git 和 color words 来查看我的差异 在我的差异中 它表明我删除了 b ljcount b nbsp nbsp nbsp Changes 我补充说 b skills limits b nbsp nbsp nbsp Ch
  • 避免 C/C++ 中内存泄漏的方法

    我可以使用哪些技巧来避免应用程序中的内存泄漏 在我当前的项目中 我使用一个工具 INSURE 来查找内存泄漏并生成报告 除了该工具之外 还有任何方法可以识别内存泄漏并克服它 有三种主要方法可以做到这一点 第一个是不会造成内存泄漏首先 防御性
  • AFL 警告:最后一个新路径:还没有(奇怪,请检查语法!)

    我有这个警告 最后一个新路径 还没有 奇怪 检查语法 在我尝试模糊文件后呈红色 我不知道为什么会发生这种情况 我用谷歌搜索也没有答案 我的命令是这样的 afl fuzz i testcases o findings tcpdump 4 6
  • 测试中模拟 EJB 注入

    每当我想测试一个使用资源注入的类时 我最终都会包含一个仅在测试中使用的构造函数 public class A EJB B b Used in tests to inject EJB mock protected A B b this b b
  • SFTP 路径格式与本地路径格式

    我正在编写一些 Java 代码 使用 JSch 库 通过 SFTP 到远程 Windows 计算机 并将文件复制到我的本地 Windows 文件夹 当指定远程计算机上的文件路径时 我被迫以以下格式指定路径 C temp myfile txt
  • Android MediaPlayer:基于 URI 播放 Raw 音频资源

    我试图解决的问题是在一个需要播放音频文件的活动中 大多数文件将由用户创建 并保存到外部存储中 因此使用以下代码播放 基于 Google 的示例代码 MediaPlayer mPlayer new MediaPlayer mPlayer se
  • python manage.py runserver、shell、dbshel​​l 在 git-bash 上冻结

    我试图在 Windows 的 git bash 上的 python virtualenv 中运行交互式 shell 但它没有运行 奇怪的是 它似乎没有做任何事情 只是光标在下一行上闪烁 没有给出任何输出 python manage py s
  • 如何在 EPPlus 中将数据透视表报表布局设置为表格?

    查看 EPPlus 附带的示例 我已成功创建数据透视表 但无法为其设置正确的报告布局 我希望它是 表格 而不是 轮廓 或其他什么 对我来说 EPPlus 现在似乎不支持这一点 但也许我错过了一些东西 事实证明 这比我想象的要容易得多 通过将
  • Android WebView:按钮响应非常滞后

    我制作了一个小网络应用程序来使用 Android 的 WebView 功能 我有一些用作按钮的 div 带有onclick属性 尝试该应用程序后 在设备的浏览器中 我立即注意到点击按钮后有很大的延迟 当我点击按钮和浏览器在其周围显示橙色突出
  • Python:停止正在等待用户输入的线程

    我试图让我的脚本在用户按下返回键时触发用户输入 然后主程序将检查 txUpdated 标志并使用该输入 我有一个在 python 中运行的线程 它只是等待用户输入 class InputThread threading Thread def
  • Eclipse IDE 支持 JSF 2.0 吗?

    我安装了 WTP 3 1 插件 还安装了 Glassfish v3 插件 我可以注册我的服务器 当我创建动态 Web 项目时 我可以看到可用的最大动态 Web 模块版本是 2 5 然后 我选择 Glassfish v3 的默认配置 但是当我
  • pandas if else 条件多列[重复]

    这个问题在这里已经有答案了 假设我有以下 df import pandas as pd data dic a 0 0 1 2 b 0 3 4 5 c 6 7 8 9 df pd DataFrame data dic Result a b c
  • 如何使用 R 调用/执行 imageJ 宏?

    我在 imageJ 中编写了一个宏 它会输出一个数据帧 然后在 R 中对其进行分析 我希望能够在 R 中完成整个过程 而不必先在 imageJ 中手动运行该宏 目前 宏会提示用户输入和输出目录 然后执行操作 我想 R 中一定有一个函数可以让
  • 在 Eclipse 中生成 JavaDocs 时出现“找不到模块”消息

    我正在尝试在我的应用程序中生成 JavaDocs 但是 当我尝试时 我收到以下消息 application src module info java 5 error module not found javafx base requires
  • 无法使用 exoPlayer 2.11 播放 MKV Matroska 视频

    当我尝试播放时在我的视频播放器中MKV Matroska文件保持静止 视频未播放 我跟着CodeLabs and ExoPlayer开发并构建可以播放的播放器 MP4但无法播放 MKV 这是我的播放器 exoplayer 2 11 5 pr