安卓多媒体API——Vitamio框架

之前学习了MediaPlayer

https://blog.csdn.net/nishigesb123/article/details/89479084

但MediaPlayer支持的媒体格式其实是有限的,在开头也提到,安卓多媒体其实也涉及了很多第三方框架。

这篇文章就是关于安卓的多媒体播放的一个第三方框架——Vitamio框架,它几乎支持所有的媒体格式。


Vitamio框架

概述

官网地址:https://www.vitamio.org/

英文官网地址(?):https://www.vitamio.org/en/
项目地址:https://github.com/yixia/VitamioBundle

建从下面地址下载!!理由参考:https://blog.csdn.net/nishigesb123/article/details/89576962

新项目地址(?):https://github.com/yixia/VitamioBundleStudio


?是摘自官网的介绍

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

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

流媒体支持

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一下重新编译一下就好了。其他问题请参考错误大全。

在官网或Github下载完整Vitamio项目后

在自己的项目右键

安卓多媒体API——Vitamio框架_第1张图片

New一个Module

安卓多媒体API——Vitamio框架_第2张图片

选择Liberary

安卓多媒体API——Vitamio框架_第3张图片

点击Next,进行配置

安卓多媒体API——Vitamio框架_第4张图片

配置说明:看我们下载好的vitamio项目,观察src文件夹,可以得出包名其实是io.vov.vitamio的结论,所以?也填这个

完毕后将图示文件复制到我们的vitamio即可

安卓多媒体API——Vitamio框架_第5张图片

安卓多媒体API——Vitamio框架_第6张图片

切换到project视图,或者直接在项目目录操作

 

把下载的vitamio项目的libs文件夹里的四个子文件夹内容复制

 

把下载的vitamio项目的libs文件夹里的三个子文件夹内容选中,拷贝。 安卓多媒体API——Vitamio框架_第7张图片

 

在项目app/src/main目录创建jniLibs文件夹,并把?复制进来

安卓多媒体API——Vitamio框架_第8张图片

一开始都不知道As原来只认这个目录 搞了好久

https://blog.csdn.net/nishigesb123/article/details/89576962

 

 

最后grade加一下这句话,这么不智能,这种竟然不是自动帮我补上的吗。。。

安卓多媒体API——Vitamio框架_第9张图片

至此已经导入完毕

然后还是遇到了点什么错误,说raw里啥啥没有,后来索性把res文件夹里的东西也复制了一份到自己的项目


?下面就是敲代码咯

使用

准备工作

可以参考下载的源码项目的配置文件,需要以下权限。

    
    
    
    

需要的申明 

        

播放音频案例

布局文件




    

 

 

MainActivity

package com.example.a4_26vitamio;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import java.io.File;
import java.io.IOException;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.LibsChecker;

public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener {

    //注意导包import io.vov.vitamio.MediaPlayer;别错了
    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载so类库(通常使用C、C++编写类库)
        if (!LibsChecker.checkVitamioLibs(this))
            return;
        setContentView(R.layout.activity_main);
        //初始化播放器
        initMediaPlay();
    }

    private void initMediaPlay() {
        mediaPlayer = new MediaPlayer(this);

    }

    public void play(View v) {
        String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + File.separator +"a1.mp3";
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(path);
            mediaPlayer.setOnPreparedListener(this);
            mediaPlayer.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void pause(View v) {
        mediaPlayer.pause();
    }

    public void stop(View v) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }

}

效果的话是看不出啥效果了, 声音确实是有哒

安卓多媒体API——Vitamio框架_第10张图片

控制台倒是输出了一堆日志,非常完整

安卓多媒体API——Vitamio框架_第11张图片

安卓多媒体API——Vitamio框架_第12张图片

点击暂停

点击停止

安卓多媒体API——Vitamio框架_第13张图片

 

播放视频案例

新建一个Activity

之前学习了surfaceView可以播放视频,也了解到videoView也可以播放视频,但性能较差

在Vitamio框架重写了videoView,使得其不仅性能大幅提升,而且支持的格式也有了翻天覆地的变化。


首先是布局,按照?的描述,我们加入一个VideoView,注意是io.vov.vitamio.widget下的

样式已经




    
    

?是代码部分

package com.example.a4_26vitamio;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.io.File;

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;

public class Main2Activity extends AppCompatActivity {
    //注意导包别导错
    private VideoView vv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载so类库(通常使用C、C++编写类库)
        if (!LibsChecker.checkVitamioLibs(this))
            return;
        setContentView(R.layout.activity_main2);
        setContentView(R.layout.activity_main2);
        vv = findViewById(R.id.surface_view);
        MediaController mc = new MediaController(this);
        vv.setMediaController(mc);
        String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) + File.separator + "test.mp4";
        //路径
        vv.setVideoPath(path);
        //获取焦点
        vv.requestFocus();
        vv.start();
    }
}

 

效果如?

框架已经设计好了UI部分才对,点击应该可以换出控制条,如果显示不出来,如左,可能是没有导入res的相关文件,实际效果如右图。

安卓多媒体API——Vitamio框架_第14张图片安卓多媒体API——Vitamio框架_第15张图片

如果对UI的控制台不满意,可以手动去修改源码的布局文件。

安卓多媒体API——Vitamio框架_第16张图片

 

你可能感兴趣的:(安卓开发)