Android6.0 WebView播放视频源码分析
来源:互联网 发布:女生黄金比例身材算法 编辑:程序博客网 时间:2024/06/03 19:11
最近因为项目的需要研究一下WebView播放视频的调用过程。同时也对研究问题的方法有了新的认识,研究问题应该先有自己的研究主题,应该从易到难,由表及里(好像初中、还是高中政治中说过这个,最近才明白,哈哈),不能违背这个定律,要不然自己会越研究越糊涂,也会很有挫败感。这篇博客就想从简单的问题和现象开始然后通过日志来证明自己的判断。
问题: WebView播放视频是调用自带的播放器还是调用Android的系统的播放器?
方法:
1、先从WebView开始,具体如下图:
1) WebViewFactory是对WebViewFactoryProvider的工厂类,是WebView主要的实现类。
2) NullWebViewFactoryProvider什么都没有做,应该是预留的吧。
3) WebViewChromiumFactoryProvider是调用Chromium。通过这个可以看出来,Android6.0已经切到Chrome内核了。
注意:WebViewChromiumFactoryProvider类在Andrid6.0中是找不到源码的,费了九牛二虎之力终于在external/chrome-weview 查找到webview.apk。通过反编译看到Chromium相关的代码。
以上是webView简单的流程,是通过研究代码可以得到的。
2. Chromium源码内调用视频的个过程, 日志如下:
09-25 14:28:28.119 1821-2699/ D/MediaResourceGetter: ethernet/wifi connection detected
09-25 14:28:28.206 1821-2699/ E/MediaResourceGetter: Error configuring data source: setDataSource failed: status = 0x80000000
09-25 14:28:28.206 1821-2699/ E/MediaResourceGetter: Unable to configure metadata extractor
通过日志可以发现调用Chromium中的MediaResourceGetter类。通过源码搜索只能找到第一处日志的打印代码,其他两处都找不到。该问题的分析不能进行下。
3. 最后通过查看日志发现webView最后的调用MediaPlayer,日志如下:
09-11 14:34:24.334 13625-13625/com.smartcar.nightmode.browser W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://img0.singulato.com/video/goods.mp4
09-11 14:34:25.584 13625-13625/com.smartcar.nightmode.browser D/MediaPlayer: setSubtitleAnchor in MediaPlayer
09-11 14:34:25.593 13625-13625/com.smartcar.nightmode.browser D/MediaPlayer: getMetadata
09-11 14:34:25.835 13625-13770/com.smartcar.nightmode.browser W/MediaPlayer: info/warning (3, 0)
同时通过代码简单实现VideoView播放本地视频,抓取日志如下:
09-11 14:32:05.980 12855-12919/com.test I/OpenGLRenderer: Initialized EGL, version 1.4
09-11 14:32:05.981 12855-12919/com.test W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
09-11 14:32:06.064 12855-12855/com.test W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://img0.singulato.com/video/goods.mp4
09-11 14:32:09.197 12855-12855/com.test D/MediaPlayer: getMetadata
09-11 14:32:09.448 12855-12867/com.test W/MediaPlayer: info/warning (3, 0)
通过以上日志对比基本上可以断定:webview播放视频最后调用的是Android本身的播放器。
- Android6.0 WebView播放视频源码分析
- WebView播放视频
- android webview 播放视频
- webView视频播放
- Webview播放视频bug
- webview播放网络视频
- android webview播放视频
- android webview视频播放
- ijkplayer视频播放器源码分析(android)
- ijkplayer视频播放器源码分析
- ijkplayer视频播放器源码分析(android)
- [RK3288][Android6.0] 调试笔记 --- 开机视频无法播放
- android6.0源码目录简单分析
- Android6.0 里Preference 的源码分析
- Android6.0源码分析之蓝牙
- android6.0源码目录简单分析
- Android6.0源码分析之蓝牙
- android6.0源码分析之AMS服务源码分析
- ShaderLab: SubShader Tags
- [LeetCode] 389.Find the Difference
- swagger和gitlab结合做API文档
- Windows下编译caffe,建立caffe的vs工程
- 文章标题
- Android6.0 WebView播放视频源码分析
- 从零开始读算法导论第三版 求最大子数组和 LUA实现
- 忘记oracle的sys用户密码怎么修改
- [LeetCode] 371.Sum of Two Integers
- ubuntu下配置git和github
- C#--程序登录时写入登录日志
- 波雷费密码 Playfair Cipher 及 希尔密码 Hill Cipher 原理简述
- [LeetCode] 412.Fizz Buzz
- JQuery小结