Реализация мобильного карьера видео-майнинга для сложной покадровой анимации

внешний интерфейс

Автор статьи: IMWeb Команда IMWeb Источник исходного текста:Сообщество IMWebВоспроизведение запрещено без согласия

На странице бренда Penguin Coaching нам нужно реализовать анимацию следующим образом:

整体效果

Страница прокручивается до области анимации, и анимация воспроизводится. Соответствующая часть анимации выглядит следующим образом:

动画

Покадровая анимация в настоящее время реализована следующими способами:

  1. анимированный gif

    Известные форматы изображений

  2. lottie

    Airbnb — это проект с открытым исходным кодом, который поддерживает кросс-платформенные решения для создания анимационных эффектов путем преобразования анимации AE в данные json; lottie уже применялась в обучении, и студенты, которые использовали ее, все хвалят и рекомендуют ее за эффект и скорость разработки. я еще не знаю Лотти, рекомендую серию обучающих статей Лотти,пожалуйста, ткните меня

  3. APNG (Animated Portable Network Graphics)

    Анимационный формат, основанный на расширении формата PNG, который добавляет поддержку анимированных изображений. Он был создан для замены старого формата GIF, но некоторые браузеры не поддерживают его, поэтому необходимо учитывать совместимость;

  4. Видео элемент HTML

GIF-анимация подходит для обработки анимаций с простыми цветами и простыми эффектами движения, таких как анимация небольших изображений, таких как логотипы и диаграммы значков.В анимациях, которые необходимо реализовать выше, очевидно, больше деталей и больших областей.Учитывая качество, GIF исключен.

О том, какой метод использовать для реализации анимации, в сочетании с выводами исследования моего коллеги @ajaxchen:

  1. Лотти После того как дизайнер создал анимацию через AE, через плагин AEbodymovinЭкспортируйте анимацию в json и передайте ее нашей внешней разработке.Используя эти данные json, мы представили сценарий lottie-web для анализа этих данных json и визуализации их в анимацию SVG/canvas.Эффект показан ниже. картина показывает эффект нашей цели

对比图

Видно, что отличия в реализации все же есть.Цвет, цифровой наклон и перспектива пунктирной линии не оправдали ожиданий, поэтому от использования лотоса отказались, но это не отрицает прекрасного эффекта лотоса при реализации другие анимации.

  1. APNG

    После сжатия изображений сегментированных анимационных кадров, предоставленных дизайнером, результирующий размер apng достигает 29M, а формат webp - 17M, такой огромный объем, и четкость реализации не соответствует ожиданиям, поэтому этот метод может быть только заброшен; APNG не поддерживается в некоторых браузерах и должен быть введен при реализацииapng-canvasпреобразовать png в холст;

  2. createJS

    Статьи по моему ISUX«Всего одна статья отделяет вас от эффективного производства анимации»Отправить нашему дизайнеру

    После этого он ответил мне так

  1. HTML video

    После безрезультатных попыток сделать все вышеперечисленное мой коллега @zzbozheng показал мнелол страница, Магия, на самом деле достигается с помощью видео! Я так не думал!

omg

Проверьте совместимость тега видео, будь то версия страницы нашего бренда для ПК или мобильная веб-страница, совместимость может удовлетворить наши потребности.

​ Размер анимационного MP4 ролика, который дал брат-дизайнер, 350к.По сравнению с десятками мегабайт, 350к-это просто легко.Проверил реализацию автоматического воспроизведения видео,есть подводные камни.Также общался с братом-дизайнером для всестороннего рассмотрения.Потом решительно наступил на яму видео

Тег видео имеет соответствующий метод события, который может бытьОбратитесь к документации

Ниже приводится краткое изложение ям майнинга в процессе использования видео в мобильном Интернете:

  1. видео может не воспроизводиться автоматически в сафари и настольном хроме

    Автовоспроизведение здесь, будь то атрибут autoplay тега видео или метод воспроизведения, который автоматически вызывает видео через js, является автовоспроизведением.

    Автозапуск Chrome на рабочем столе в основном ограничен autoplay policy, в нее можно играть автоматически, следуя соответствующей стратегии, которая в основном основана на опыте пользователя;mutedАтрибут (muted) может разрешить автоматическое воспроизведение. Наша анимация не имеет звука, поэтому добавьте атрибут muted в тег видео.

<video muted />
  1. Скрыть панель управления видео

    В теге видео, пока не добавлен атрибут управления, панель управления обычно не отображается, поэтому ее нельзя рассматривать как видео.Конечно, некоторые браузеры Android действительно находятся в состоянии потери контроля, о чем будет сказано позже ○|  ̄|_

  2. Видео IOS автоматически воспроизводится в полноэкранном режиме

    Для информации добавьте два атрибута в тег видео для воспроизведения на маленьком экране.

<video 
	muted
	playsInline
	webkit-playsinline="true"
/>
  1. WeChat не позволяет автоматически воспроизводить видео и должно воспроизводиться при взаимодействии с пользователем.

    В начале коллега одного из пришедших напомнил мне обратить внимание на автоматическое воспроизведение видео WeChat.После отзывов других, это не только не разрешено WeChat, но и не разрешено некоторыми браузерами машин.Что мне делать делать в это время? Реализовано совместно с событием касания. Воспроизведение видео заключается в прослушивании события прокрутки и ожидании вызова video.play() в пределах видимого диапазона для автоматического воспроизведения. Поскольку некоторые браузеры требуют взаимодействия с пользователем, вы можете выбрать событие касания. Когда пользователь касается этого дисплея, воспроизведение область, событие касания запускается для вызова воспроизведения. Здесь наша область анимации достаточно велика, чтобы не беспокоиться о прикосновении пользователя. Здесь используется переменная, чтобы указать, было ли воспроизведено видео.Если оно было воспроизведено, событие касания не будет выполняться, чтобы избежать частого вызова воспроизведения.

  2. Некоторые браузеры Android не могут воспроизводиться автоматически, а сенсорные события не могут запускать воспроизведение.

    Метод воспроизведения тега видео возвращает обещание, которое можно использовать для определения возможности автоматического воспроизведения видео.

video.play()
  .then(() => {
    // play success
  })
  .catch( err => {
    // auto play fail
  })

Когда улов приходит к ошибке, можно включить только совместимое решение.Дизайнер дал мне несколько изображений кадров и позволил мне постепенно исчезать и исчезать, чтобы реализовать воспроизведение изображения. ​

​ Однако! В WeChat Huawei Honor 8 я обнаружил странную проблему, видео не воспроизводилось, а video.play не ловил ошибку, но метод then выполнялся нормально, то есть метод воспроизведения возвращался успешно. , но видео на самом деле не воспроизводилось, это, это, это измена моим чувствам!

​ В отчаянии, на стороне Wechat Android все видео включены в режиме совместимости (несколько картинок исчезают и исчезают)

  1. О странной работе браузера Android
    1. Автоматическая подвеска для воспроизведения видео на машине Oppo

2. Панель управления видео нельзя скрыть 3. Видео автоматически бесконтрольно воспроизводится в полноэкранном режиме. 4. ...

Я: «Брат дизайнер, я ничего не могу с этим поделать.

Дизайн: «Найдите все соответствующие модели и браузеры, используйте режим совместимости для воспроизведения анимации для этих неподдерживаемых браузеров.

Я: «Очень сложно контролировать все модели и охватить их всех...

Дизайн: «Затем сначала используйте режим совместимости для всех Android, а потом оптимизируйте его».

于是就这样干掉了所有的安卓 video
  1. Видео браузера ios QQ завершено, и отображается рекомендуемое видео

Я установил воспроизведение этого видео в цикле, и браузер QQ покажет рекомендуемое видео после воспроизведения видео и остановит воспроизведение цикла, из-за чего моя страница выглядит немного низко, что явно негуманно. avail, я попросил своего коллегу по QQ браузеру помочь мне с этой проблемой.Он попросил меня добавить этот атрибут в тег видео для использования системного плеера, но отказался быть перехваченным и вставленным в рекомендуемое видео, спасибо @eddiecmchen за предоставление Мнение

mtt-playsinline=”true“
  1. Цвет фона видео, экспортированного дизайнером, отличается от предоставленного цвета. Существуют различия в различных устройствах ПК, таких как MAC и Windows, которые еще не обнаружены на мобильном терминале, но можно обнаружить, что разница в цвете между видео, отображаемым на мобильном терминале, и на ПК

左图为模拟器效果,右图为 iphone safari打开效果

Пока прилагаются некоторые блоки кода реализации, а в проекте используется стек технологии react

<video
   muted
   src="***"
   preload="auto"
   playsInline
   webkit-playsinline="true"
   mtt-playsinline="true"
   loop
   ref={this.videoRef}
/>
playVideo = () => {
    const { isVideoCanAutoPlay, isPlayedVideo } = this.state;
    // 播放视频
    const videoDom = this.videoRef.current;
    if (videoDom && !isPlayedVideo && isVideoCanAutoPlay) {
      const playPromise = videoDom.play();
      if (playPromise) {
        playPromise
          .then(() => {
            this.setState({
              isPlayedVideo: true,
            });
          })
          .catch((err) => {
            badjs.info(`[品牌页][AI VIDEO 动画]: 自动播放出错 ${err}`);

            ++this.catchVideoErrorCount;

            // 通过点击和scroll后都无法播放视屏,使用兼容性方案
            if (this.catchVideoErrorCount >= 2) {
              this.setState({
                isVideoCanAutoPlay: false,
              });
            }
          });
      }
    }
  };

Окончательное резюме:

  1. Совместимость мобильного веба для автоматического воспроизведения видео слишком плохая, особенно Android, некоторые браузеры перехватывают тег видео и реализуют его по-своему, или всплывают и прилипают к началу, или два конфликта воспроизведения видео экрана, или Панель управления не может быть скрыто или воспроизводится полноэкранный режим по умолчанию.Если вы можете использовать другие методы для достижения анимации, попробуйте использовать другие методы.

  2. Для автоматического воспроизведения видео учитывайте некоторые ограничения браузера, которые можно использовать только при взаимодействии с пользователем. Если видеоэкран находится на первом экране, это немного сложно или пользователю нужно щелкнуть, чтобы воспроизвести его. Если это не так первый экран, он может быть вызван событиями касания.В конце концов, пользователь, прокручивающий вниз, все равно вызовет событие касания

  3. Обещание, возвращаемое методом воспроизведения видео, существует в WeChat Huawei Honor 8. Воспроизведение успешно возвращается, но видео не воспроизводится.

Справочные документы и веб-сайты:

  1. developer.Mozilla.org/this-cn/docs/…
  2. lol.qq.com/

Спасибо моим коллегам, которые помогали в процессе майнинга~