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 ...
随机推荐
- 将list等分成n份
public static <T> Map<Integer, List<T>> spiltList(List<T> list, int num) { M ...
- maven中的groupId和artifactId 区分
原文地址:https://blog.csdn.net/snowin1994/article/details/53024871/ maven中的groupId和artifactId 区分 groupid ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新
如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...
- springboot和shiro的整合
直接贴上代码 1. 所需要的jar包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId ...
- java反射修改静态方法的值setAccessible
这几天闲来无事.在网上看了一个题目,相信大家都知道这个题目 static void change(String str){ str="welcome"; ...
- 物体检测中常用的几个概念迁移学习、IOU、NMS理解
1.迁移学习 迁移学习也即所谓的有监督预训练(Supervised pre-training),我们通常把它称之为迁移学习.比如你已经有一大堆标注好的人脸年龄分类的图片数据,训练了一个CNN,用于人脸 ...
- DB---WAL技术
摘要:这个WAL技术也需要加以整理,即 write-ahead logging (预写式日志),待整理...
- Linux 下载安装
安装教程:https://www.runoob.com/linux/linux-install.html Linux图形界面与命令行界面切换https://blog.csdn.net/ab522628 ...
- Ivory Coast Map
Fun Facts about Cote d'Ivoire The Republic of Cote d'Ivoire (previously known as the Ivory Coast) is ...
- Maven--远程仓库的认证
大部分远程仓库无须认证就可以访问,但有时候出于安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库. 配置认证信息和配置仓库信息不同,仓库信息可以直接配置在 POM 文件中,但是认证信息必须配置在 ...