android ijkplayer简单使用
class VideoPlayer : FrameLayout, TextureView.SurfaceTextureListener{
private var url:String? = null
private var headers:Map<String,String>? = null
private var mediaPlayer: IMediaPlayer? = null //播放器
private var container: FrameLayout? = null //播放器根目录
private var textureView: TextureView? = null //视频显示视图
private var surfaceTexture: SurfaceTexture? = null
private var playerType:Int = PlayerTypes.TYPE_IJK
private var surface: Surface? = null
constructor(context: Context, attributeSet: AttributeSet):super(context,attributeSet){
init()
}
/**
* 设置播放器类型
*
* @param playerType IjkPlayer or MediaPlayer.
*/
fun setPlayerType(playerType: Int) {
this.playerType = playerType
}
fun setUp(url:String,headers:Map<String,String>?){
this.url = url
this.headers = headers
}
fun start(){
mediaPlayer?.start()
}
private fun init(){
container = FrameLayout(context)
this.removeView(container)
val params = LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT
)
this.addView(container,params)
initTextureView()
initMediaPlayer()
}
private fun initTextureView(){
if(textureView == null){
textureView = TextureView(context)
textureView?.surfaceTextureListener = this
}
container?.removeView(textureView)
val params = LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
Gravity.CENTER
)
container?.addView(textureView,0,params)
}
private fun initMediaPlayer(){
if(mediaPlayer == null){
when(playerType){
PlayerTypes.TYPE_IJK -> mediaPlayer = IjkMediaPlayer()
PlayerTypes.TYPE_NATIVE -> mediaPlayer = AndroidMediaPlayer()
else -> mediaPlayer = IjkMediaPlayer()
}
}
mediaPlayer?.setOnVideoSizeChangedListener { player, w, h, sar_num, sar_den ->
Log.d("======","setOnVideoSizeChangedListener")
}
mediaPlayer?.setOnErrorListener { player, what, extra ->
Log.d("======","setOnErrorListener")
true
}
mediaPlayer?.setOnCompletionListener {
Log.d("======","setOnCompletionListener")
}
mediaPlayer?.setOnPreparedListener {
Log.d("======","setOnPreparedListener")
}
mediaPlayer?.setOnInfoListener { player, what, extra ->
Log.d("======","setOnInfoListener")
true
}
mediaPlayer?.setOnBufferingUpdateListener { player, percent ->
Log.d("======","setOnBufferingUpdateListener")
}
openMediaPlayer()
}
private fun openMediaPlayer(){
mediaPlayer?.setDataSource(context, Uri.parse(url),headers)
mediaPlayer?.prepareAsync()
}
override fun onSurfaceTextureSizeChanged(p0: SurfaceTexture?, p1: Int, p2: Int) {
}
override fun onSurfaceTextureUpdated(p0: SurfaceTexture?) {
}
override fun onSurfaceTextureDestroyed(p0: SurfaceTexture?): Boolean {
return p0 == null
}
override fun onSurfaceTextureAvailable(p0: SurfaceTexture?, p1: Int, p2: Int) {
if(surfaceTexture == null){
surfaceTexture = p0
if(surface == null){
surface = Surface(surfaceTexture)
}
mediaPlayer?.setSurface(surface)
}else{
textureView?.surfaceTexture = surfaceTexture
}
}
}
就是简单实现播放功能,其他的以后在添加
video_view.setPlayerType(PlayerTypes.TYPE_IJK)
video_view.setUp(VideoDatas.videoUrls[2],null)
video_view.start()
android ijkplayer简单使用的更多相关文章
- Android 实现简单音乐播放器(二)
在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...
- Android 实现简单音乐播放器(一)
今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...
- Android课程---Android Studio简单设置
Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...
- Android实现简单音乐播放器(MediaPlayer)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...
- Android实现简单拨号器
Android实现简单拨号器 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 界面布局只有GridLayout和EditText两个控件,全部 ...
- 【转】Android Studio简单设置
原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...
- Android发展简单介绍
Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...
- android JNI 简单demo(2)它JNI demo 写
android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...
- Android Studio简单设置(转)
Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...
随机推荐
- tensorflow之最近邻算法实现
最近邻算法,最直接的理解就是,输入数据的特征与已有数据的特征一一进行比对,最靠近哪一个就将输入数据划分为那一个所属的类,当然,以此来统计k个最靠近特征中所属类别最多的类,那就变成了k近邻算法.本博客同 ...
- iOS 中的延时操作方法
1. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_q ...
- 【Pytyon模块】logging模块-日志处理
一.日志相关概念 1.日志的作用 通过log的分析,可以方便用户了解系统或软件.应用的运行情况:如果你的应用log足够丰富,也可以分析以往用户的操作行为.类型喜好.地域分布或其他更多信息:如果一个应用 ...
- MySQL性能管理及架构设计:第2章 什么影响了MySQL性能
第2章 什么影响了MySQL性能 2-1 影响性能的几个方面 1.服务器的硬件 2.服务器的操作系统 3.数据库的存储引擎 4.数据库的参数配置 5.数据库表结构设计和SQL语句的编写和优化 2-2 ...
- tf调试函数
Tensorflow之调试(Debug)及打印变量 参考资料:https://wookayin.github.io/tensorflow-talk-debugging 几种常用方法: 1.通过Se ...
- OpenMP笔记(五)
任务调度主要用于并行的for循环中,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代的话,会造成各个线程计算负载不均衡,这会使得有些线程先执行完,有些后执行完,造成某些CPU核 ...
- vue图片查看器
vue 安装图片查看器插件安装cnpm install v-viewer引用 import 'viewerjs/dist/viewer.css' import Viewer from 'v-viewe ...
- Spring Cloud Alibaba 教程 | Nacos(三)
使用Nacos作为配置中心 前面我们已经介绍过滤Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.所以它可以作为注册中心和配置中心,作为注册中心Nacos可以让我们灵活配置多 ...
- php开启opcache
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销. 一.php.ini配置opchche ...
- 深入理解JVM - 垃圾收集器
垃圾回收主要是要解决3件事情: 那些内存需要回收? 如何回收? 什么时候回收? 那些内存需要回收 在强引用的情况下已经“死”了的对象就需要回收,在非强引用的情况下视情况回收.在java里面,几乎所有的 ...