android mp4宽高,Android:MediaPlayer视频宽高比问题
我遇到了一个我无法解决的问题.我正在使用MediaPlayer类来播放视频;但是,我总是失去原有的宽高比.这里提到了媒体播放器代码和xml代码.我尝试了很多东西,但仍然无法解决问题.我需要保持原始的宽高比.我已经在
Android Manifest文件中将此活动声明为全屏.我还在媒体播放器代码之后附加了xml代码.请建议我.
private class ErrorListener implements OnErrorListener {
// FIXME: @Override
public boolean onError(MediaPlayer mp, int what, int extra) {
String message = "Unknown error";
switch (what) {
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
message = "Unable to play media";
showError(message);
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
message = "Server failed";
showError(message);
break;
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
message = "Invalid media";
showError(message);
break;
}
return false;
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.videoview);
Intent intent = getIntent();
uri = intent.getData();
new loadMovie().execute();
mPreview = (SurfaceView) findViewById(R.id.videoview);
mPreview.bringToFront();
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaPlayer = new MediaPlayer();
}// onCreate Method Ends
private void playVideo() {
doCleanUp();
try {
mediaPlayer.setDataSource(this, uri);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setDisplay(holder);
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnErrorListener(new ErrorListener());
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaController = new MediaController(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mediaController.show();
return false;
}
// --MediaPlayerControl
// methods----------------------------------------------------
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
// End of MediaPlayer
// Controls--------------------------------------------------------
// ------------------------
public void onPrepared(MediaPlayer mediaPlayer) {
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.videoview));
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
playVideo();
}
public void surfaceDestroyed(SurfaceHolder arg0) {
}
private void startVideoPlayback() {
holder.setFixedSize(mVideoWidth, mVideoHeight);
mediaPlayer.start();
}
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
if (width == 0 || height == 0) {
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
public void onCompletion(MediaPlayer arg0) {
}
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
private void releaseMediaPlayer() {
mediaPlayer.release();
mediaPlayer = null;
}
private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
这是XML:
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
任何人都可以告诉我如何保持视频的宽高比?
android mp4宽高,Android:MediaPlayer视频宽高比问题相关推荐
- android 测量字体宽高,Android中测量Text的宽度和高度
@(Android技术文章) 个人博客地址: 斯科特安的时间 Android中,在自定义View中通过Canvas绘制文字时,经常需要测量文字的宽度和高度. Paint.measureText (测量 ...
- android mp4添加滤镜,Android 视频外部滤镜:挂件、贴纸,或美颜效果
视频外部滤镜 1 使用场景 当 SDK 自带的美颜无法满足需求,例如需要做挂件.贴纸,或者美颜效果无法达到预期时,建议开发者使用外部滤镜功能. 对于比较复杂的场景,例如想要用摄像头画面做图层混合,建议 ...
- js 获取上传图片和视频的宽高,还有视频的时长
场景: 当产品经理告诉你说:我们需要限制上传的图片或视频的尺寸,不符合要求不允许上传,这个时候你该怎么做? 不用多想,很明显我们需要想办法拿到图片或视频的宽度,然后和预期的尺寸进行对比过滤,就能轻易实 ...
- LivePlayer.js免费直播、点播播放器如何自适应div宽高集成播放视频
LivePlayer网页直播.点播播放器 资源下载:https://www.liveqing.com/docs/download/LivePlayer.html 使用说明:https://www.li ...
- php获取屏幕的宽高,JS获取屏幕宽高
Javascript:网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document. ...
- 原生js获取宽高与jquery获取宽高的方法的关系
说明:1.因为获取高度的情况跟获取宽度的情况一样,所以以下只说获取宽度的情况. 2.以下所说的所有方法与属性所返回的值都是不带单位的. 3.为了方便说明,以下情况采用缩写表示: obj -> ...
- hwd分别是长宽高_衣柜长宽高标准尺寸一般是多少 衣柜怎么保养
一般的话,我们在市面上购买衣柜的时候会考虑尺寸的问题,因为家里房子的大小不相同,所以选择的尺寸也不一样,如果买的太大了家里就放不下,所以,大家一定要看一下衣柜长宽高的标准尺寸一般是多少,大家可以根据标 ...
- css图片宽高自适应盒子(宽>高就限制宽,高>宽就限制高)
效果图: 宽>高就限制宽 即宽度100% ,高度自动.例如:19201088 高>宽就限制高 即高度100%,宽度自动.例如:19442592 很多时候图片宽高比不固定,而且作为一个前端, ...
- android获取导航栏宽高,Android获取屏幕的宽高度、状态栏、标题栏、导航栏、编辑区域高度...
目录 0.相关文章: 1.获取屏幕款高度 代码: /** * 获取屏幕宽度 * * @param context 上下文对象 * @return int */ public static int ge ...
最新文章
- 单片机简单的计算器c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
- 新鲜出炉!年度10篇新颖到出格的 AI 论文(附链接)
- 【51NOD1287】加农炮
- 【数据平台】Python解析Ngnix日志
- 基于知识图谱的问答系统(以医疗行业为例)
- 1. Spring boot 之热部署
- c语言迪思卡尔算法,【论文】数字化的意匠_数字化设计与造型的认知学反思_谭峥.pdf...
- 亚马逊 html格式转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...
- 基于JAVA+SpringMVC+MYSQL的医院皮试管理系统
- java中中的赋值运算符_Java中的赋值运算符
- mysql数据库一列多值查询
- java sha1工具类_SHA1算法工具类
- 自己动手实现STL 02:构造析构的基本工具construct()和destroy()(stl_construct.h)
- 我为什么要使用Webpack?
- 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
- linux 组态软件,基于嵌入式Linux的组态软件实时数据库的设计
- j2me 关于MIDP 读取jad文件
- mysql pxc 使用_MySQL PXC集群安装配置
- 数据结构--逻辑结构
- 论文笔记1 MOEFL Multi-objective Evolutionary Federated Learning
热门文章
- Jedis无法远程连接阿里云服务器的redis问题
- 计图(Jittor) 1.1版本:新增骨干网络、JIT功能升级、支持多卡训练
- TensorFlow Keras API用法
- RADAR和LIDAR区别分析
- 嵌入式C程序基础与编程结构
- Laravel/Lumen 使用 Redis队列
- zookeeper原理特点案例
- ValueError: max() arg is an empty sequence
- failed to load external entity file:/C:/Users/fmm/.AndroidStudio3.4/config/options/updates.xml
- Java 二进制,八进制,十进制,十六进制