Проблемы с воспроизведением видео на обеих системах (Android и iOS)

Я реализую функции видеоплеера в приложении Flutter, но не понимаю, какой формат видео лучше всего подходит для обеих систем (IOS и Android).

Я использую video_player 0.10.0 + 2 и chewie 0.9.6.

На самом деле мы используем H264 с контейнером MKV и H265 с контейнером MP4 (HEVC), но на IOS (реальное устройство) не работает, а в Android работает, но с некоторыми ошибками.

Какой-то фрагмент кода ...

// Declaration
VideoPlayerController _playerController;

// Initialization
if (_playerController == null) {   
    _playerController = VideoPlayerController.network(_myVideoUrl)
          ..setVolume(0.0)
          ..setLooping(true)
          ..initialize();
}

//Play
_playerController.play();

//Stop
if (_playerController != null) {
   _playerController.pause();
}

@override
  void deactivate() {    
    super.deactivate();
    if (_playerController != null) {
      _playerController.pause();
    }    
  }

  @override
  void dispose() {
    super.dispose();
    if (_playerController != null) {
      _playerController.pause();
    }
    _playerController = null;    
  }

В iOS на реальных устройствах видео не воспроизводится без сообщения об ошибке.

В Android видео воспроизводится, но с такими проблемами:

1) Ошибка журнала:

2019-03-24 15:30:49.468 1739-1817/? E/OMXNodeInstance: getExtensionIndex(0xf411c240:google.h264.decoder, OMX.google.android.index.enableAndroidNativeBuffers) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.468 16136-16335/it.itasoft.moc E/ACodec: [OMX.google.h264.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
2019-03-24 15:30:49.472 1739-1817/? E/OMXNodeInstance: setConfig(0xf411c240:google.h264.decoder, ConfigPriority(0x6f800002)) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.473 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: UnsupportedIndex(0x8000101a)
2019-03-24 15:30:49.475 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ??(0x7f000003)) ERROR: UnsupportedSetting(0x80001019)
2019-03-24 15:30:49.554 1739-1817/? E/OMXNodeInstance: getConfig(0xf411c240:google.h264.decoder, ??(0x7f000003)) ERROR: UnsupportedSetting(0x80001019)
2019-03-24 15:30:49.558 1739-2059/? E/OMXNodeInstance: setConfig(0xf411c720:google.aac.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
2019-03-24 15:30:49.559 1739-2059/? E/OMXNodeInstance: setConfig(0xf411c720:google.aac.decoder, ConfigOperatingRate(0x6f800003)) ERROR: Undefined(0x80001001)
2019-03-24 15:30:49.559 1739-2059/? E/OMXNodeInstance: getConfig(0xf411c720:google.aac.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001)

2) Петля не работает

Какие форматы лучше всего подходят для максимальной совместимости в обеих системах?


person Luca Panteghini    schedule 24.03.2019    source источник


Ответы (1)


Поддерживаемые форматы видео на самом деле неплохо документированы:

В iOS резервным проигрывателем является AVPlayer. Поддерживаемые форматы различаются в зависимости от версии iOS, класс AVURLAsset имеет аудиовизуальные типы, которые можно запрашивать для поддерживаемых форматов av. На Android поддерживающим проигрывателем является ExoPlayer. Список поддерживаемых форматов см. Здесь.

Мне повезло с предложениями, представленными в другом вопросе о stackoverflow, и я просто использовал следующий формат ffmpeg для преобразования:

ffmpeg -i input.file.mp4 -vcodec libx264 -vprofile high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=-1:360 -threads 0 -acodec libvo_aacenc -b:a 128k converted.mp4

это отлично работает на iOS (реальное устройство) и Android.

FWIW: очевидно, вы также можете найти список поддерживаемых форматов iOS в ответе SO, если не хотите их запрашивать на вашем устройстве.

person Herbert Poul    schedule 24.03.2019
comment
Спасибо за ваш ответ. Это нормально, что я продолжаю видеть такие ошибки? E / ACodec: [OMX.google.h264.decoder] setPortMode при выводе в DynamicANWBuffer не удалось с ошибкой -1010 I / ACodec: кодек не поддерживает приоритет конфигурации (err -1010) I / ACodec: кодек не поддерживает приоритет конфигурации ( err -2147483648) D / MediaCodec: [OMX.google.h264.decoder] устанавливает для пространства данных на выходной поверхности значение # 103 W / MapperHal: дескриптор буфера с недопустимыми битами использования 0x2000 - person Luca Panteghini; 25.03.2019