- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的视频播放器中,当我尝试播放 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);
}
}
展示我应该如何使用 exoplayer 播放
MKV
视频。所有文件都是来自存储的本地文件。
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 on output to DynamicANWBuffer failed w/ err -1010
EDIT:
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
文件夹,但您可以根据需要更改它。
关于java - 无法使用 exoPlayer 2.11 播放 MKV Matroska 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63101825/
我有一个 mkv 文件没有有效的持续时间。我想手动更改此持续时间参数。我通过了定义在这个 matroska 规范 http://www.matroska.org/technical/specs/ind
我有一个这样的 MKV: Input #0, matroska,webm, from 'MyVideo.mkv': Stream #0:0(eng): Video: h264 (High), yu
我有一个包含 5 个流的 MKV 文件... 0:视频 1:音频 2:音频 3:文字 4:菜单 我能够使用此命令将 MKV 重新组合成 MP4 ...... > ffmpeg.exe -i input
我正在按顺序下载 MKV 文件,我希望能够在浏览器中将它们显示给客户端。客户端应该能够跳过已下载的视频的所有部分,并在到达尚未添加到文件中的内容时进行缓冲。我曾尝试使用 ffmpeg RTMP,但这不
我有一个要求,我需要解析一个 matroska 文件。文件的初始几个字节如下所示。 0x1a 0x45 0xdf 0xa3 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x2
现在我正在尝试使用 ffmpeg 命令修剪 mkv 文件。 ffmpeg -y -i 1.mkv -filter_complex "[0:0]trim=start=201:duration=28,se
我有许多来自电视节目的视频文件,我想为每个文件添加字幕。虽然我可以对几个文件使用 MKV 合并,但是这里文件的数量太多了,单独处理一个文件会花费很多时间。我使用了以下内容: for %x i
我想添加一个 protobuf作为 Matroska (mkv) 视频文件的附件的消息 在没有复制视频数据的情况下写入所有视频帧后 .这必须是可能的,因为可以使用 MKVToolNix 套件(对于 J
我正在通过 ffmpeg 和 python 将几个 mkv 文件转换为 mp4。但是,当我去播放它们时,背景音频会完美同步,但就好像所有声音都掉了一样。有没有办法将所有音频设置为单声道? 或者我如何指
我有一个包含 3 个流的 mkv 文件。我使用 ffprobe 来获取我的 mkv 文件的信息。 ffprobe ./demo/test2.mkv 我得到了这个输出 Input #0, matrosk
我需要一种从具有多个音轨的 MKV 文件中获取语言代码的方法。 ffmpeg产生输出,然后我可以使用正则表达式进行过滤,但它看起来不是很优雅: $ ffmpeg -i file.mkv 2>&1 |
我有一个包含 2 个音频和 4 个字幕流的 mkv 文件。第三和第四个字幕流包含错误,所以我提取并更正了它们,但我不知道如何在 mkv 文件中替换它们。我试过了ffmpeg.exe -i .\vide
我使用IIS中的目录列表功能上传了一堆文件,方便 friend 和家人访问和下载。 我的问题是它列出了 .mkv 文件,但是当您单击它时,我收到“找不到页面”的消息。 我试过重新定位文件并重命名它,但
我试图从 youtube 下载 youtube-dl -F 249 "https://www.youtube.com/watch?v=yXT1ElMEkW8" 我的版本youtube-dl --ver
我正在尝试在播放视频的地方设置HTML页面。 我的视频是一个.mkv文件。它在Chrome上正常运行,但没有声音。 音频编解码器为AC3。 我的代码: https://jsfiddle.net/wc
我可以在android中以mp4和3gp格式录制视频。但是如何以.mkv格式录制和保存视频。是否可以在android中执行此操作。android是否支持.mkv格式。请提供解决方案。 谢谢... 最佳
如何使用 JAVA 或 C 或 C++ 将来自摄像机的多个视频和音频流(我们希望流不以任何方式编码)编码为一个 mkv,以便来自摄像机 A 的声音相对于来自摄像机 A 的视频进行编码? (该算法应该适
我正在使用简单的 HTML5 标签。现在 chrome 正在播放 .mkv视频,但在 mozilla firefox 中不受支持。那么,有什么东西可以解决我在网页上播放视频的所有问题吗? 最佳答案 没
我正在接收以字节为单位的 MKV 视频片段。我需要在不将视频保存在磁盘中的情况下拍摄它的第一帧以供以后处理。对于图像的类似问题,我使用 OpenCV 或 PIL 并且一切正常,但是,我无法对视频数据执
我发现这个屏幕截图显示您可以使用 Shark007+ 以在 Windows 资源管理器中显示为文件图标的方式将封面图像添加到 mkv 文件伊卡洛斯。 但是这些工具正在以一种非常糟糕的方式扰乱系统。很多
我是一名优秀的程序员,十分优秀!