zoukankan      html  css  js  c++  java
  • Android视频媒体相关,VideoView和开源框架vitamio

    虽然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;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		//1.实例化videoView
    		mVv = (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();
    
    	}
    
    	@Override
    	public void onCompletion(MediaPlayer mp) {
    		// TODO
    		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
    
    	}
    
    	@Override
    	public boolean onError(MediaPlayer mp, int what, int extra) {
    		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
    		return false;
    	}
    
    	@Override
    	public 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 -->
        <activity
        android: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;
    
    	@Override
    	protected 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();
    	}
    
    	@Override
    	public void onCompletion(MediaPlayer mp) {
    		// TODO
    		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
    	}
    
    	@Override
    	public boolean onError(MediaPlayer mp, int what, int extra) {
    		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
    		// TODO
    		return false;
    	}
    
    	@Override
    	public void onPrepared(MediaPlayer mp) {
    		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
    		// TODO
    
    	}
    
    }
    
    运行效果如下:

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

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


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

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299513.html
Copyright © 2011-2022 走看看