Vitamio 是什么?

Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。到目前,全球已经有超过 一万 种应用在使用 Vitamio,覆盖用户超过 5亿 。

Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在 Android 与 iOS 上跨平台支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。

资源下载:http://download.csdn.net/detail/chaoyu168/9494680

流媒体支持

Vitamio 支持各种常见的流媒体协议,可以点播或者直播音频和视频,例如如下常见协议均能无缝支持:

  • MMS
  • RTSP (RTP, SDP), RTMP
  • HTTP progressive streaming
  • HLS - HTTP live streaming (M3U8)

音频和视频格式

Vitamio 使用了 FFmpeg 做为媒体解析器和最主要的解码器,同时开发了针对不同移动平台的硬解码方案,能够完美支持 H.264/AVC、H.263、 MPEG4 等常见的视频编码,覆盖上百种多媒体格式。下表只是一些最常见的视频格式支持,除特殊标明,全部支持硬件加速:

  • DivX/Xvid
  • WMV (一般只有软解码)
  • FLV
  • TS/TP
  • RMVB (只有软解码)
  • MKV
  • MOV
  • M4V
  • AVI
  • MP4
  • 3GP

字幕支持

Vitamio 对字幕的支持很优秀,包括各种常见外挂字幕与很多视频格式的内嵌字幕,同多个字幕等特性的支持也非常完善。比如:

  • SubRip(.srt)
  • Sub Station Alpha(.ssa) / Advanced Sub Station Alpha(.ass)
  • SAMI(.smi/.sami)
  • MicroDVD(.sub/.txt)
  • SubViewer2.0(.sub)
  • MPL2(.mpl/.txt)
  • Matroska (.mkv) 内置字幕

更多特性

除了上面列出的常见功能之外,Vitamio 还做了相当多人性化的工作:

  • 多音轨与字幕支持
  • 细致的 CPU 与 GPU 优化
  • 支持手机到平板各种设备
  • 流媒体播放缓冲支持
  • 播放画面比例大小随手调节
  • 自动文字编码检测,拒绝乱码

还有更多新特性没有被列出,请参考开发文档。

导入使用

1、导入。下载回来后大家可能发现没有.project工程文件,可以通过File -> Import -> Android -> Existing Android Code Into Workspace来导入工程,然后改一下工程名称即可。

2、将VitamioBundle工程作为Android Library引入Demo工程使用即可。

注意:
     如果是Windows用户,请将VitamioBundle与Demo工程放在同一个文件夹下,否则添加Android Library可能失败,其他问题一般clean一下重新编译一下就好了。其他问题请参考错误大全。

Vitamio 4.0 changed API for Android

  1. New API

    ?
    1
    2
    3
    4
    5
    6
    getMetadata()
    getTrackInfo()
    setPlaybackSpeed(<span class="predefined-type">float</span> speed)
    setSurface(Surface surface)
    setDataSource(Context context, Uri uri, String headers)
    setAudioAmplify(<span class="predefined-type">float</span> ratio)

  2. Changed API

    ?
    1
    2
    3
    4
    OnSubtitleListener -> OnTimedTextListener
    setSubtitleShown -> setTimedTextShown
    setSubtitleShown -> setTimedTextEncoding
    setAudioTrack -> selectTrack()

Vitamio API for Android : MediaPlayer

类概述

public class MediaPlayer
MediaPlayer可控制播放音乐/视频和网络流。可以从VideoView找到使用这个类的方法。
这个类与android.media.MediaPlayer的作用大部分相同。请参阅开发者指南音频和视频使用MediaPlayer。

常量

public static final int MEDIA_ERROR_UNKNOWN
播放错误,未知错误。
常量值:0

public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK
播放错误(一般视频播放比较慢或视频本身有问题会引发)。
常量值:200

public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING
视频过于复杂,无法解码:不能快速解码帧。此时可能只能正常播放音频。参见MediaPlayer.OnInfoListener。
常量值:700

public static final int MEDIA_INFO_BUFFERING_START
MediaPlayer暂停播放等待缓冲更多数据。
常量值:701

public static final int MEDIA_INFO_BUFFERING_END
MediaPlayer在缓冲完后继续播放。
常量值:702

public static final int MEDIA_INFO_NOT_SEEKABLE
媒体不支持Seek,例如直播流。
常量值:801

public static final int MEDIA_INFO_DOWNLOAD_RATE_CHANGED
av_read_frame()的速度(KB/s)。
常量值:901

public static final int VIDEOQUALITY_LOW
视频质量——流畅。
常量值:-16

public static final int VIDEOQUALITY_MEDIUM
视频质量——普通。
常量值:0

public static final int VIDEOQUALITY_HIGH
视频质量——高质。
常量值:16

public static final int SUBTITLE_INTERNAL
字幕显示来自内置字幕。
常量值:0

public static final int SUBTITLE_EXTERNAL
字幕显示来自外置字幕。
常量值:1

public static final String[] SUB_TYPES
Vitamio支持的外置字幕类型。
常量值:{ “.srt”, “.ssa”, “.smi”, “.txt”, “.sub”, “.ass” }

公共方法
public static final boolean isLibraryLoaded()
动态链接库(so)是否已经成功加载完成。

public void setDisplay(SurfaceHolder sh)
设置用于显示媒体视频的SurfaceHolder。这个调用是可选的。只显示音频而不显示视频时不调用这个方法(例如后台播放)。
参数
sh 用户显示视频的SurfaceHolder

public void setDataSource(Context context, Uri uri)
设置多媒体数据源,例如context Uri。(支持raw资源访问,例如:android.resource://com.your.package/R.raw.your_resource_id)
参数
context 获取ContentResolver时要使用的Context
uri 你要播放的uri
异常
IllegalArgumentException 状态无效时引发(uri或context为空时引发)

public native void setDataSource(String path)
设置数据源(文件路径或http/rtsp/mms URL)。

public native void setDataSource(FileDescriptor fd)
设置数据源(FileDescriptor)。调用者在调用后要自行关闭FileDescriptor,最安全的做法是一返回就马上关闭。

public native void prepare()
预处理播放器为播放做准备,方法是同步执行。
设置完数据源和显示的Surface后,你需要调用prepare()或prepareAsync()。对于文件,你可以直到媒体播放器准备播放时再调用prepare。

public native void prepareAsync()
预处理播放器为播放做准备,方法是异步执行。
设置完数据源和显示的Surface后,你需要调用prepare()或prepareAsync()。对于流,你应该调用prepareAsync(),立即返回,而不是阻塞,直到足够的数据被缓冲。

public void start()
开始或继续播放。如果此前已暂停播放,那么就从暂停的地方播放。如果已经停止播放或还未开始播放,播放将从头开始。

public void stop()
与pause()相同。

public void pause()
暂停播放。调用start()恢复。

public void setWakeMode(Context context, int mode)
设置MediaPlayer的底层电源管理。可以在MediaPlayer没有通过SurfaceHolder 设置setDisplay播放时使用,从而使用高级别的setScreenOnWhilePlaying特性。
本方法在MediaPlayer访问低级别电源管理控制设备电源时使用。参数是一个android.os.PowerManager唤醒组合标识。使用这个方法需要WAKE_LOCK权限。默认情况下不使用以保持设备唤醒播放。
参数
context
mode 设置PowerManger电源/锁定模式

public void setScreenOnWhilePlaying(boolean screenOn)
控制是否使用附加SurfaceHolder保持屏幕高亮持续播放视频。本方法可能优于使用setWakeMode,因为它不需要应用程序访问底层唤醒锁的权限。
参数
screenOn 设置true将保持屏幕高亮,反之允许它关闭。

public native int getVideoWidth()
获取视频宽度。
返回值
返回视频的宽度,没有视频或宽度尚未确定时返回0。可以通过注册OnVideoSizeChangedListener当宽度有效时获得一个通知。

public native int getVideoHeight()
获取视频高度。
返回值
返回视频的高度,没有视频或高度尚未确定时返回0。可以通过注册OnVideoSizeChangedListener当高度有效时获得一个通知。

public native boolean isPlaying()
检测MediaPlayer是否正在播放。

public native void seekTo(long msec)
设置到指定时间位置播放。
参数
msec 从开始位置到msec的偏移量(以毫秒为单位)
异常
IllegalStateException 内部播放引擎未初始化引发

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

public native Bitmap getCurrentFrame()
获取当前视频帧。(可用于截图)

public native long getDuration()
获取多媒体播放持续时间。

public void release()
释放与MediaPlayer相关的资源。当你使用完MediaPlayer完后调用此方法是一个好的编程习惯。

public void reset()
复位(reset)MediaPlayer至未初始化状态。调用此方法后,你需要再次设置数据源,并通过prepare()来初始化。

public native void setVolume(float leftVolume, float rightVolume))
设置音量。(范围0.0~1.0之间)

public void setOnPreparedListener(OnPreparedListener listener))
注册一个回调函数,在视频预处理完成后调用。

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

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

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

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

public void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener)
注册一个回调函数,在视频大小已知或更新后调用。

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

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

public void releaseDisplay()
在播放音频的时候调用这个有效果。

public native float getVideoAspectRatio()
获取视频宽高比例。
返回值
返回视频的宽高比。没有视频或者宽高不正确返回0。参见VideoView.setVideoLayout。

public native void setVideoQuality(int quality)
设置视频质量。如果播放延迟比较严重,你可以尝试使用VIDEOQUALITY_LOW(流畅),默认VIDEOQUALITY_LOW(流畅)。
参数
quality 参见MediaPlayer的常量:VIDEOQUALITY_LOW(流畅)、VIDEOQUALITY_MEDIUM(普通)、VIDEOQUALITY_HIGH(高质)。

public native void setDeinterlace(boolean deinterlace)
设置视频反交错。

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

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

public native int getBufferProgress()
参见OnBufferingUpdateListener。

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

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

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

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

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

public void setInitialAudioTrack(int audioIndex)
设置初始化音轨。

public void setInitialSubTrack(int subIndex)
设置初始化字幕。

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

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

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

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

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

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

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

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

受保护方法

protected void finalize()
调用了native_finalize。


MediaPlayer内部接口

public interface OnBufferingUpdateListener
void onBufferingUpdate(MediaPlayer mp, int percent)
更新流媒体缓存状态。
参数
mp 要更新的MediaPlayer
percent 已缓冲的百分比数(0 ~ 100)

public interface OnErrorListener
boolean onError(MediaPlayer mp, int what, int extra)
错误信息。
参数
mp 错误相关的MediaPlayer
what 错误类型,参见MEDIA_ERROR_UNKNOWN、MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK
extra 额外具体的错误code。通常依赖于实现。
返回值
如果处理了错误返回true,否则返回false。返回false或没有设置OnErrorListener将引发OnCompletionListener被调用。

public interface OnInfoListener
boolean onInfo(MediaPlayer mp, int what, int extra)
信息或警告。
参数
mp 信息相关的MediaPlayer
what 信息或警告类型,参见MEDIA_INFO_VIDEO_TRACK_LAGGING、MEDIA_INFO_BUFFERING_START、MEDIA_INFO_BUFFERING_END、MEDIA_INFO_NOT_SEEKABLE、MEDIA_INFO_DOWNLOAD_RATE_CHANGED
extra 额外具体的信息code。通常依赖于实现。

返回值
如果处理了错误返回true,否则返回false。返回false或没有设置OnInfoListener将丢弃信息或警告。

public interface OnSubtitleUpdateListener
public void onSubtitleUpdate(String text)
需要显示文字字幕。

public void onSubtitleUpdate(byte[] pixels, int width, int height)
需要显示图片字幕。
参数
pixels 图片字幕像素
width 图片字幕宽度
height 图片字幕高度

Vitamio API for Android: VideoView

类概述

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

常量

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()
(暂时没有实现功能)

受保护方法

protected boolean isInPlaybackState()
是否处于正在播放的状态。

Android--使用开源vitamio做万能视频播放器相关推荐

  1. IINA 1.1.0beta1中文版 - Mac最强万能视频播放器

    IINA 1.1.0beta1中文版是一款免费开源的 macOS 万能视频播放器,基于 mpv (一款命令行启动/高度自定义配置的高性能跨平台开源播放器) 而来,使用 Swift 语言开发,拥有强大的 ...

  2. IINA for Mac(万能视频播放器)中文版

    mac视频播放器哪个好用?这里推荐IINA for Mac,这款iina播放器支持多种格式的视频文件,哪怕是播放4K这些高分辨率视频都很流畅,看着简洁,但是功能很全面,重点是这款iina播放视频器的英 ...

  3. android能播放4k视频格式,安卓APP,无广告支持多种格式的万能视频播放器

    原标题:安卓APP,无广告支持多种格式的万能视频播放器 万能视频播放器 万能视频播放器是一款专业的视频播放工具.它支持所有视频格式,支持 4K/超高清视频文件,并且能够高清播放.它是安卓手机和平板上欣 ...

  4. c#万能视频播放器 (转)

    c#万能视频播放器(附代码) c#万能视频播放器 本人之前很多的文章中均提到了使用libvlc为播放器内核制作的播放器,也许有些朋友对此感兴趣,于是我用c#写了一个调用libvlc api实现的万能视 ...

  5. 万能视频播放器:恒星播放器 for Mac(1.500中文免费)

    恒星播放器 mac中文版是mac上一款超级好用的万能视频播放器,可以迅速播放各种格式的视频和音频,而且不损失播放质量,为您提供流畅舒适的高清视频播放体验,欢迎需要的朋友安装体验! 原文链接:https ...

  6. 恒星播放器 1.101中文版(万能视频播放器)

    恒星播放器 mac中文版是mac上一款超级好用的万能视频播放器,可以迅速播放各种格式的视频和音频,而且不损失播放质量,为您提供流畅舒适的高清视频播放体验! 支持所有格式视频播放 播放所有格式视频文件 ...

  7. 轻播zFuse Pro for Mac(万能视频播放器)

    轻播zFuse mac中文版是一款简单强大好用的万能视频播放器,拥有简洁.轻快.好用的特点,支持同时播放多个视频文件,也可以对视频进行旋转或者对硬件进行加速操作,支持与外部的字幕文件配合使用,是您在苹 ...

  8. android 万能视频播放器

    android 自带的mediaplayer出于一些专利等等滴原因,只能支持mp4格式视频的播放,对于一款能够满足用户需求的视频播放器应用肯定是远远不够的,那么我们需要采取一些手段了,废话不多说了. ...

  9. android万能播放器,Android万能视频播放器05-音视频同步

    1.概念 由于视频播放器中音频和视频是分别播放和渲染的,就会出现声音和画面不同步的现象.为了使同一时刻声音和画面的一致性,我们就需要音视频同步来实现,这就是音视频同步. 2.播放时间 2.1.音频播放 ...

  10. 零基础用Android Studio实现简单的本地视频播放器

    用Android Studio的VideoView组件实现简单的本地视频播放器 一.创建Android Studio项目 二.在界面布局文件activity_main.xml中定义VideoView组 ...

最新文章

  1. javascript RegExp
  2. 4、Python —— 函数
  3. Lesson 14.1 数据归一化与Batch Normalization理论基础
  4. 上海Oracle高峰会感悟
  5. [html] H5的哪些特性需要https支持呢?
  6. spark学习-70-源代码:Endpoint模型介绍(2)-启动流程
  7. php不使用插件导出excel
  8. 软件工程基础 实验1《可行性研究与项目计划》
  9. android 开机动画制作
  10. android 谷歌输入法切换,ANDROID谷歌拼音 输入法肿么切换?
  11. 全网最新Linux全套教程
  12. Cron在线表达式生成器常用表达式
  13. excel导入的数据中文字段转英文
  14. python爬虫(十一)爬取贴吧图片
  15. 名单出炉!下一轮“双一流”,重点建设这些高校!
  16. 如何在表格里做计算机统计表,如何运用Excel编制统计表并做一般数据分析?-excel统计怎么做,最简单的统计表格怎么做...
  17. 中国计量大学现代科技学院第四届“中竞杯”程序设计校赛(同步赛) F.爬塔(DP)
  18. 简单的图标移入效果(css缩放)
  19. C语言数字图像处理进阶---12光照特效滤镜
  20. java 多线程的三种写法

热门文章

  1. Clark变换和Park变换在三相系统和单相系统中的应用
  2. 服务器ie浏览器总是未响应怎么办,电脑ie浏览器老是无响应怎么办
  3. jpg转换成mobi电子书
  4. 商业计划书PPT模板
  5. python成语接龙代码_最全的成语接龙代码(附带有网页版)
  6. SSDP,简单服务发现技术
  7. JavaScript-Ajax基础讲解
  8. 联想云计算机终端,联想智能云教室系统 V1.3.20.1109_C201105 最新官网版本
  9. 大脑是如何塑造你的感觉?
  10. 一阶梯度法、二阶段梯度法、牛顿法