У меня есть существующее приложение Xamarin Forms для Android и iOS, которое показывает некоторый HTML-контент из локального хранилища (цель — просматривать этот контент в автономном режиме) в WebView.
После последнего обновления iOS (12.2) видео в этом HTML перестали работать. На месте видео отображается белый фон с символом «Воспроизвести», но никакие действия невозможны.
Я попытался изменить тег видео, чтобы включить автовоспроизведение, отключение звука, но безуспешно.
<video width = "560" height = "315" controls>
<source src = "Absolute-3D.mp4" type = "video/mp4">
</video>
Я ожидаю, что он продолжит работать, как это было до обновления, но что-то блокирует его.
Привет @JackHua-MSFT, к сожалению, видео закрыто. Я не могу им поделиться. Что бы вы хотели посмотреть?
Мне нужен webUrl, который может воспроизвести эту проблему. Тогда я могу проверить это на своей стороне.
Та же проблема здесь с использованием JWplayer, встроенного в веб-просмотр. Я отправил отчет об ошибке. Он работает в браузере сафари, но не в приложении!
Привет @JackHua-MSFT, Вот пример: github.com/anakochevska/VideoIssue
У меня та же проблема. Что я могу объявить, так это предупреждение в консоли Safari при нажатии на кнопку воспроизведения: Unhandled Promise Rejection: NotAllowedError: запрос не разрешен пользовательским агентом или платформой в текущем контексте, возможно, потому что пользователь отказал в разрешении.
Что ж, когда я запускаю ваш пример с симулятором iOS 12.2, я вижу там белый фон и кнопку воспроизведения, затем я нажимаю кнопку воспроизведения, видео воспроизводится. Я что-то упустил или мне нужно настоящее устройство?
О, я не заметил, что об этом не упоминалось, когда читал пост. Ошибка возникает только на реальном устройстве с iOS 12.2. Все по-прежнему отлично работает на симуляторе iOS 12.2. Я также попробовал три или четыре разных локальных видео на реальном устройстве в теге html video. Ни один из них не сработал, такое же поведение описывает Ана.
Да, ошибка отображается только на реальном устройстве с iOS 12.2.
Я заменил UIWebView (который сейчас устарел) на WKWebView, и, похоже, он снова работает, ничего не меняя в html-коде.
В консоли есть сообщение о том, что полноэкранный режим не авторизован в текущем контексте. У меня тоже это происходит только на реальном устройстве.
Я еще не заставил WKWebView работать, используя локальный видеофайл на реальном устройстве. Я использую loadHTMLString. Может проблема с безопасностью.
Попробуйте установить 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
Отправил отчет об ошибке в Apple, мы увидим openradar.appspot.com/radar?id=4947640680710144
Отклонение необработанного обещания: NotAllowedError: запрос не разрешен агентом пользователя или платформой в текущем контексте, возможно, потому, что пользователь отклонил разрешение. Это еще не решено.
Это ошибка UIWebView, я добавляю приведенный ниже код, теперь он работает.
self.webView.mediaPlaybackRequiresUserAction = NO;
self.webView.allowsPictureInPictureMediaPlayback = YES;
Да! "webView.mediaPlaybackRequiresUserAction = НЕТ;" решил это для меня. Если вы не хотите автовоспроизведения, убедитесь, что в вашем HTML нет «автовоспроизведения». Я должен отметить, что я не использую Xamarin.
Вам нужно добавить это в свой plist
NSIncludesSubdomains
и NSTemporaryExceptionAllowsInsecureHTTPLoads
Так:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
Можете ли вы поделиться веб-адресом, который содержит видео?