android-根据exoplayer演示应用程序中视频的长宽比更改表面视图的长宽比
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android-根据exoplayer演示应用程序中视频的长宽比更改表面视图的长宽比,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3291字,纯文字阅读大概需要5分钟。
内容图文
![android-根据exoplayer演示应用程序中视频的长宽比更改表面视图的长宽比](/upload/InfoBanner/zyjiaocheng/664/046935e275604365ac771a88860e988a.jpg)
我已使用以下代码在Android应用中实现了ExoPlayer.
String versionName;
try {
String packageName = getPackageName();
PackageInfo info = getPackageManager().getPackageInfo(packageName, 0);
versionName = info.versionName;
} catch (PackageManager.NameNotFoundException e) {
versionName = "?";
}
player = ExoPlayer.Factory.newInstance(2);
Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
DataSource dataSource = new DefaultUriDataSource(this, null, versionName);
MediaPresentationDescriptionParser parser = new MediaPresentationDescriptionParser();
UriDataSource manifestDataSource = new DefaultUriDataSource(this, versionName);
ManifestFetcher<MediaPresentationDescription> manifestFetcher = new ManifestFetcher<>(passedWorkoutObject.workoutMediaURL, manifestDataSource, parser);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(
Uri.parse(VIDEO_URL), dataSource, allocator, BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
MediaCodecVideoTrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(
this, sampleSource, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
player.prepare(videoRenderer, audioRenderer);
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
player.setPlayWhenReady(true);
control = new PlayerControl(player);
但是问题是我需要播放所有纵横比的视频.如何调整surfaceView以适合视频的大小,而不是相反?
解决方法:
请记住,我在我的项目中将AndroidManifest中的android:screenOrientation =“ sensorLandscape”用于包含ExoPlayer的Activity,这是根据视频的长宽比更改SurfaceView的长宽比的方法.
1.将SurfaceView放入将更改尺寸的容器(FrameLayout):
<FrameLayout
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBlack"
android:focusable="true"
android:keepScreenOn="true">
<FrameLayout
android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</FrameLayout>
</FrameLayout>
2.根据视频的长宽比更改容器的大小:
private void applyAspectRatio(FrameLayout container, SimpleExoPlayer exoPlayer) {
float videoRatio = (float) exoPlayer.getVideoFormat().width/exoPlayer.getVideoFormat().height;
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
float displayRatio = (float) size.x/size.y;
if (videoRatio > displayRatio) {
Log.d(TAG, "applying " + videoRatio + "aspectRatio");
container.getLayoutParams().height = Math.round(container.getMeasuredWidth()/videoRatio);
container.requestLayout();
} else {
Log.d(TAG, "applying usual aspectRatio");
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.gravity = CENTER;
container.setLayoutParams(params);
}
}
3.将此applyAspectRatio()方法放入Activity或Fragment的onPlayerStateChanged回调方法中(必须实现ExoPlayer.EventListener接口):
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == ExoPlayer.STATE_READY) applyAspectRatio();
}
内容总结
以上是互联网集市为您收集整理的android-根据exoplayer演示应用程序中视频的长宽比更改表面视图的长宽比全部内容,希望文章能够帮你解决android-根据exoplayer演示应用程序中视频的长宽比更改表面视图的长宽比所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。