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简单使用的更多相关文章

  1. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  2. Android 实现简单音乐播放器(一)

    今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...

  3. Android课程---Android Studio简单设置

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...

  4. Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...

  5. Android实现简单拨号器

    Android实现简单拨号器 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 界面布局只有GridLayout和EditText两个控件,全部 ...

  6. 【转】Android Studio简单设置

    原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...

  7. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  8. android JNI 简单demo(2)它JNI demo 写

    android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...

  9. Android Studio简单设置(转)

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...

随机推荐

  1. JavaScript 之 web API

    1.获取元素 document.getElementById('标签的id值'); document.getElementsByTagName('标签名'); document.getElements ...

  2. 【每日Scrum】第五天冲刺

    一.计划会议内容 仍然在解决数据库问题 二.任务看板 三.scrum讨论照片 四.产品的状态 无 五.任务燃尽图  

  3. 直击JDD | 徐雷:智能化零售,以技术为驱动力的突破路径

    "京东零售已经成为一家典型的以技术驱动为主的零售公司".在11月19日召开的 2019京东全球科技探索者大会上,京东零售集团CEO徐雷首次阐释了京东零售的智能化零售路径. 徐雷指出 ...

  4. 视频课程 | 云原生下的Serverless浅谈

    京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为主题的技术沙龙,现场多位技术大咖与开发者们面对面就Cloud Native进行了深入交流 ...

  5. 吴裕雄--天生自然 PHP开发学习:数组

    <?php $cars=array("Volvo","BMW","Toyota"); echo "I like " ...

  6. sersync配置

    只记录了自己的操作步骤,详细信息也可以参考https://www.cnblogs.com/sellsa/p/5345092.html 安装sersync 将sersync安装包解压后会有两个配置文件 ...

  7. java程序无法连接Rabbitmq

    java程序不能连接到rabbitmq,提示有包括501.403.402等错误. 各种调试都没用,后来是尝试新建一个用户,在配置文件中使用新用户连接,最后才使程序成功运行.

  8. Hibernate(三)--关联映射

    1.多对一 product----category category.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibern ...

  9. maven deploy到私服去掉时间戳

    直接上代码在插件中的配置. <plugin> <artifactId>maven-war-plugin</artifactId> <version>3. ...

  10. PAT Basic 1132 数列的⽚段和(20) [数学问题-简单数学]

    题目 给定⼀个正数数列,我们可以从中截取任意的连续的⼏个数,称为⽚段.例如,给定数列{0.1, 0.2, 0.3,0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0 ...