今天调试公司用VideoView实现的播放器来播放视频的时候,只有声音输出而无画面输出。一开始以为是自己程序有问题,调试了半天无果。怀疑是真机本身的问题,于是下了几个第三方的播放器来进行视频播放,例如:快播、暴风影音、百度视频和MoboPlayer,都是无疾而终。这更加确定了是真机解码的问题。

我的解决方法是:

1、替换了libstagefright.so库文件,因为该文件被公司的底层人员修改过来适应公司的产品,因此每个公司的该文件可能不同。

adb push libstagefright.so /system/lib

2、然后再重启机器

adb reboot

=============================================================

更多关于libstagefright.so的介绍可以参考下文。http://blog.csdn.net/andyhuabing/article/details/7861648

而Android 的mediaplayer包含audio及video两部分的播放功能上,单独的音频或视频都是一个系统中的重要组成部分,另外一个就是显示系统部分在,在android系统最核心的就是SurfaceFlinger组件了。而音视频也同时存在核心部分:AndioFlinger及Stagefright(OpenCore)做具体的视频处理工作。

1、代码位置

   需要从代码阅读了解其设计思想,则必须知道其代码主要目录
JAVA类的路径:frameworks/base/media/java/android/media/MediaPlayer.java
JAVA本地调用部分(JNI):frameworks/base/media/jni/<p align="justify">android_media_MediaPlayer.cpp </p>
这部分内容编译成为目标是libmedia_jni.so。
主要的头文件在以下的目录中:frameworks/base/include/media/
多媒体底层库在以下的目录中:frameworks/base/media/libmedia/ 
这部分的内容被编译成库libmedia.so。
多媒体服务部分:frameworks/base/media/libmediaplayerservice/ 
文件为mediaplayerservice.h和mediaplayerservice.cpp 
这部分内容被编译成库libmediaplayerservice.so。

 2.2系统目录:
基于OpenCore的多媒体播放器部分 external/opencore/ 
这部分内容被编译成库libopencoreplayer.so。从程序规模上来看,libopencoreplayer.so是主要的实现部分,而其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。

2.3系统目录:
基于Statefright的多媒体播放器部分 frameworks\base\media\libstagefright
这部分内容被编译成库 libstagefright.so。从程序规模上来看,libstagefright.so是主要的实现部分,而其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。

=============================================================

由于编写的视频播放器最终都是调用系统的MediaPlayer来进行播放,而视频解码方式有软解码和硬解码两种方式,关于这两种编码方式看下文。

硬解码和软解码的区别

什么是“软解码”,什么又是“硬解码”呢?

  我们在计算机上播放的视频文件都是经过压缩的,因为这样有利于节约存储空间;那么在播放过程,就需要进行一个反射的解压缩过程。在以前这项工作都是由CPU来完成的,对于普通分辨率的AVI、RMVB等文件,绝大多数的CPU都可以胜任;但是发展到高清视频(1080i/p)之后,数据解压缩的工作量比以前翻了数倍,这让很多处理器叫苦不迭。

  随着技术的发展,工程师们发现显卡的GPU/VPU要比CPU更适合这类大数据量的、低难度的重复工作。视频解码工作从处理器那里分离出来,交给显卡去做,这就叫做“硬解码”,例如NVDIA的PureVideo、AMD的UVD技术等等;与之对应的,以前那种纯粹依靠CPU来讲稿的方式则是“软解码”。不过受到技术条件的限制,纯粹的“硬解码”在现阶段是不存在的,CPU依然在发挥一部分作用,只不过硬解码时GPU/VPU已经成为运算的主力。

☆硬解码都有哪些好处?

  很多使用老电脑的朋友都有这样的体会,播放高清视频时画面会卡得跳帧(就跟看幻灯片一样),声音也是断断续续的;但解码工作交给新显卡后,CPU就可以解放出来做更多的事情,与此同时还降低了整机功耗,风扇也不至于“呼呼”作响……

☆为什么现在又有很多人热衷于软解码呢?

  硬解码虽好,但是其中复杂的设置过程也只有少数发烧友才玩得转,很多入门用户面对复杂的设置选项就如同看天书一般,根本不知道如何下手。而且随着处理器恨不能的不断提升,现在就算是主流的双核产品,也能达到软解码的需求,在此基础上软解码又受到很多人的青睐。简单、易用是软解码最大的优势,而且在现阶段软解码在画质上要更好一些。

老鸟指点迷津

  “三十年河东,三十年河西”,以前我们很多人都认为硬解码要更好一些,但是现在我们建议是:对于那些仍在使用老机器,或者动手能力比较高的用户,推荐硬解码;反之,对于普通用户而言,如果你的机器性能已经足够,使用软解码也未尝不可,不用苛求一定要“玩硬的”。

  摘自《微型计算机》

=============================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

=============================================================

我的Android进阶之旅------>android视频播放只有声音无画面的解决办法的更多相关文章

  1. 我的Android进阶之旅------>Android颜色值(#AARRGGBB)透明度百分比和十六进制对应关系以及计算方法

    我的Android进阶之旅-->Android颜色值(RGB)所支持的四种常见形式 透明度百分比和十六进制对应关系表格 透明度 十六进制 100% FF 99% FC 98% FA 97% F7 ...

  2. 我的Android进阶之旅------>Android中查看应用签名信息

    一.查看自己的证书签名信息 如上一篇文章<我的Android进阶之旅------>Android中制作和查看自定义的Debug版本Android签名证书>地址:http://blog ...

  3. 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计

    要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight ...

  4. 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现

    我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...

  5. 我的Android进阶之旅------> Android为TextView组件中显示的文本添加背景色

    通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...

  6. 我的Android进阶之旅------> Android在TextView中显示图片方法

    面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用Tex ...

  7. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)

    在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的 ...

  8. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

    正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...

  9. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)

    对于游戏玩家而言,游戏界面上看到的"元素"千变万化:但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已.因此建立游戏的状态数据模型是实现游 ...

随机推荐

  1. bzoj 5092: [Lydsy1711月赛]分割序列

    5092: [Lydsy1711月赛]分割序列 Time Limit: 5 Sec  Memory Limit: 256 MBSubmit: 219  Solved: 100[Submit][Stat ...

  2. 超实用的Nginx极简教程,覆盖了常用场景

    概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...

  3. mybatis反向工程

    首先创建一个test类: 在main方法里写上如下代码: List <String> warnings = new ArrayList <String>(); boolean ...

  4. 2016北京集训测试赛(十六)Problem C: ball

    Solution 这是一道好题. 考虑球体的体积是怎么计算的: 我们令\(f_k(r)\)表示\(x\)维单位球的体积, 则 \[ f_k(1) = \int_{-1}^1 f_{k - 1}(\sq ...

  5. NVIDIA® Quadro® 四路缓冲 3D立体方案

    http://www.nvidia.cn/object/quadro_pro_graphics_boards_cn.html NVIDIA® Quadro® 专业显卡让地球学家以及时装设计师等许多专业 ...

  6. PocketBeagle 初高级设置

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正.本文使用markdown标记语言写成,为获得最好的阅读体验,请访问我的博客原文. 1. PocketBeagle Summary ​ ...

  7. 地图之CLLocationManager的使用 定位功能使用

    1.iOS8曾经使用CLLocationManager 1.导入头文件 <CoreLocation/CoreLocation.h> 2.创建位置管理者 CLLocationManager ...

  8. VMware厚置备延迟置零,厚置备置零,精简置备具体解释

    本文具体介绍VMware厚置备延迟置零,厚置备置零,精简置备的概念及选择使用 1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦 ...

  9. SOCKIT 在make时出现(target pattern contains no % stop)???

    Make错误(***target pattern contains no % stop) 1.   问题描述 在按照SoC_SW_Lab_13.0.pdf操作时候出现了下列图片的错误 2.   Bsp ...

  10. ui-router $transitions 用法

    1. //route redirection $transitions.onStart({to: 'manage'}, function (trans) { var params = trans.pa ...