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

在我的视频播放器中,当我尝试播放MKV Matroska文件时,它仍然不播放视频。

我跟随CodeLabs和ExoPlayer Dev并构建了可以播放.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

编辑:

经过多次研究后,我尝试了这里https://github.com/sanoj26692/pay/blob/master/player

这是文件正在尝试以脱机模式播放。http://jell.yfish.us/media/jellyfish-3-mbps-

hd-h264.mkv

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();

}

}

activity_main.xml

<?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文件夹中,但是您可以根据需要进行更改。

以上是 无法使用exoPlayer 2.11播放MKV Matroska视频 的全部内容, 来源链接: utcz.com/qa/421738.html

回到顶部