Ⅰ 小米2s只要下载个mxplayer就什么格式的视频都支持了avi可不可以
当然可以。MX Video Player是近段时间出现的一款最优秀的媒体播放器软件,它能够播放几乎每一个影片档案,并且具备多核心的译码能力来处理你的影片档案和字幕。多核译码功能,MX Video Player是android平台上的第一款能够支持多核译码功能额的媒体播放器软件,根据在双核Android装置上的测试结果表明,它能够取得比单核译码播放器高达70%的效能。处理器优化,这款播放器针对主要的处理器做了深度的优化,包括ARMR NEON和NVIDIAR Tegra 2的编码译码器和渲染引擎。字幕滑动功能,当您滑动字幕文字,影片播放的位置也随之发生变化的文字显示的位置;清除文字功能;影片回放功能;手势功能;其他多达上百项的功能。
希望可以帮到你。
Ⅱ MXPlayer支持哪些格式
MX Player播放器安卓版支持3GP、AVI DIVX、F4V、FLV、MKV、MP4、MPEG、MOV、VOB、WMV、WEBM、XviD格式,并针对ARM NEON 和NVIDIA Tegra 2 CPU做了优化处理,通过S/W或H/W按钮就可以轻松的更改解码模式,安装后会根据CPU型号自动到市场下载对应的解码包。
特点:
a) 硬件解码 - 拥有最新的硬件解码器,更多视频能受益于硬件加速。
b) 多核心解码- MX Player 是 Android 平台上第一款多核心解码视频播放器,根据在多核设备上的测试,它比单核心解码效能提高将近70%。
c) 触屏缩放手势 - 在屏幕上能轻松地缩放及使用各种手势。
d) 字幕滑动功能 - 当您滑动字幕,视频播放位置将随字幕文字变化位置同步。
e) 儿童锁 - 让儿童保持专注而不必担心他们随意拨打电话或接触其他应用程序。 (需要插件)
f) ANDROID 4.1 - 完美支持Android 4.1 Jelly Bean。
Ⅲ 请问avi格式的视频在安卓系统手机上能看吗
avi有两种,压缩和不压缩的。如果是不压缩的,安卓手机肯定可以看。如果是压缩的,安卓手机没有解码器的话,不能看。可以安装mxplayer,无论是否压缩,都能看。
MX Player安卓版(手机高清视频播放器)V1.7.41
http://www.ucbug.cc/soft/7334.html
MX Player – 欣赏高清影片的最佳利器。
a) 硬件解码 – 拥有最新的硬件解码器,更多影片能受益于硬体加速。
b) 多核心解码 - 安卓第一款多核心解码影片播放器,根据在多核心设备上的测试,它比单核心解码效能提高将近70%。
c) 触控缩放手势 – 在萤幕上能轻松地缩放及使用各种手势。
d) 字幕滑动功能 – 当您滑动字幕,影片播放的位置将随字幕文字变化位置同步。
e) 儿童锁 – 让孩童保持专注而不必担心孩子随意拨打电话或接触其他应用程式。 (需要套件)
f) ANDROID 4.1 – 完整支援 Android 4.1 Jelly Bean。
*DTS好处是直接播放其他电脑/NAS共享文件。
官方下载:免费版和专业版区别就是谷歌广告。
当然,除了MX Player,还有以下软件安装后可以观看所有的avi格式(其实主要是安装了解码器):
BSplayer
http://shouji..com/soft/item?docid=7262846
DicePlayer播放器
http://shouji..com/soft/item?docid=7108236
RockPlayer2视频播放器
http://shouji..com/soft/item?docid=7215821
VPlayer影音版
http://shouji..com/soft/item?docid=5866986
MoboPlayer2
http://shouji..com/soft/item?docid=7605974
Mobo Video Player Pro
http://shouji..com/soft/item?docid=2628003
QQ影音
http://shouji..com/soft/item?docid=7508633
XBMC最强播放软件
http://shouji..com/soft/item?docid=7060419
Ⅳ android mediacodec有什么方法
Android 用MediaCodec实现视频硬解码
本文向你讲述如何用android标准的API (MediaCodec)实现视频的硬件编解码。例程将从摄像头采集视频开始,然后进行H264编码,再解码,然后显示。我将尽量讲得简短而清晰,不展示那些不相关的代码。但是,我不建议你读这篇文章,也不建议你开发这类应用,而应该转而开发一些戳鱼、打鸟、其乐融融的程序。好吧,下面的内容是写给那些执迷不悟的人的,看完之后也许你会同意我的说法:Android只是一个玩具,很难指望它来做靠谱的应用。
1、从摄像头采集视频
可以通过摄像头Preview的回调,来获取视频数据。
首先创建摄像头,并设置参数:
[java] view plain
cam = Camera.open();
cam.setPreviewDisplay(holder);
Camera.Parameters parameters = cam.getParameters();
parameters.setFlashMode("off"); // 无闪光灯
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPictureSize(camWidth, camHeight);
parameters.setPreviewSize(camWidth, camHeight);
//这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报错
cam.setParameters(parameters);
宽度和高度必须是摄像头支持的尺寸,否则会报错。要获得所有支持的尺寸,可用getSupportedPreviewSizes,这里不再累述。据说所有的参数必须设全,漏掉一个就可能报错,不过只是据说,我只设了几个属性也没出错。 然后就开始Preview了:
[java] view plain
buf = new byte[camWidth * camHeight * 3 / 2];
cam.addCallbackBuffer(buf);
cam.setPreviewCallbackWithBuffer(this);
cam.startPreview();
setPreviewCallbackWithBuffer是很有必要的,不然每次回调系统都重新分配缓冲区,效率会很低。
在onPreviewFrame中就可以获得原始的图片了(当然,this 肯定要 implements PreviewCallback了)。这里我们是把它传给编码器:
[java] view plain
public void onPreviewFrame(byte[] data, Camera camera) {
if (frameListener != null) {
frameListener.onFrame(data, 0, data.length, 0);
}
cam.addCallbackBuffer(buf);
}
2、编码
首先要初始化编码器:
[java] view plain
mediaCodec = MediaCodec.createEncoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(type, width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
然后就是给他喂数据了,这里的数据是来自摄像头的:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0)
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, 0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
if (frameListener != null)
frameListener.onFrame(outputBuffer, 0, length, flag);
mediaCodec.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
先把来自摄像头的数据喂给它,然后从它里面取压缩好的数据喂给解码器。
3、解码和显示
首先初始化解码器:
[java] view plain
mediaCodec = MediaCodec.createDecoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(mime, width, height);
mediaCodec.configure(mediaFormat, surface, null, 0);
mediaCodec.start();
这里通过给解码器一个surface,解码器就能直接显示画面。
然后就是处理数据了:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, mCount * 1000000 / FRAME_RATE, 0);
mCount++;
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
mediaCodec.releaseOutputBuffer(outputBufferIndex, true);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
}
queueInputBuffer第三个参数是时间戳,其实怎么写都无所谓,只要是按时间线性增加的就可以,这里就随便弄一个了。后面一段的代码就是把缓冲区给释放掉,因为我们直接让解码器显示,就不需要解码出来的数据了,但是必须要这么释放一下,否则解码器始终给你留着,内存就该不够用了。
好了,到现在,基本上就可以了。如果你运气够好,现在就能看到视频了,比如在我的三星手机上这样就可以了。但是,我试过几个其他平台,多数都不可以,总是有各种各样的问题,如果要开发一个不依赖平台的应用,还有很多的问题要解决。说说我遇到的一些情况:
1、视频尺寸
一般都能支持176X144/352X288这种尺寸,但是大一些的,640X480就有很多机子不行了,至于为什么,我也不知道。当然,这个尺寸必须和摄像头预览的尺寸一致,预览的尺寸可以枚举一下。
2、颜色空间
根据ANdroid SDK文档,确保所有硬件平台都支持的颜色,在摄像头预览输出是YUV12,在编码器输入是COLOR_FormatYUV420Planar,也就是前面代码中设置的那样。 不过,文档终究是文档,否则安卓就不是安卓。
在有的平台上,这两个颜色格式是一样的,摄像头的输出可以直接作为编码器的输入。也有的平台,两个是不一样的,前者就是YUV12,后者等于I420,需要把前者的UV分量颠倒一下。下面的代码效率不高,可供参考。
[java] view plain
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
这里的困难是,我不知道怎样去判断是否需要这个转换。据说,Android 4.3不用再从摄像头的PreView里面取图像,避开了这个问题。这里有个例子,虽然我没读,但看起来挺厉害的样子,应该不会有错吧(觉厉应然)。http://bigflake.com/mediacodec/CameraToMpegTest.java.txt
3、输入输出缓冲区的格式
SDK里并没有规定格式,但是,这种情况H264的格式基本上就是附录B。但是,也有比较有特色的,它就是不带那个StartCode,就是那个0x000001,搞得把他编码器编出来的东西送给他的解码器,他自己都解不出来。还好,我们可以自己加。
[java] view plain
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}
4、有时候会死在dequeueInputBuffer(-1)上面
根据SDK文档,dequeueInputBuffer 的参数表示等待的时间(毫秒),-1表示一直等,0表示不等。按常理传-1就行,但实际上在很多机子上会挂掉,没办法,还是传0吧,丢帧总比挂掉好。当然也可以传一个具体的毫秒数,不过没什么大意思吧。
Ⅳ android手机有默认解码器吗
实际上系统中存在的解码器可以很多,但能够被应用使用的解码器是根据配置来的,在/system/etc/media_codecc.xml中配置。这个文件一般由硬件或者系统的生产厂家在build整个系统的时候提供,一般是保存在代码的device/[company]/[codename]目录下的,例如device/samsung/tuna/media_codecs.xml。这个文件配置了系统中有哪些可用的codec以及,这些codec对应的媒体文件类型。在这个文件里面,系统里面提供的软硬codec都需要被列出来。
也就是说,如果系统里面实际上包含了某个codec,但是并没有被配置在这个文件里,那么应用程序也无法使用到!
在这里配置文件里面,如果出现多个codec对应同样类型的媒体格式的时候,这些codec都会被保留起来。当系统使用的时候,将后选择第一个匹配的codec。除非是指明了要软解码还是硬解码,但是Android的framework层为上层提供服务的AwesomePlayer中在处理音频和视频的时候,对到底是选择软解还是硬解的参数没有设置。所以虽然底层是支持选择的,但是对于上层使用MediaPlayer的Java程序来说,还是只能接受默认的codec选取规则。
但是Android提供的命令行程序/system/bin/stagefright在播放音频文件的时候,倒是可以根据参数来选择到底使用软解码还是硬解码,但是该工具只支持播放音频,不支持播放视频。
一般来说,如果系统里面有对应媒体的硬件解码器的话,系统开发人员应该是会配置在media_codecs.xml中,所以大多数情况下,如果有硬件解码器,那么我们总是会使用到硬件解码器。极少数情况下,硬件解码器存在,但不配置,我猜测只可能是这个硬解码器还有bug,暂时还不适合发布。
Ⅵ 安卓模拟器怎样解码
把安卓模拟器上app的默认解码改成硬件解码,但是点不动,下载了解码器也没用。相比其他安卓模拟器还有一个最重要的优点说掉了:没有边框,没有黑边,真正全屏。
把它设置成开机自启动,就是使用体验最近似安卓盒子的模拟器了。
Ⅶ 安卓视频解码器,这个安卓视频解码器的原理是什么安卓解码器一般在apk的哪个文件
据我所了解的,MX Player这款安卓影音播放器可以在安装软件之后搭配使用解码器,硬件解码和软件解码可以相互弥补不足。解码的原理,简单的理解就是解码器识别影音文件的编码方式,然后将其内部代码编译成手机硬件可识别并能表现出来的二进制代码。亦可理解成解码器认识出来影音文件,然后介绍给手机硬件,最终手机屏幕展现出能被人们看到的图像和声音。
安卓解码器一般在apk的那个文件?这句话不明白你要表达什么意思。apk是一个已经编译好的安卓手机软件格式,内部也是无数代码组成的。
Ⅷ 手机自带mediacodec吗
手机自带mediacodec。MediaCodec 是 Android 中的编解码器组件,用来访问底层提供的编解码器,手机是自带mediacodec的。
通常与MediaExtractor、MediaSync、MediaMuxer、MediaCrypto、MediaDrm、Image、Surface和AudioTrack一起使用,MediaCodec几乎是Android播放器硬解码的标配。
多媒体芯片的发展
在1996年MMX CPU问世之际,即打乱了多媒体芯片发展的时间表。被英特尔视为近10年来CPU革命性进展的大作MMX,借由CPU中新增的57个多媒体指令集、8个64位MMX暂存器及32 KB的Cache。
不仅提升了多媒体及通信程序的执行性能,亦颠覆了多媒体及通信产业的生态环境,且以后CPU亦将遵循此方向发展。
软件MPEG将取代硬件MPEGMPEG—l硬件解决方案在CPU功能较强的情况下,被软件MPEG取代掉了。MPEG2亦面临岌岌可危之境。MPEG硬件将谋求PC领域以外的新世界,转向进攻消费性电子产品。
低级Audio将遭受危机MMX CPU取代声卡。此时强调高品质、高层次的音效芯片将有脱颖而出的机会。未来可能将以On board或IC整合的形式,对声卡厂商造成不小的冲击,从而思索未来转型之道。
性能的提高MMX旨在增进绘图卡性能,而AGP也已成为提升系统芯片组与绘图芯片问的桥梁。因此,绘图卡将仍会持续,在绘图芯片上将朝影像、动画、图形加速、3D方向整合MMX,辅以影像绘图加速j枣片将使PC有更大的发挥。
Ⅸ 在android 平台实现硬解的大侠们,你们是怎么实现硬解码的
1、视频尺寸
一般都能支持176X144/352X288这种尺寸,但是大一些的,640X480就有很多机子不行了,至于为什么,我也不知道。当然,这个尺寸必须和摄像头预览的尺寸一致,预览的尺寸可以枚举一下。
2、颜色空间
根据ANdroid SDK文档,确保所有硬件平台都支持的颜色,在摄像头预览输出是YUV12,在编码器输入是COLOR_FormatYUV420Planar,也就是前面代码中设置的那样。 不过,文档终究是文档,否则安卓就不是安卓。
在有的平台上,这两个颜色格式是一样的,摄像头的输出可以直接作为编码器的输入。也有的平台,两个是不一样的,前者就是YUV12,后者等于I420,需要把前者的UV分量颠倒一下。
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
3、输入输出缓冲区的格式
SDK里并没有规定格式,但是,这种情况H264的格式基本上就是附录B。但是,也有比较有特色的,它就是不带那个StartCode,就是那个0x000001,搞得把他编码器编出来的东西送给他的解码器。
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}
Ⅹ 安卓智能无线全频段解码机主要功能是什么
安卓智能无线全频段解码器的主要功能:
1.读取与清除故障码:
有的解码器对故障码有比较详细的说明,比如是历史性故障码还是当前的故障码,故障码的次数出现几次。如果是历史性故障码就表示故障较早之前出现过。如今不出现了,但在控制单元ECU里面有一定的存储记忆。而当下故障码则表示是出现的故障,并且通过出现的次数来确定此故障码是否经常出现,当下故障码绝大部分和如今出现的系统故障有很大关系。
2.执行器作动测试功能:
我们可以利用解码器对一些执行器,像喷油嘴、怠速电机、继电器、电磁阀冷却风扇等进行人工控制,用以检测该执行器是否处于良好的工作状况,当我们在发动机怠速运转的时候对怠速电机进行作动测试,可以控制其开度的大小,随着怠速电机处于不同的开度,发动机怠速转速应该产生相应的高低变化,通过以上的作动测试我们就可以证实怠速电机本身及其控制线路处于正常状况。同样我们还可以在发动机运转时对燃油泵继电器进行控制,当断开燃油泵继电器时,发动机应会很快的熄火。
当然不同的解码器所能支持的作动测试功能是不一定相同的,有的支持较多的作动测试功能,有的就可能比较少,但不管是属于哪一种解码器,我们都应尽量利用其这种功能对工作情况有所怀疑的执行器进行动作测试,以便判断其是否属于正常工作状态。
3.示波器功能:
因为在解码器的数据流功能中,很多传感器和执行器的信号是采用电压。频率或其它并以数字的形式表示的,在发动机实际运转过程中,由于信号变化很快,我们很难从这些不断变化的数字中发现问题所在,所以我们可以利用解码器自带的示波器功能对电控发动机系统里的曲轴传感器信号。凸轮轴传感器信号、氧传感器信号。某些型号的空气流量计信号、喷油嘴信号、怠速电机控制信号。点火控制信号等一系列信号,用图示波形的方式直观的提供我们作参考。当我们拿所测信号波形与标准信号波形相比较,如有异常之处则表示该信号的控制线路或电子元件本身出现了问题,需要进一步详细检查。但如果利用示波器来检查电子信号也对维修技术人员提出了较高的汽车维修理论知识要求,需要维修技术人员能较熟悉被测传感器或执行器的工作、控制原理,并对示波器具有一定的操作技巧,能正确的观察波形(波峰、波幅等),否则很难利用好此项功能。
(10)android硬件解码器扩展阅读:
解码器是一种将信息从编码的形式恢复到其原来形式的器件。在丢失编码数据的时候,工作人员可以利用解码器恢复初始设置,也容易被不法分子利用,在一些无人看管的银行,犯罪分子在门禁刷卡系统上面装上自己的“解码器”,储户刷卡进门,银行卡信息便存在他们的解码器上。同时,他们在ATM机上安装了摄像头,用来拍摄储户的银行卡密码。他们一旦窃取了银行卡信息和密码,便通过互联网传给同伙,破译后进行“克隆”,随后用复制的“克隆卡”在异地取款。
解码器是一个重要前端控制设备。在主机的控制下,可使前端设备产生相应的动作。解码器,国外称其为接收器/驱动器(Receiver/Driver)或遥控设备(Telemetry),是为带有云台、变焦镜头等可控设备提供驱动电源并与控制设备如矩阵进行通讯的前端设备。通常,解码器可以控制云台的上、下、左、右旋转,变焦镜头的变焦、聚焦、光圈以及对防护罩雨刷器、摄像机电源、灯光等设备的控制,还可以提供若干个辅助功能开关,以满足不同用户的实际需要。高档次的解码器还带有预置位和巡游功能。