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()
  • 相关阅读:
    JSON 体验JSON (二)json格式化日期
    让D2006的控件面板回到D7的样式
    突破网站限制 复制网页内容
    欢迎光临
    加密Access数据库
    取得程序中一些特殊文件夹的位置
    连接带密码的Access数据库
    我被强暴,老公这样回答是人么?(转~非黄)
    【WinCE版凯立德】2012春季版地图下载
    刚刚拍到的日环食金星凌日
  • 原文地址:https://www.cnblogs.com/rchao/p/11190863.html
Copyright © 2011-2022 走看看