阿里云移动端播放器高级功能---画面控制

基本介绍
经常遇到一些开发者问:
1.我们播放的时候,会有黑边怎么处理?尤其是在类似于抖音,直播这样的场景下,如果视频有黑边,很影响画面的视觉效果。而阿里云播放器提供了缩放功能,用来去除黑边,达到视频全屏的效果。
2.直播时摄像头采集经常会遇到反向的问题,就是采集出来的视频画面中的字是反的,对于这种情况怎么处理呢?阿里云播放器提供了镜像的功能,可以水平和垂直镜像,让画面变成你想要的样子。
3.对一些横屏拍摄的视频同时我们提供了旋转功能,可以选择90、270度,旋转之后就可以实现全屏渲染了。

渲染模式设置
Android接口
播放器提供了setVideoScalingMode方法提供去改变画面的大小。它可以设置两种方式:

  1. VIDEO_SCALING_MODE_SCALE_TO_FIT
    按照视频的宽高比,放到SurfaceView(TextureView)中。不会剪裁视频画面,画面的内容是完整的。比如我的SurfaceView是1920:1080的,然后播放一个1280x720的视频,如果使用FIT模式,最终显示的话,播放器把1280x720这个视频按照原始比例放大,直到宽或者高跟SurfaceView的宽或者高一直,最终只有上下有黑边或者左右有黑边。
  2. VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
    按照视频的宽高比,将画面铺满SurfaceView(TextureView)中。此时会剪裁视频的画面,可能两边有部分内容不会被显示。crop方式肯定是没有黑边的。

播放器默认的缩放效果为:VIDEO_SCALING_MODE_SCALE_TO_FIT。
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING 是以牺牲画面的完整性为代价,从而实现了没有黑边。所以,当画面的宽高比与实际的宽高比相差太大时,不太合适使用此配置。

我们来看具体的显示效果,比如播放一个竖屏的视频。

1.设置VIDEO_SCALING_MODE_SCALE_TO_FIT。即按照视频的宽高比,放到SurfaceView(TextureView)中。

if (aliyunVodPlayer != null) {
aliyunVodPlayer.setVideoScalingMode(IAliyunVodPlayer.VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT);
}

可以看到,有明显的黑边,但是画面会被完整的显示出来。

2.设置VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING。即:按照视频的宽高比,将画面铺满SurfaceView(TextureView)中。

if (aliyunVodPlayer != null) {
aliyunVodPlayer.setVideoScalingMode(IAliyunVodPlayer.VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
}

可以看到,黑边没有了,但是画面的部分内容已经看不到了。

iOS接口
iOS提供了一个属性来获取和设置渲染模式

@property(nonatomic, readwrite) ScalingMode scalingMode;

enum {
scalingModeAspectFit = 0,
scalingModeAspectFitWithCropping = 1,
};
typedef NSInteger ScalingMode;
和Android类似,scalingModeAspectFit对应Android的VIDEO_SCALING_MODE_SCALE_TO_FIT,scalingModeAspectFitWithCropping对应Android的VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING,具体接口说明和效果和Android一样,在这里不在赘述。

镜像设置
iOS接口
iOS提供了如下接口来实现镜像的设置,支持水平和垂直镜像。

-(void) setRenderMirrorMode:(RenderMirrorMode)mirrorMode;

enum {
renderMirrorModeNone = 0,
renderMirrorHorizonMode,
renderMirrorVerticalMode,
};
typedef NSInteger RenderMirrorMode;
水平镜像

垂直镜像

Android接口
public void setRenderMirrorMode(VideoMirrorMode mirrorMode);
enum VideoMirrorMode {
VIDEO_MIRROR_MODE_NONE(0),
VIDEO_MIRROR_MODE_HORIZONTAL(1),
VIDEO_MIRROR_MODE_VERTICAL(2);
}
旋转设置
iOS接口
iOS提供了如下接口来实现旋转的设置,旋转支持0、90、180、270度的旋转。

-(void) setRenderRotate:(RenderRotate)rotate;
enum {
renderRotate0 = 0,
renderRotate90 = 90,
renderRotate180 = 180,
renderRotate270 = 270,
};
typedef NSInteger RenderRotate;

Android接口
public void setRenderRotate(VideoRotate rotate);
public static class VideoRotate {
public static VideoRotate ROTATE_0 = new VideoRotate(0);
public static VideoRotate ROTATE_90 = new VideoRotate(90);
public static VideoRotate ROTATE_180 = new VideoRotate(180);
public static VideoRotate ROTATE_270 = new VideoRotate(270);
}

原文地址:https://blog.51cto.com/14031893/2358434

时间: 2024-08-24 11:07:00

阿里云移动端播放器高级功能---画面控制的相关文章

阿里云移动端播放器高级功能---视频下载

基本介绍优酷.爱奇艺.腾讯等主流的视频类App都有视频离线下载的功能,主要目的是在wifi下将视频离线在本地,然后在无网或者4G的情况下去观看离线视频.那么阿里云播放器也提供了视频下载的功能.这个功能主要针对的是点播视频,也就是vid播放的视频的下载. 主要问题m3u8如何下载?我们知道m3u8是一个索引文件,真正的视频文件是各个ts的分片,那么如何下载成一个完成的视频呢?如何对视频下载进行多线程控制?在一些app中,多个视频同时下载被认为是高级VIP才有的功能.如何实现断点续传?当在下载过程中

阿里云移动端播放器高级功能---截图和音频波形

基本介绍如果用户对视频播放中的某一帧画面特别感兴趣,可以使用截图功能将这一帧视频保存起来.另外有一种场景想知道是否有声音,或者想感知声音的大小震动频率等,可以通过显示一个声音的波形来形象的表示.如下图所示:那么播放器提供了类似的方法可以让用户有办法去实现音频波形这个功能.那么这种通常在音乐播放器中比较常见,或者在直播场景中来标识对方讲话是否有声音等,有一定的应用场景. 视频截图实现接口iOS接口如下: /** 功能:截取当前正在播放图像 /-(UIImage) snapshot;Android接

【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(三) 针对在线服务的资源强稳定

免费开通大数据服务:https://www.aliyun.com/product/odps 转载自xingbao 各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第三篇,今天主要介绍针对在线服务的资源强稳定 一.FuxiMaster简介 FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示: 作为调度器,目前FuxiMaster支持的功能主要有: 1.多租户管理 2.支持FIFO/FAIR调度策略 3.针对在线服务保持资源强稳定(

实现了一下Mp3播放器的功能

实现了一下Mp3播放器的功能 简单的实现了一下Mp3播放器的功能,见面比较的不美好,讲 究看一下就好了. 主要功能: 1.显示文件列表,主要参照了一位前辈的代码,谢咯. 2.可以实现播放开始,暂停. 3.文件过滤 Java代码  收藏代码 return f.isDirectory() || f.getName().endsWith (".mp3"); 其实还有很多想实现的: 1.进度条. 2.按键进入下一首歌. 3.美化一下. =============================

腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项

例子下载地址 https://www.lanzous.com/i2zsv5g      GIT就不用了麻烦的不行 本人安卓刚学 就上X5内核弄了老长时间由于对maven 和idea不熟悉刚开始导包都是问题(就业人员勿参考,因为此文没有水平) 先上图 解决了侧边填充不满问题(明白什么意思把?播放器侧边和安卓侧边有距离贼难看) 参考了http://www.cocoachina.com/cms/wap.php?action=article&id=25099 这个腾讯的相当于其他开源的播放器或者说浏览器

尝试在阿里云的Linux服务器器上安装拥有图形界面的Pycharm

在Linux服务器上跑Python项目发现每次从本地上传文件太过麻烦,于是打算在服务器上安装Pycharm直接写Pycharm代码.   去Pycharm的官网下载Linux版本(支持正版于是我下载了社区版) 在服务器上建立一个名为Pychar文件. 通过winSCP软件吧刚刚下载好的Linux版本的Pycharm上传到服务器的Pycharm文件夹 解压文件 tar xfz pycharm-community-2019.3.3.tar.gz 然后打开Pycharm文件下的bin 输入命令运许bi

对电影播放器,网络游戏画面截图,则显示一片黑,怎么办?

我们先来分析一下原因: 这里引用一段话: 对于不少视频播放软件来说,他们都是使用 direct show 来快速显示视频的,这种视频画面,一般的 screen capture 是无法截取的,只能通过一个 hook 来实现对 layer 层的截取,而且效果非常差,对于一个 24ps 的视频,占用 cpu 非常高. (kmp,smplayer,qvod,qq影音都使用 driect show. 但非常奇怪,暴风影音不是使用 direct show(我估计是使用 direct3d 或者opengl )

视频内容谁来保护?阿里云视频加密技术架构及原理解读

视频行业的从业者--尤其是在线教育.财经分析等重视内容版权的播放平台都知道,视频安全是一个非常重要的基础需求.用户通过一次付费行为,就可以拿到付费视频的播放URL,将播放URL进行二次分发,这种行为叫做盗链:用户直接将视频下载到本地,然后再进行二次上传分发,这种行为叫做盗播,这两种行为都会给内容版权方造成十分严重的经济损失,面对日渐增多的盗链和盗播情况,我们应该怎么样去保护内容呢? 阿里云最新推出的视频加密解决方案对视频版权的保护可以从视频处理的各个环节来分别实现.阿里云通过转码.播放.分发等传

使用ivx制作音乐播放器的经验总结

今天我们要使用ivx制作一个音乐播放器,功能包括控制音乐的播放.暂停,能够通过点击或者拖拽调节音乐的播放进度,下面说一下具体的实现方法.一.demo布局首先看一下demo的结构,横幅下两个文本组件用于展示音乐信息,其余内容放置在画布中,布局上可以分为一个播放/暂停模块和一个进度条模块,分别放置在两个对象组中,另外还有一些变量.动作组和触发器.二.音乐组件既然是音乐播放器,自然就需要添加一个音乐组件啦.在素材资源地址里上传我们的音乐素材,这里注意一下如果音频素材比较大的话不建议开启预加载模式.三.