【问题标题】:H264-Encoded Video Not Playing In Android App (Using Expo)H264 编码的视频无法在 Android 应用中播放(使用 Expo)
【发布时间】:2018-02-02 18:51:45
【问题描述】:

我正在尝试使用 Expo/React Native 框架为 Android 构建视频应用程序。

为了完全隔离事物,我有以下内容:

import React, { Component } from 'react'

import { Video } from 'expo'

class VideoPlayer extends Component {

  render = () => {
    return (
      <Video
        source={{ uri: "https://storage.googleapis.com/deepthought-collective.appspot.com/testvid.mp4" }}
        rate={1.0}
        volume={1.0}
        isMuted={false}
        resizeMode="cover"
        shouldPlay
        isLooping
        style={{ width: 300, height: 500 }}
      />
    )
  }

}

在 IOS 中,这玩得很好。在 Android 上,我有音频,但没有视频(只有白色)。

这是ffprobe的输出:

> ffprobe testvid.mp4
ffprobe version 3.4.1 Copyright (c) 2007-2017 the FFmpeg developers
  built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'testvid.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.56.100
  Duration: 00:00:09.97, start: 0.000000, bitrate: 2691 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x1280, 2522 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

我已经在一些 Android 设备以及模拟器上对此进行了测试,并观察到了相同的结果。

视频是使用 OBS 制作的。

如果我在 Chrome 上打开或下载它,它甚至不会播放声音。

有人知道为什么它会在 Android 上以这种方式播放,或者对如何为 Android 编码视频有任何建议吗?

【问题讨论】:

  • 稍微调整一下,似乎调整为 360x640,视频将播放。有人知道 Android 上的视频是否有某种最大分辨率?

标签: video react-native h.264 expo


【解决方案1】:

不同的设备可能有不同的支持,但对于给定的 Android 版本,应在所有平台上支持的集合如下:

H.264 具有许多不同的参数,因此一个带有一组参数的 h.264 编码视频可以播放,而另一个 h.264 编码视频可能不播放。 h.264 标准包括配置文件的概念,这些配置文件就像一组用于不同编码的属性参数。您可以在此处查看一些配置文件的列表:

在您的情况下,您的视频使用的是“高”配置文件。这不包含在上面链接中的默认支持编码集中 - 这可能是问题,或者至少是您看到的问题之一。

作为一般规则,几乎总是跨设备支持基线,并且通常支持 main - main 提供比基线更多的压缩,但代价是编码和解码的处理更多。

您可以通过使用主要或基线配置文件重新编码您的视频并再次测试来测试这是否是问题。

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2018-10-15
    • 2020-06-09
    • 2020-02-17
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多