zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Pandas数据结构简要概述
    pip install PyQt5和pip install PyQt5tools安装后,找不到designer.exe路径
    解决Qt5中利用designer建立二级菜单无法输入中文的处理技巧
    事务
    大家一起讨论一下朋友网的人脉关系算法是怎么实现的
    .net程序员必须学习的10项技术
    KENDOUI控件 GRID中TEMPLATE中条件判断的使用
    Kendo Template 模板中使用KendoUI组件
    Kendo.Grid 使用POPUP时分别定义Create和Edit模板
    Kendo UI 遮罩层组件
  • 原文地址:https://www.cnblogs.com/rchao/p/11190863.html
Copyright © 2011-2022 走看看