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()
  • 相关阅读:
    Android NDK 学习之传递类对象
    https://www.aminer.cn/ AI研究
    MYSQL 的一些文件及说明
    Windows下移动MariaDB数据目录 (转!)
    MariaDB Galera Cluster 10.1 只支持 LINUX ?!
    MARIADB 在 OPENSUSE 的安装。
    “命令行程序”的通用图形界面 (转)
    代码生成的地址:mygeneration
    上海力软--快速开发框架
    康力优蓝机器人 -- 优友U05类人型机器人发布
  • 原文地址:https://www.cnblogs.com/rchao/p/11190863.html
Copyright © 2011-2022 走看看