iOS App:用原生播放器替换 webview 中的 Flash

Posted

技术标签:

【中文标题】iOS App:用原生播放器替换 webview 中的 Flash【英文标题】:iOS App: Replace Flash in webview with native player 【发布时间】:2014-01-21 03:40:40 【问题描述】:

我即将开发我的第一个 ios 应用。对于第一个版本,主要目标是让应用程序成为我网站的 web 视图。到目前为止,这很容易,只需将 webview 指向正确的 url。我需要帮助的部分是用原生视频播放器替换 web 视图中的 Flash 视频播放器。

基本上在网站上,我有一个 Flash 视频播放器,它通过 RTMP 连接到流式视频服务器。截至目前,该网站需要使用 Flash 视频(因此不能转换为 html5 视频)。 iOS 应用应按原样显示网站,除了找到 Flash 播放器并将其替换为原生视频播放器,以便视频播放仍然可以在 iPhone/iPad 上播放。

有没有人对此有任何建议?

【问题讨论】:

【参考方案1】:

这是可以做到的。它可能不干净和漂亮,但这是一种可能的方法:您需要在显示 HTML 之前对其进行解析。

首先,您需要拦截 UIWebView 的加载请求调用,以便检查它是否正在调用包含您需要解析的 Flash 的页面的 URL。要拦截加载请求调用,请使用 UIWebViewDelegate 方法webView:shouldStartLoadWithRequest:navigationType: 读取 URL。

如果 URL 与您需要从中删除 Flash 的 URL 匹配,您将运行加载 HTML 字符串的代码,您将解析到 Web 视图中(稍后会详细介绍)并返回 NOwebView:shouldStartLoadWithRequest:navigationType: 委托方法。这意味着当用户尝试访问包含 Flash 的页面时,我们将阻止 UIWebView 执行其操作并使用我们自己的解析内容加载视图。

一旦确定需要解析 HTML,就需要进入一个可以使用的变量。以字符串形式获取页面的 HTML:

NSURL *yourURL = [NSURL URLWithString:@"http://google.com"];
NSError *error;
NSString *htmlString = [NSString stringWithContentsOfURL:yourURL encoding:NSUTF8Encoding error:&error];

获得字符串后,要从 HTML 中删除 Flash 代码,请参阅以下问题:

Comment out a string in HTML before UIWebView can display it

解析 HTML 并删除 Flash 后,您可以使用 [webView loadHTMLString:string baseURL:nil]; 将其加载到 Web 视图中

最后,您需要通过代码在 Web 视图顶部插入一个原生电影播放器​​。您将不得不处理屏幕旋转以及本机播放器在 Web 视图顶部的大小和位置,但我会将这些乐趣留给您。

这是很多原材料,但应该能让你继续寻找可能的解决方案。

【讨论】:

【参考方案2】:

所以,您的要求是在本机应用程序中显示一个 WebView,并在此 WebView 中显示一些本机组件。这是做不到的。

您必须为此构建一个完全原生的应用程序。或者在 WebView 中使用 HTML5。

【讨论】:

以上是关于iOS App:用原生播放器替换 webview 中的 Flash的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 与 iOS 原生 webView 对比

iOS解决APP进入后台WebView上音频继续播放问题

iOS原生App与H5页面交互笔记

ios wkwebview返回原生调用啥方法

腾讯X5内核集成-解决遇到的问题(ABI平台匹配加载理解)

检测原生iOS Music App中当前正在播放的歌曲信息