我有一个应用程序,它在 WebView 中显示带有视频元素的 HTML5 页面。我花了一段时间才弄清楚如何让视频正常工作,但最终我成功地在 Samsung Galaxy Tab (Android 3.1) 上播放了 WebView 中嵌入的视频。我为视频标签使用了以下代码:
<video controls poster="img/poster.jpg" height="240" width="360">
<source src="video/BigBuck.m4v">
<source src="video/BigBuck.theora.ogv" type="video/ogg">
<source src="video/BigBuck.webm" type="video/webm">
HTML5 video not supported.
</video>
video 元素有多个源,现在我正尝试在视频开始播放之前捕获选定的视频源(和格式)。当我点击播放按钮时,我看到一个针对视频文件的 HTTP 请求到达了存储视频文件的 Web 服务器,但我没有在应用程序端成功拦截该请求。
我查看了几种方法来查看对视频文件的请求是否传递到那里,但我没有看到它通过了任何一种。
shouldOverrideUrlLoading(WebView view, String url) 中,在我的 WebViewClient 中,只有初始 HTML5 页面请求通过。WebViewClient 中的 shouldInterceptRequest (WebView view, String url) 中,我看到只传递了初始 HTML5 页面请求和视频海报图像请求,但没有传递视频文件。onShowCustomView(View view, CustomViewCallback callback) 在我的 WebChromeClient 中,只有在视频已经播放时单击 HTML5 页面上的全屏控制按钮时才会调用,但是不是当我点击播放按钮时。 (这个方法的实际目的是什么?)有没有人建议我可以捕获视频文件请求的另一种方法,或者谁能解释一下当我点击视频元素上的播放按钮时实际发生了什么?
最佳答案
我使用 javascript 方法解决了这个问题。加载 HTML 页面时,将在加载视频元数据时触发 loadedmetadata 事件。从那一刻起,您可以从视频元素的 currentSrc 属性中获取选定的视频源,并通过 JavascriptInterface 将其传递给 Android native 代码。
下面是HTML5视频元素的代码。 “Android”是可以在 javascript 中访问 JavascriptInterface 的名称。
<video poster="image/poster.jpg" height="240" width="360" onloadedmetadata="Android.interceptPlay(this.currentSrc);">
<source src="video/BigBuck.m4v">
<source src="video/BigBuck.webm" type="video/webm">
<source src="video/BigBuck.theora.ogv" type="video/ogg">
HTML5 video not supported.
</video>
Javascript接口(interface)的代码
private class JavaScriptInterface {
Context mContext;
/* Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
public void interceptPlay(String source) {
// do something
}
}
最后在 Activity 创建时将 JavascriptInterface 添加到 WebView
mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
通过将 onloadedmetadata 属性添加到 HTML5 视频元素来捕获 loadedmetadata 事件很重要,而不是通过 addEventListener( "loadedmetadata",...) 因为在快速网络上,loadedmetadata 事件可能会在监听器注册之前触发(参见 http://dev.opera.com/articles/view/consistent-event-firing-with-html5-video )
关于android - Android WebView中拦截HTML5视频源请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999712/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda