集成Vitamio來播放網絡視頻(支持多種格式解碼)

集成Vitamio來播放網絡視頻(支持多種格式解碼)

在android裏面可能會用到播放網絡視頻,但是android SDK自帶的播放視頻並不能滿足我們要求,因爲支持的格式有限,有時只有聲音沒有頭像。碰到這種情況就比較尷尬了……
經過上網查詢,找到了一個比較好的框架——Vitamio,Vitamio是ffmpeg的一個開源項目。
先上效果圖

這裏寫圖片描述

準備工作

下載Vitamio,可以去官網下載,當然我也上傳到csdn了(http://download.csdn.net/detail/qq272708698/9501774)

然後把裏面的vitamio複製到自己項目下(android stuido環境下)然後以Import Module
方式導入,最後把這個Module作爲自己項目的依賴。

修改build.gradle

修改vitamio下的build.gradle文件,主要是把版本信息修改成自己項目的版本信息即可。
  //修改此處,根據自己的版本
   compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        //修改此處,根據自己的版本
        minSdkVersion 15
        targetSdkVersion 23
    }

修改自己項目AndroidManifest.xml

添加權限
 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

      <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
添加一個activity
  <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" />

實現功能

佈局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.videoplayer.MainActivity">
    <io.vov.vitamio.widget.VideoView
        android:id="@+id/surface_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
邏輯代碼,這裏我是把視頻放在本地服務器裏面做測試用。
package com.videoplayer;
import android.content.pm.ActivityInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.Vitamio;


public class MainActivity extends AppCompatActivity {
    private io.vov.vitamio.widget.VideoView mVideoView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        Vitamio.isInitialized(this);
        setContentView(R.layout.activity_main);
//        m_actionBar.hide();
        playfunction();

    }

    void playfunction(){
        String path = "http://192.168.1.106:8080/Demo/Video/飄花電影piaohau.com末日崩塌HD1280高清中英雙字.mkv";//路徑

        mVideoView = (io.vov.vitamio.widget.VideoView) findViewById(R.id.surface_view);
        mVideoView.setVideoPath(path);   //設置視頻網絡地址
//      mVideoView.setVideoURI(Uri.parse(path)); //也可以是本地,也可以是網絡地址
        mVideoView.setMediaController(new io.vov.vitamio.widget.MediaController(this)); //設置媒體控制器
        mVideoView.setVideoLayout(io.vov.vitamio.widget.VideoView.VIDEO_LAYOUT_STRETCH, 0);   //設置視頻的縮放參數,這裏設置爲拉伸
        mVideoView.requestFocus();
        //視頻播放器的準備,此時播放器已經準備好了,此處可以設置一下播放速度,播放位置等等
        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                //此處設置播放速度爲正常速度1
                mediaPlayer.setPlaybackSpeed(1.0f);
            }
        });
        //當播放完成後,從頭開始
        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.seekTo(0);   //轉到第一幀
                mediaPlayer.start();     //開始播放
            }
        });

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章