播放器

来源:互联网 发布:高棉帝国 知乎 编辑:程序博客网 时间:2024/03/29 15:18

mediaplayer的生命周期.

 

1. 当mediaplayer被new出来的时候处于idle状态.(空闲状态)

   mediaPlayer.reset()

 

   之前:可以设置错误的监听器.

2.setDataSource() 设置数据源. 初始化完毕.

 

3.prepare() 准备开始播放视频或者音频.HD

   prepareAsync() 异步准备.

  

 

4.start() 开始播放


 

介绍:这款播放器是基于FMpeg音视频解码库的Vitamio框架和系统的MediaPlayer结合的方式开发的,支持flv、rmvb、mkv、mov、avi、mp4等多种视频格式,mp3、ogg、wma、mid、m4a等多种音频格式,实现了网络视频和本地视频播放,网络音频和本地音频的播放等功能。

 

技术:软解码和硬解码的使用,json解析服务端数据,采用Popuwindow显示播放控制器

 

播放流程:

视频播放器(网络视频,本地视频),音频播放器(网络音频,本地音频)

Andoid默认支持视频格式是:mp4,3gp,wmv

Andoid默认支持音频格式是:mp3,ogg

 

播放原则:先用系统播放器去播放,当系统播放器播放出错的时候,切换到Vitamio播放器;

  我已经知道系统播放器播放不了的,直接用Vitamio播放器

 

(支持在线视频,可以从Youku,或酷六客户端调用我们的播放器进来播放)
用到了 getIntent().getData(); 这个负责得到Url,当然还有单独的播放方法根据这URL地址去播放,但别忘了要功能清单文件里注明
   <data android:mimeType="video/*"android:scheme="http"/>网络视频
    <data android:mimeType="video/*"android:scheme="file"/>本地视频
   <data android:mimeType="audio/*"android:scheme="http"/>网络音频
   <data android:mimeType="audio/*" android:scheme="file"/>本地音频

 

界面:加载控制视频界面的是一个PopupWindow,作为一种用户提醒而且其开销也比activity要小,实现了播放,暂停,上一个(后退),下一个(判断一下是否是文件列表,如果是就播放下一个视频否则就快进),声音控制(0-15),自定义一个类控制PopupWindow显示和隐藏的,设置6秒隐藏,用到了handlerMessage消息机制,做了一个方法,6s中之后发一个消息,调用隐藏控制面板的方法

 

 

硬解码和软解码的大概原理:

硬解码:所谓的硬解码就是用系统的接口实现的播放器,那么就可以叫做用硬解码。

软解码:所谓的软解码就是不用系统的接口实现的播放器,那么就可以叫做用软解码。

 

a,万能解码开源框架简介:(m3u8)利用开源VLC、ffmpeg(FFmpeg是一个开源免费跨平台的视频和音频流方案)、vitamio。

 

Vitamio框架由哪些组成(老版本的)

 

1,vitamio.jar

2,Vitamio-Demo

3,解码器:ARMv-7-NEON.apk;,ARMv6.apk,ARMv5.apk,VFP.apk

 

Vitamio新版本的使用2.0,最新版本是3.0

总结:

1,不需要4个解码器;

2,软件大小减小;

3,在目前的主流手机上,性能优越;

 

 

手机CPU架构:ARMv-7_NEON,(小米手机的解码器)

a,只可以安装一个。

b,多款软件都用Vitamio的话,只要系统安装了解码器,就不会再安装了。

c,1,先检查系统是否安装了Vitamio解码器(ARMv-7-NEON.apk;,ARMv6.apk,ARMv5.apk,VFP.apk);

2,如果没有安装就提示安装。

3,安装好了后继续播放。

 

 

 

错误监听:1.弹出错误提示2.播放一半的时候,可能由于wifi环境不好造成的播放失败,自动重试3次,如果都出错在弹出错误提示3.

 

用Vitamio

ARMv-7-NEON.apk;,ARMv6.apk,ARMv5.apk,VFP.apk

实现万能解码和电视直播要主要的步骤

1,  先要根据手机的CPU型号安装对应的解码器,把解码器放在assets下,检查是否安装解码器,根据包名判断是否安装了,如果没有安装解码器提示安装,(可以判断是否安装了其他的播放器)安装的时候需要把这个解码器的apk文件复制到SD卡上或者没有SD卡放在缓存目录下面


2,  通过cat/proc/cpuinfo命令得到手机CPU型号,根据型号安装对应的解码器;


3, 内部安装解码器:需要读取手机内部文件,需要设置读写权限,


4,用Vitamio的jar包。

 

 

网络协议:支持以下协议的音频和视频播放;

MMS,RTSP(RTP,SDP),HTTP流式传输(progressivestreaming),HTTP Live Streaming(M3U8),Android2.1+

电视台与服务器传输数据要通过一种协议,通过这种协议,这种协议有很多种格式有很多种

 

 

流媒体:支持m3u8、HTTP、RTSP、MMS 等主流流媒体格式

流媒体,流媒体使之以流的方式在网络中传输音频、视频和多媒体文件的形式。,这些流媒体有各种协议,通过这种协议为载体,在传具体流过来,就是具体数据,得到流之后解析,不断请求之后返回回来,

 

 

Vitamio集成了许多音频和视频的解码包,相比android内置默认的媒体格式,这里列出了一些:Divx/xvid,wmv,flv,ts,rmvb,mkv,mov,m4v,avi,mp4,3gp

 

 

 

问题:

1.你的播放器怎么使用的解码方式: 软解硬解都用了,硬解部分重新封装了系统播放器的逻辑,

如果播放一个视频,系统播放不了的我会跳转到vatimio播放

 器,而且跳转过程界面都是一样的你会感觉是在同一个播放器

 

2.如何实现高质量的视频播放

M3u8:有的视频是高清的比较大,如果加载全部的时间可能比较长,把大视频切成一小块,所以用分块加载的方式,用m3u8的模式,但是会增加运行成本,带宽和流增加20-30%,拖动的时候速度也增加了,

 

3.目前各个视频网站android客户端采用的是什么格式的视频文件呢?

 mu3u8,flv

 

 4、各视频网站android客户端电影包含数据?

   大部分视频网站:json,xml

电影网站包含的数据,用json封装数据,以前用xml,xml数量比较多,对于移动终端来说当然流量越少越好,json数据更轻量级,所以用json

 

可扩展json和xml对比:

可读性: JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
可扩展性: XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
编码难度: XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
解码难度: XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
流行度: XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(AsynchronousJavascript and JSON)了。

 

5.如果遇到卡的情况怎么办:

监听卡的:

1、2.3以后才有的:videoview中mediaplayer中的设置setOnInfoListener()监听卡的方法,回调一个卡的情况和一个非卡的情况,如果播放网络的有可能存在网络不好的情况,卡的时候就要旋圈圈,给个提示播放时候卡和拖动的时候卡都旋圈圈,

2、2.2以前的:消息机制,一秒钟给自己发个消息,判断当前这一秒的时间减去上一秒的时间,如果一秒钟播过的内容还没有大过500毫秒,就认为卡了,就把圈圈显示出来否则就隐藏,

 

6.电视直播与手机直播:

手机直播:与电视直播走的信号不一样,电视台整理数据通过卫星信号传给电视,模拟信号,手机需要转码转换成数字信号会延迟一些,用手机需要转码,转换成数字信号,封装成文件,

变成地址,传递给播放器,(重模拟信号转换成数据信号的过程)

 

 

7.为什么不直接用第三方播放器

系统播放器肯定比第三方好,只针对这个设备,解码器要针对不同的CPU型号安装相应的解码器才能体现更好的性能,效果最好

         第三方播放器用在所有播放器上要考虑兼容性,不是针对一个设备做的,效果不是最佳8.视频花屏:用的第三方播放器但是vitamio解码器不对

 

9. 同样的视频有可能考到手机上不一定能播放

电脑和手机的码率是不一样的,我们可以在一个视频列表中装载四种码率,高中低,当网络好的跳到高码率的网速不好就跳到低码率的,为了保证至少能听到声音

 

网页形式浏览之后播放的视频