Android视频框架--Vitamio

前言:

打造属于自己的专属播放器,在这里与大家见面了,视频都很熟悉,关于Android 图片  文字 什么的 当然也有视频了,今天总结了关于这个框架的一点东西与大家分享。

下载Vitamio:

框架当然需要下载官方的了,最新的Vitamio在这里。

Vitamio介绍:

Vitamio是一个支持所有Android设备的多媒体框架。Vitamio与Android默认的MediaPlayer工作方式相似,但包含更加强大的功能!

Vitamio的中文名称为“维他蜜”
Vitamio 是一款 Android 平台上的全能多媒体开发框架。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。到目前,全球已经有超过 1000 种应用在使用 Vitamio,覆盖用户超过 2亿。

Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在 Android 上支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。
支持 ARMv6 和 ARMv7 两种 ARM CPU,同时对 VFP, VFPv3, NEON 等指令集都做相应优化。

支持 Android 2.1+ 系统,支持超过 95% 的 Android 市场。同时 Android 2.1 之前的系统也基本支持,不过没做详细测试。

Vitamio导入:

Studio导入见导入
Eclipse导入 File -> Import -> Android -> Existing Android Code Into Workspace来导入工程,然后改一下工程名称即可。 将VitamioBundle工程作为Android Library引入Demo工程使用即可。

Vitamio--VideoView类:

public class VideoView extends SurfaceView implements MediaController.MediaPlayerControl
用于播放视频文件。VideoView可以加载各种来源的图像(如资源或ContentProvider),注意计算视频尺寸,以便在任意布局管理器中使用,它还提供了诸如缩放等显示选项。
VideoView也提供封装了许多MediaPlayer的方法,例如getVideoWidth、setSubShown。

Vitamio--MediaPlayer类:

MediaPlayer可控制播放音乐/视频和网络流。可以从VideoView找到使用这个类的方法。

使用Vitamio:

布局引用:
播放视频:
//测试视频  需要联网设置
		vv.setVideoPath("http://localhost:8080/moves/video.wmv"); //设置播放路径
		vv.setMediaController(new MediaController(this));
		vv.setVideoLayout(VideoView.VIDEO_LAYOUT_STRETCH, 0);
		// 设置video的控制器
		vv.setMediaController(new MediaController(this));
		vv.requestFocus();
		vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
		    @Override
		    public void onPrepared(MediaPlayer mp) {
		    	// optional need Vitamio 4.0
		    	mp.setPlaybackSpeed(1.0f);
		    }
		});
		//当播放完成后,从头开始
		vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.seekTo(0);   //转到第一帧
                mediaPlayer.start();     //开始播放
//                loading.setVisibility(View.GONE);
            }
        });

使用Vitamio——问题解决:

dlopen("nulllibstlport_shared.so") failed: dlopen failed: library "nulllibstlport_shared.so" not found
unloadOMX failed java.lang.UnsatisfiedLinkError: Native method not found: io.vov.vitamio.MediaPlayer.unloadOMX_native:()V
这样的报错需要在你的video activity里面的oncreate里面添加
Vitamio.isInitialized(this);
即可。

另外,在播放视频时出现
Android视频框架--Vitamio_第1张图片
情况时,提示你的这个视频无法播放,这个就有点无语了。

ps:这里的视频格式 和 你的安卓版本都有影响的。更多的请参考:https://www.vitamio.org/docs/Basic/2013/0505/4.html#toc-vitamiowu-fa-shi-yong-de-cuo-wu

Vitamio添加辅助功能:

public static final int VIDEO_LAYOUT_ORIGIN
缩放参数,原始画面大小。
常量值:0

public static final int VIDEO_LAYOUT_SCALE
缩放参数,画面全屏。
常量值:1

public static final int VIDEO_LAYOUT_STRETCH
缩放参数,画面拉伸。
常量值:2

public static final int VIDEO_LAYOUT_ZOOM
缩放参数,画面裁剪。
常量值:3

公共方法 

public void setVideoLayout(int layout, float aspectRatio)
获取扫描视频的Uri。
参数
layout 缩放参数
aspectRation 宽高比,为0将自动检测。

public boolean isValid()
Surface是否有效。 参见Surface的isValid方法。

public void setVideoPath(String path)
设置视频路径。

public void setVideoURI(Uri uri)
设置视频URI。(可以是网络视频地址)

public void stopPlayback()
停止视频播放,并释放资源。

public void setMediaController(MediaController controller)
设置媒体控制器。
参数
controller 媒体控制器,注意是io.vov.vitamio.widget.MediaController。

public void setOnPreparedListener(OnPreparedListener l)
注册一个回调函数,在视频预处理完成后调用。在视频预处理完成后被调用。此时视频的宽度、高度、宽高比信息已经获取到,此时可调用seekTo让视频从指定位置开始播放。

public void setOnCompletionListener(OnCompletionListener l)
注册一个回调函数,视频播放完成后调用。

public void setOnErrorListener(OnErrorListener l)
注册一个回调函数,在异步操作调用过程中发生错误时调用。例如视频打开失败。

public void setOnBufferingUpdateListener(OnBufferingUpdateListener l)
注册一个回调函数,在网络视频流缓冲变化时调用。

public void setOnSeekCompleteListener(OnSeekCompleteListener l)
注册一个回调函数,在seek操作完成后调用。

public void setOnSubtitleUpdateListener(OnSubtitleUpdateListener l)
注册一个回调函数,在字幕需要显示时调用。

public void setOnInfoListener(OnInfoListener l)
注册一个回调函数,在有警告或错误信息时调用。例如:开始缓冲、缓冲结束、下载速度变化。

public boolean onTouchEvent(MotionEvent ev)
处理显示/隐藏MediaController。

public void start()
开始播放。

public void pause()
暂停播放。

public void suspend()
挂起(暂时没有实现功能)

public void resume()
恢复播放。

public long getDuration()
获取视频播放时长。

public long getCurrentPosition()
获取当前播放位置。

public void seekTo(long msec)
设置播放位置。
参数
msec 位置

public boolean isPlaying()
是否正在播放。

public int getBufferPercentage()
获取缓冲百分比。

public void setVolume(float leftVolume, float rightVolume)
设置音量。
参数
leftVolume 左声道
rightVolume 右声道

public int getVideoWidth()
获取视频宽度。

public int getVideoHeight()
获取视频高度。

public float getVideoAspectRatio()
设置视频宽高比例。没有视频或者宽高不正确返回0。

public void setVideoQuality(int quality)
设置视频质量。
参数
quality 参见MediaPlayer的常量:VIDEOQUALITY_LOW(流畅)、VIDEOQUALITY_MEDIUM(普通)、VIDEOQUALITY_HIGH(高质)。

public void setBufferSize(int bufSize)
设置视频缓冲大小(默认1024KB)单位Byte。

public boolean isBuffering()
检测是否缓冲完毕。

public void setMetaEncoding(String encoding)
设置元数据编码。例如:UTF-8

public String getMetaEncoding()
获取元数据编码。

public HashMap getAudioTrackMap(String encoding)
获取视频中嵌入的音轨。例如:English

public int getAudioTrack()
设置播放音轨编号。

public void setAudioTrack(int audioIndex)
设置音轨编号,必须使用getAudioTrackMap的返回值。

public void setSubShown(boolean shown)
设置是否显示字幕。
参数
shown true表示显示字幕

public void setSubEncoding(String encoding)
设置字幕编码。
参数
encoding 字幕编码。如果为null将自动检测。

public int getSubLocation()
获取字幕位置类型。0为内嵌字幕,1为外挂字幕。

public void setSubPath(String subPath)
设置外挂字幕路径。必须是本地文件路径。

public String getSubPath()
获取外挂字幕路径。

public void setSubTrack(int trackId)
设置字幕编号。必须是getSubTrackMap的返回值。

public int getSubTrack()
获取字幕编号。

public HashMap getSubTrackMap(String encoding)
获取视频内嵌字幕集合。
参数
encoding 格式化字符串编码。如果为null将自动检测。
返回值
返回字幕名称和字幕编号组成的Map。

public boolean canPause()
是否可暂停。(暂时没有实现功能)

public boolean canSeekBackward()
(暂时没有实现功能)

public boolean canSeekForward()
(暂时没有实现功能)


ps:大家可以看到 可以调其里面的方法,参考源码实现 字幕、缓冲、声音 等等 然后再加上自己的控件,完美。

关于官方帮助文档:https://www.vitamio.org/docs/Tutorial/2014/0210/29.html

你可能感兴趣的:(Android进阶之路)