使用google开源框架Exoplayer开发自定义播放器
http://ju.outofmemory.cn/entry/143633
背景:
移動端播放視頻的需求如日中天, 最近特此使用google的開源框架Exoplayer來開發Android端的視頻播放器, 輸出為播放器SDK及使用SDK的DEMO.
本文內容:
ExoPlayer相關內容較多, 本文僅介紹使用其來制作一簡單的視頻播放器SDK, 媒體格式僅支持Mp4, 播放器功能包括播放暫停, 快進快退及相關狀態UI同步.
ExoPlayer:
ExoPlayer是一個google在2014年才推出的介于現有MediaPlayer和自定義媒體播放器之間的預建播放器;
由于其基于MediaPlayer API Level 16+開發, 所以其只支持API Level 16+, 即Android 4.1+, 但其支持的特性和可擴展性確實不錯, 特別是支持DRM數字版權保護技術, 這在越發重視資源版權的今天是相當有用的.
相比MediaPlayer具有更多特性和可擴展性:
支持Dash和Smoothstreaming播放;
Android4.3+支持DRM(Digital Rights Management);
豐富的回調API, 可用于自定義播放器定制.
官網介紹:
http://developer.android.com/guide/topics/media/exoplayer.html
http://www.cnblogs.com/lsjwzh/p/3890405.html
github:
https://github.com/google/ExoPlayer
開發環境:
由于ExoPlayer是google使用Android Studio+Gradle來創建的工程, 因此需要安裝Android Studio和Gradle.
- 本為采用osx系統開發;
- Android Studio Mac版-1641136百度網盤地址:http://pan.baidu.com/s/1eQd9TD4;
- Gradle也需要單獨下載安裝, 因為Android Studio中的的安裝環境被墻了,?https://gradle.org/;
- jar1.7;
- android sdk api level 16+;
開發流程 – OverView
本人考慮到保證ExoPlayer第三方庫的完整性和獨立性, 及方便日后更新, 所以先將ExoPlayer打包成jar, 然后再引入到自己的工程;
工程以DEMO為主工程, 再在DEMO工程中添加player module, 以此生成playerSDK, player module libs添加ExoPlayer jar包.
開發流程 – 1. 打包ExoPlayer為jar包
將ExoPlayer從github上clone一份下來, ?然后用終端工具進入工程根目錄, 執行
./gradlew jarRelease開發流程 – 2. 創建DEMO工程
開發流程 – 3. 創建PlayerSDK Module
開發流程 – 4. PlayerSDK UI布局
UI結構:
<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" android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"android:id="@+id/action_bar_root"android:background="#ff000000"><viewandroid:layout_width="fill_parent"android:layout_height="fill_parent"class="com.google.android.exoplayer.VideoSurfaceView"android:id="@+id/surfaceView"android:layout_gravity="left|top"android:layout_centerInParent="true" /><ImageButtonandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/replayButton"android:src="http://www.kimhou.net/@drawable/replay"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:visibility="gone"android:background="#a0000000"/><ProgressBarstyle="?android:attr/progressBarStyleLarge"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/loadingIcon"android:layout_centerVertical="true"android:layout_centerHorizontal="true"android:indeterminate="false"android:visibility="visible" /></RelativeLayout>開發流程 – 5. 配置PlayerSDK
通過修改AndroidManifest.xml來配置全屏, 橫屏, 網絡訪問權限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="net.kimhou.playersdk" ><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name" ><activityandroid:name=".PlayerSDKActivity"android:label="@string/app_name"android:theme="@style/Theme.AppCompat.NoActionBar"android:screenOrientation="portrait"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-permission android:name="android.permission.INTERNET" /></manifest>開發流程 – 6. 功能實現
配置工程添加依賴:
生命周期及調用流程:
這里需要注意的一點是在調用Exoplayer的playWhenReady接口時需要等到surfaceView的surfaceCreated后才能調用, 否則會失敗.
編譯工程:
編譯后在playersdk/build/outputs下會生成aar包, 即為SDK的輸出包
具體代碼可參考:https://github.com/kimhou/Android/tree/master/VideoDemoPro
總結
以上是生活随笔為你收集整理的使用google开源框架Exoplayer开发自定义播放器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Android平台的流媒体播放器的设
- 下一篇: HLS-Demo IOS 视屏直播样例