【发布时间】:2017-10-12 18:24:08
【问题描述】:
我用:
mediaPlayer.setVideoScalingMode(android.media.MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
但它不工作我想把视频放到屏幕上。
【问题讨论】:
-
你找到答案了吗?
标签: android video scale stretch
我用:
mediaPlayer.setVideoScalingMode(android.media.MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
但它不工作我想把视频放到屏幕上。
【问题讨论】:
标签: android video scale stretch
VIDEO_SCALING_MODE_SCALE_TO_FIT是默认值,所以调用到
mediaPlayer.setVideoScalingMode(android.media.MediaPlayer
.VIDEO_SCALING_MODE_SCALE_TO_FIT);
不会有任何影响。
http://developer.android.com/reference/android/media/MediaCodec.html#setVideoScalingMode(int)
默认为“缩放以适应”。
例如,获取以下基于 MediaCodec 的播放器:
https://github.com/google/ExoPlayer
并通过在 MediaCodecVideoTrackRenderer.java 中设置 VIDEO_SCALING_MODE_SCALE_TO_FIT 或 VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING进行实验
再补充一点。
您想要完成的工作可以通过以下方式完成:
在 SurfaceView 上实现 onMeasure。
获取视频大小。
调用 setMeasuredDimension 时使用不同的值,具体取决于您是否要拉伸、调整或裁剪视频:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = getDefaultSize(videoWidth, widthMeasureSpec);
int height = getDefaultSize(videoHeight, heightMeasureSpec);
// Do not change w & h for screen fill
setMeasuredDimension(width, height);
// Experiment by changing width & height compared to the video size
// for different results
}
【讨论】:
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING 现在无法正常工作。这是一个已知问题:github.com/google/ExoPlayer/issues/1428