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库,否则是无法使用的

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


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

  • 相关阅读:
    HOG特征提取+python+opencv
    统计模型计算量~pytorch
    CycleGAN训练~训练图像进行拼接
    缺陷检测~分类网络
    缺陷检测~分类网络
    缺陷检测~检测网络
    pytorch中的fc和fc逆操作
    pytorch中的view和view逆操作
    传统的图像特征提取
    TensorFlow安装+入门操作
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299513.html
Copyright © 2011-2022 走看看