Видео из локального хранилища не воспроизводится в WebView (Xamarin.Forms) после последнего обновления iOS (12.2)

У меня есть существующее приложение Xamarin Forms для Android и iOS, которое показывает некоторый HTML-контент из локального хранилища (цель — просматривать этот контент в автономном режиме) в WebView.

После последнего обновления iOS (12.2) видео в этом HTML перестали работать. На месте видео отображается белый фон с символом «Воспроизвести», но никакие действия невозможны.

Видео из локального хранилища не воспроизводится в WebView (Xamarin.Forms) после последнего обновления iOS (12.2)

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

<video width = "560" height = "315" controls>
<source src = "Absolute-3D.mp4" type = "video/mp4">
</video>

Я ожидаю, что он продолжит работать, как это было до обновления, но что-то блокирует его.

Можете ли вы поделиться веб-адресом, который содержит видео?

nevermore 11.04.2019 09:19

Привет @JackHua-MSFT, к сожалению, видео закрыто. Я не могу им поделиться. Что бы вы хотели посмотреть?

Ana Kochevska 11.04.2019 11:56

Мне нужен webUrl, который может воспроизвести эту проблему. Тогда я могу проверить это на своей стороне.

nevermore 12.04.2019 10:20

Та же проблема здесь с использованием JWplayer, встроенного в веб-просмотр. Я отправил отчет об ошибке. Он работает в браузере сафари, но не в приложении!

Maypeur 12.04.2019 15:50

Привет @JackHua-MSFT, Вот пример: github.com/anakochevska/VideoIssue

Ana Kochevska 15.04.2019 16:04

У меня та же проблема. Что я могу объявить, так это предупреждение в консоли Safari при нажатии на кнопку воспроизведения: Unhandled Promise Rejection: NotAllowedError: запрос не разрешен пользовательским агентом или платформой в текущем контексте, возможно, потому что пользователь отказал в разрешении.

butters 15.04.2019 21:32

Что ж, когда я запускаю ваш пример с симулятором iOS 12.2, я вижу там белый фон и кнопку воспроизведения, затем я нажимаю кнопку воспроизведения, видео воспроизводится. Я что-то упустил или мне нужно настоящее устройство?

nevermore 17.04.2019 07:39

О, я не заметил, что об этом не упоминалось, когда читал пост. Ошибка возникает только на реальном устройстве с iOS 12.2. Все по-прежнему отлично работает на симуляторе iOS 12.2. Я также попробовал три или четыре разных локальных видео на реальном устройстве в теге html video. Ни один из них не сработал, такое же поведение описывает Ана.

butters 17.04.2019 17:19

Да, ошибка отображается только на реальном устройстве с iOS 12.2.

Ana Kochevska 18.04.2019 08:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
9
1 610
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я заменил UIWebView (который сейчас устарел) на WKWebView, и, похоже, он снова работает, ничего не меняя в html-коде.

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

Я еще не заставил WKWebView работать, используя локальный видеофайл на реальном устройстве. Я использую loadHTMLString. Может проблема с безопасностью.

Ernie Thomason 10.05.2019 17:10

Попробуйте установить mediaPlaybackRequiresUserAction на NO для веб-просмотра. Я вижу ту же проблему (оба UIWebView и WKWebView) в iOS 12.2. Отлично работает в iOS 12.1 и более ранних версиях.

При отладке вы видите эту ошибку в консоли Safari:

Unhandled Promise Rejection: NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission

https://developer.apple.com/documentation/uikit/uiwebview/1617954-mediaplaybackrequiresuseraction?language=objc

https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/1614727-mediaplaybackrequiresuseraction?language=objc

Отправил отчет об ошибке в Apple, мы увидим openradar.appspot.com/radar?id=4947640680710144

1800 INFORMATION 02.05.2019 06:06

Отклонение необработанного обещания: NotAllowedError: запрос не разрешен агентом пользователя или платформой в текущем контексте, возможно, потому, что пользователь отклонил разрешение. Это еще не решено.

Ответ принят как подходящий

Это ошибка UIWebView, я добавляю приведенный ниже код, теперь он работает.

self.webView.mediaPlaybackRequiresUserAction = NO;
self.webView.allowsPictureInPictureMediaPlayback = YES;

Да! "webView.mediaPlaybackRequiresUserAction = НЕТ;" решил это для меня. Если вы не хотите автовоспроизведения, убедитесь, что в вашем HTML нет «автовоспроизведения». Я должен отметить, что я не использую Xamarin.

Ernie Thomason 10.05.2019 17:24

Вам нужно добавить это в свой plist

NSIncludesSubdomains и NSTemporaryExceptionAllowsInsecureHTTPLoads

Так:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSIncludesSubdomains</key>
    <true/>
    <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
    <true/>
</dict>

Другие вопросы по теме