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开发自定义播放器相关推荐

  1. 一款基于ExoPlayer的自定义播放器(已开源)

    一.基于ExoPlayer 自定义播放器 JPlayer支持功能: 1 ExoUserPlayer 基本播放. 2 GestureVideoPlayer 增加手势 亮度,音量,快进,等手势. 3 Ma ...

  2. Exoplayer+Exomedia打造自定义播放器(二)

    Exomedia源码分析 VideoControls 播放器基类 继承自RelativeLayout,播放器基类.作用是提供一些默认的播放器基本组件:提供反射控制器布局.显示加载进度.播放器隐藏显示动 ...

  3. 大道PHP+LAMP+ZEND+开源框架整合开发与实战|pdf电子书(100m)

    内容简介 <大道PHP:LAMP+Zend+开源框架整合开发与实战>以PHP应用程序开发为主题,对实践中必不可少的各项重要技术进行了全面介绍与系统讲解,并对多个PHP开源框架的应用进行了深 ...

  4. videos player.php_vue-video-player做出一个自定义播放器

    这次给大家带来vue-video-player做出一个自定义播放器,vue-video-player做出自定义播放器的注意事项有哪些,下面就是实战案例,一起来看一下. 图1--显示侧边栏 图2-收起侧 ...

  5. vue-video-player文档_基于vue-video-player自定义播放器的方法

    基于vue-video-player自定义播放器的方法 发布时间:2019-01-07 发布网站:编程之家 编程之家收集整理的这篇文章主要介绍了基于vue-video-player自定义播放器的方法, ...

  6. 基于 AVPlayer 自定义播放器

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  7. android自定义播放器按钮,android – 使用exo播放器添加全屏视频按钮

    如果您使用的是SimpleExoPlayerView,则可以自定义播放器的视图,尤其是Control的视图.查看SimpleExoPlayerView的文档: Attributes The follo ...

  8. html全屏播放js,使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

  9. ffplay自定义播放器封装C#接口

    ffplay自定义系列 第一章 自定义播放器接口 第二章 倍速播放 第三章 dxva2硬解渲染 第四章 提供C#接口(本章) 第五章 制作wpf播放器 文章目录 ffplay自定义系列 前言 一.接口 ...

最新文章

  1. java instanceof 区别_Java 中 instanceof 和 isInstance 的区别
  2. [转]独立窗口打开多个Excel文件
  3. unique--求集合的单值元素
  4. 【算法与数据结构】最大子序列和问题
  5. 阿里云:面向5G时代的物联网无线连接服务
  6. 把男朋友变成儿子你只需要一秒
  7. [转载] Java实现归并排序(超详细,新手请进)
  8. linux系统取代windows,Linux不可能取代Windows
  9. WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象
  10. java生成验证码图片
  11. CF1109F Sasha and Algorithm of Silence's Sounds LCT、线段树
  12. 已知弧长计算器_半径弧长计算软件 弧长弦长求半径计算器
  13. linux添加软件源命令,Linux 添加源
  14. 集成Cortex-M0内核-- Integration and Implementation Manual手册学习
  15. 以太网未识别的网络win10_win10以太网为什么无Internet未识别网络?
  16. 毕业论文引用参考文献的脚注方法
  17. 关于EJB,为什么用EJB?为什么不用EJB?
  18. plupload 中文API
  19. javascript实用例子
  20. GPON学习总结--gemport mapping

热门文章

  1. MATLAB实现图像平移的源代码
  2. leetcode算法题--最长回文子序列★★
  3. 崔巍 计算机考研怎么样,中国科学院大学研究生导师教师师资介绍简介-崔巍
  4. Matlab学习笔记(三)
  5. 使用职责链模式来重构你的代码
  6. 双十一风险暗藏危机 网络狂欢需谨慎
  7. Python相对、绝对导入浅析
  8. my-innodb-heavy-4G.cnf配置文件注解
  9. android 入门
  10. 移植uboot第四步:设置NAND启动