Android视频媒体相关,VideoView和开源框架vitamio

来源:互联网 发布:深入浅出node.js系列 编辑:程序博客网 时间:2024/06/09 21:00

虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式、性能等各方面都十分有限,但是Vitamio的确强大到没朋友!

Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。

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

接下来就从sdk原生的VideoView开始,过度到vitamio框架。

1、原生的VideoView

android sdk对音频视频的支持

  • 音频:mp3 wma
  • 视频:3gp mp4

Demo:

布局:

<VideoView        android:id="@+id/vv"        android:layout_width="match_parent"        android:layout_height="match_parent" />

活动代码:

package com.example.videoviewdemo;import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnErrorListener;import android.media.MediaPlayer.OnPreparedListener;import android.net.Uri;import android.os.Bundle;import android.widget.MediaController;import android.widget.Toast;import android.widget.VideoView;public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {private VideoView mVv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.实例化videoViewmVv = (VideoView) findViewById(R.id.vv);//设置相关的监听mVv.setOnPreparedListener(this);mVv.setOnErrorListener(this);mVv.setOnCompletionListener(this);/**测试支持格式//1.flv//2.3gp 、.mp4     可以//3.avi    有声音无图像//4.rmvb//5.mkv//storage/emulated/0/Download/5.mkv *///2.设置视频的地址//mVv.setVideoPath("/storage/emulated/0/Download/video_test.mp4");mVv.setVideoPath("http://192.168.1.100:8080/1.mp4");//mVv.setVideoPath("http://192.168.1.100:8080/2.3gp");//mVv.setVideoURI(Uri.parse("http://192.168.1.100:8080/2.3gp"));//3.设置控制条mVv.setMediaController(new MediaController(this));//4.开始播放mVv.start();}@Overridepublic void onCompletion(MediaPlayer mp) {// TODOToast.makeText(getApplicationContext(), "播放完了", 0).show();}@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {Toast.makeText(getApplicationContext(), "资源有问题", 0).show();return false;}@Overridepublic void onPrepared(MediaPlayer mp) {Toast.makeText(getApplicationContext(), "准备好了", 0).show();}}

播放网络视频,记得加上权限:<uses-permission android:name="android.permission.INTERNET" />

运行:



可以看到非常清晰的播放。但是美中不足的是,它支持的格式有限。而接下来介绍的vitamio,解决了这个问题,当然,也更强大。


2、vitamio介绍

vitamio运行demo总结

  • 本地:支持所有格式
  • 网络:支持所有格式
  • 流媒体:支持mms rtsp(官方说支持.但是运行的时候.直接crash) m3u8支持
Demo:

首先看看它是怎么用,再演示完整的Demo。

ViewView的集成过程:

  1. 下载lib包.demo:https://github.com/yixia/VitamioBundle
  2. 新建工程,引入lib包
  3. 是否修改androidmanifest.xml

    1. 权限

      <uses-permission android:name="android.permission.INTERNET" />
    2. 添加activity

      <!-- vitamio add --><activityandroid:name="io.vov.vitamio.activity.InitActivity"android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"android:launchMode="singleTop"android:theme="@android:style/Theme.NoTitleBar"android:windowSoftInputMode="stateAlwaysHidden" />
  4. 写代码

    //使用vitamio需要初始化引擎,引擎的检查/**---------------需要注意 begin---------------**/if (!LibsChecker.checkVitamioLibs(this))    return;/**---------------需要注意 end---------------**/mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);/**---------------设置监听---------------**/mVitamio_vv.setOnPreparedListener(this);mVitamio_vv.setOnErrorListener(this);mVitamio_vv.setOnCompletionListener(this);//设置路径mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");//设置控制条mVitamio_vv.setMediaController(new MediaController(this));//开始播放mVitamio_vv.start();
完整Demo:

布局:

<io.vov.vitamio.widget.VideoView        android:id="@+id/vitamio_vv"        android:layout_width="match_parent"        android:layout_height="match_parent" />

主活动代码:

package com.example.vitamiodemo59;import io.vov.vitamio.LibsChecker;import io.vov.vitamio.MediaPlayer;import io.vov.vitamio.MediaPlayer.OnCompletionListener;import io.vov.vitamio.MediaPlayer.OnErrorListener;import io.vov.vitamio.MediaPlayer.OnPreparedListener;import io.vov.vitamio.widget.MediaController;import io.vov.vitamio.widget.VideoView;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {private VideoView mVitamio_vv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//使用vitamio需要初始化引擎,引擎的检查/**---------------需要注意 begin---------------**/if (!LibsChecker.checkVitamioLibs(this))return;/**---------------需要注意 end---------------**/mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);/**---------------设置监听---------------**/mVitamio_vv.setOnPreparedListener(this);mVitamio_vv.setOnErrorListener(this);mVitamio_vv.setOnCompletionListener(this);//设置路径//本地视频//网络视频//流媒体mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");//设置控制条mVitamio_vv.setMediaController(new MediaController(this));//开始播放mVitamio_vv.start();}@Overridepublic void onCompletion(MediaPlayer mp) {// TODOToast.makeText(getApplicationContext(), "播放完了", 0).show();}@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {Toast.makeText(getApplicationContext(), "资源有问题", 0).show();// TODOreturn false;}@Overridepublic void onPrepared(MediaPlayer mp) {Toast.makeText(getApplicationContext(), "准备好了", 0).show();// TODO}}
运行效果如下:

需要注意引入lib库,否则是无法使用的

基本介绍就到这里,更多学习可以参见官方文档。


喜欢的朋友可以关注我!谢谢

1 0
原创粉丝点击