在 React-native-video 中,一些视频无法在三星设备中播放

Posted

技术标签:

【中文标题】在 React-native-video 中,一些视频无法在三星设备中播放【英文标题】:In React-native-video some of the videos are not getting played in samsung devices 【发布时间】:2021-04-28 18:58:29 【问题描述】:

启用 expo-player 时,我收到此错误

[
  "on video error",
  
    "error": 
      "errorException": "com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec, Format(2, null, null, video/avc, null, -1, null, [4096, 2130, 25.000002], [-1, -1])",
      "errorString": "Unable to instantiate decoder OMX.Exynos.avc.dec"
    
  
]

有什么办法可以摆脱这个错误并在三星设备中播放视频。有些视频没有在三星设备上播放。在 mi 设备中播放相同的视频。我在许多三星设备中尝试过相同的视频。在所有这些中,我遇到了同样的错误。 任何帮助将不胜感激。

我也在安卓媒体播放器上试过。因为只有音频正在播放,没有视频。

【问题讨论】:

【参考方案1】:

我有类似的问题,只有在播放视频并且我想开始另一个视频(或导航到自动播放视频的新页面)时。设备无法重复使用编解码器。

在logcat中我发现:

2022-03-10 10:05:31.636 9471-19121/* E/ACodec: [OMX.qcom.video.decoder.avc] configureCodec returning error -12
2022-03-10 10:05:31.636 9471-19121/* E/ACodec: signalError(omxError 0x80001001, internalError -12)
2022-03-10 10:05:31.636 9471-19120/* E/MediaCodec: Codec reported err 0xfffffff4, actionCode 0, while in state 3
2022-03-10 10:05:31.642 9471-19120/* E/MediaCodec: Codec reported err 0xffffec77, actionCode 0, while in state 0
2022-03-10 10:05:31.642 9471-12750/* E/cr_MediaCodecBridge: Cannot configure the video codec
    android.media.MediaCodec$CodecException: Error 0xfffffff4
        at android.media.MediaCodec.native_configure(Native Method)
        at android.media.MediaCodec.configure(MediaCodec.java:2127)
        at android.media.MediaCodec.configure(MediaCodec.java:2043)
        at org.chromium.media.MediaCodecBridge.a(chromium-TrichromeWebViewGoogle.aab-stable-475810133:1)
        at org.chromium.media.MediaCodecBridgeBuilder.createVideoDecoder(chromium-TrichromeWebViewGoogle.aab-stable-475810133:6)

此外,chrome 媒体日志显示:

FFmpegDemuxer: created video stream, config codec: h264, profile: h264 main, level: not available, alpha_mode: is_opaque, coded size: [1920,1080], visible rect: [0,0,1920,1080], natural size: [1920,1080], has extra data: true, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED
FFmpegDemuxer: created audio stream, config codec: aac, profile: unknown, bytes_per_channel: 4, channel_layout: STEREO, channels: 2, samples_per_second: 48000, sample_format: Float 32-bit planar, bytes_per_frame: 8, seek_preroll: 0us, codec_delay: 0, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: true, target_output_channel_layout: NONE, has aac extra data: true
Selected FFmpegAudioDecoder for audio decoding, config: codec: aac, profile: unknown, bytes_per_channel: 4, channel_layout: STEREO, channels: 2, samples_per_second: 48000, sample_format: Float 32-bit planar, bytes_per_frame: 8, seek_preroll: 0us, codec_delay: 0, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: true, target_output_channel_layout: STEREO, has aac extra data: true
Selected MediaCodecVideoDecoder for video decoding, config: codec: h264, profile: h264 main, level: not available, alpha_mode: is_opaque, coded size: [1920,1080], visible rect: [0,0,1920,1080], natural size: [1920,1080], has extra data: true, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED
Entering Terminal State: Unable to allocate codec
video decoder fallback after initial decode error.
Failed to initialize VpxVideoDecoder
Failed to initialize Dav1dVideoDecoder
video decoder reinitialization failed

解决方案是在清理时卸载视频,以便下一个视频播放可以重用(实际上用作新的)编解码器。

我的代码:

useEffect(() => 
    return () => 
      console.log('unmount video')
      videoRef.current?.pause()
      videoRef.current?.removeAttribute('src')
      videoRef.current?.load()
      console.log('video unmounted')
    
  , [videoRef])

【讨论】:

以上是关于在 React-native-video 中,一些视频无法在三星设备中播放的主要内容,如果未能解决你的问题,请参考以下文章

React-Native-Video 在 Android 中禁用 TouchableOpacity

在 react-native-video 中,视频播放完毕后如何重置视频播放器?

在 react-native-video 中如何禁用搜索功能?

React-Native-Video 在模态框内使用时不显示控件

不显示视频,只有在 react-native-video 中播放真正的 android 设备时才会发出声音

react-native-video 中的失真