提供两种RTMP播放器,LivePlayer用于rtmp直播源的播放,VodPlayer用于rtmp点播源的播放. RTMP直播播放器(LivePlayer)直播播放器使用说明。

  • 直播播放器
    // 构造播放器实例
    LivePlayer player = new LivePlayer(getApplicationContext());
    
    // 设置textureview
    player.setTextureView(textureView);
    // 设置必要的状态监听
    player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() {
        @Override
        public void onPlayerStateChange(int playerState) {
            Log.d(TAG, "play state= " + playerState);
            switch (playerState) {
                case Player.STATE_BUFFERING:
                    break;
                case Player.STATE_IDLE:
                    break;
                case Player.STATE_READY:
                    break;
                case Player.STATE_ENDED:
                    break;
                default:
                    break;
            }
        }
    });
    // 设置错误监听
    player.setOnErrorListener(new OnErrorListener() {
        @Override
        public void onError(PlayerException exception) {
            makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage());
        }
    });
    
    // 设置rtmp地址
    player.setDataSource("rtmp://58.200.131.2:1935/livetv/hunantv");
    // 设置数据源就绪监听器
    player.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared() {
            // 数据源就绪后开始播放
            player.start();
        }
    });
    player.prepare();
    ...
    // 停止播放
    player.stop();
    ...
    // 释放播放器资源
    player.release();     
  • 设备录像点播播放器
    // 构造播放器实例
    VodPlayer player = new VodPlayer(getApplicationContext());
    
    // 设置textureview
    player.setTextureView(textureView);
    // 设置必要的状态监听
    player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() {
        @Override
        public void onPlayerStateChange(int playerState) {
            Log.d(TAG, "play state= " + playerState);
            switch (playerState) {
                case Player.STATE_BUFFERING:
                    break;
                case Player.STATE_IDLE:
                    break;
                case Player.STATE_READY:
                    break;
                case Player.STATE_ENDED:
                    break;
                default:
                    break;
            }
        }
    });
    // 设置错误监听
    player.setOnErrorListener(new OnErrorListener() {
        @Override
        public void onError(PlayerException exception) {
            makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage());
        }
    });
    
    // 设置支持点播的rtmp地址
    player.setDataSource("rtmp://xxxx");
    // 设置数据源就绪监听器
    player.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared() {
            // 数据源就绪后开始播放
            player.start();
        }
    });
    player.prepare();
    ...
    // 暂停播放
    player.pause();
    ...
    // 恢复播放
    player.start();
    ...
    // 停止播放
    player.stop();
    ...
    // 释放播放器资源
    player.release();              

接口说明

  • LivePlayer
    • 构造方法
      /**
         * 构造方法
         * @param applicationContext ApplicationContext
         */
        LivePlayer(Context applicationContext);
    • 设置非加密播放源
      /**
         * 设置播放源
         * @param url RTMP地址
         */
        void setDataSource(String url) throws IllegalArgumentException;
    • 设置加密播放源
      /**
         * 设置加密播放源(请确保源是做过AES加密)
         * @param url         rtmp源地址
         * @param isEncrypted 是否是加密源
         * @param decryptIv   解密向量,16 byte array
         * @param decryptKey  解密密钥,16 byte array
         * @throws IllegalArgumentException
         */
        void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
    • 校验和准备数据
      /**
         * 校验和准备数据
         */
        void prepare();
    • 开始播放视频
      /**
         * 开始播放视频
         */
        void start();
    • 停止播放
      /**
         * 停止播放
         */
        void stop();
    • 重置播放器
      /**
         * 重置播放器
         */
        void reset();
    • 释放播放器资源
      /**
         * 释放播放器资源
         */
        void release();
    • 设置重连次数
          /**
           * 设置重连次数
           * 只针对发生{@link PlayerException#SUB_CODE_UNEXPECTED_PULL_STREAM_ERROR}错误时做重连
           * @param count 默认为0,建议不超过3次
           */
          void setReconnectCount(int count);
    • 截图
      /**
         * 当前视频画面截图
         * @return 如果当前无画面则返回 null
         */
        Bitmap snapShot();
    • 截图到文件
      /**
           * 当前视频画面截图
           * @param jpegFile 保存截图jpeg的文件
           * @return true - 文件保存成功
           */
          boolean snapShotToFile(File jpegFile);
    • 开始录屏
      /**
         * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中
         * 文件名后缀必须为.mp4
         * 须在{@link PlayerState#STATE_READY}时调用有效
         * @param contentFile
         * @return 操作成功与否
         */
        boolean startRecordingContent(File contentFile) throws IOException;
    • 获取当前录制的视频时长
          /**
           * 获取当前录制的视频时长
           * @return 单位ms
           */
          long getCurrentRecordingContentDuration();
    • 结束录屏
      /**
         * 停止记录播放内容
         * @return 操作成功与否
         */
        boolean stopRecordingContent();
    • 设置播放器音量
      /**
         * 设置播放器音量
         * @param audioVolume 范围 0-1,0为静音
         */
        void setVolume(float audioVolume);
    • 设置音频流通道类型
      /**
         * 设置音频流通道类型,see {@link android.media.AudioManager},默认使用AudioManager.STREAM_MUSIC
         * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿
         * @param audioStreamType
         */
        void setAudioStreamType(int audioStreamType);
    • 设置画面缩放模式
      /**
         * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
         * @param videoScalingMode 参见:
         * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}
         * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
         */
        void setVideoScalingMode(int videoScalingMode);
    • 设置播放停止时画面绘制策略
      /**
           * 设置播放停止时画面绘制策略
           * @param playerStoppedDrawingMode
           * ALWAYS_KEEP_LAST_FRAME          播放停止时始终保留最后一帧画面
           * KEEP_LAST_FRAME_WITHOUT_ERROR   播放停止时只有未出现错误时才保留最后一帧画面(默认是此模式) 
           * ALWAYS_BLACK                    播放停止时始终显示黑色
           */
          void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)
    • 设置播放器固定缓存帧数
      /**
         * 设置播放器固定缓存帧数
         * @param frameCount 播放器固定缓存帧数,范围0-16帧,数值越大播放器延迟越大,流畅性越好,默认5帧
         */
        void setBufferedFrameCount(int frameCount);
    • 设置surfaceview
      /**
           * 设置SurfaceView, 必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView
           * 注意:GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法; 
           * GLSurfaceView及其容器不可设置背景色.
           * @param surfaceview
           */
        void setSurfaceView(SurfaceView surfaceview);
    • 清除surfaceview
      /**
         * 清除surfaceview
         */
        void clearSurfaceView();
    • 设置textureview
      /**
           * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照
           * @param textureview
           */
          void setTextureView(TextureView textureView);
    • 清除textureview
      /**
           * 清除textureview
           */
          void clearTextureView();
    • 设置是否由外部来完成YUV数据的渲染
          /**
           * 设置是否由外部来完成YUV数据的渲染
           * @param useExternalRender true为由外部渲染,false为由内部渲染
           */
          void setUseExternalRender(boolean useExternalRender);
    • 获取是否使用外部渲染
          /**
           * 获取是否使用外部渲染
           * @return true为由外部渲染,false为由内部渲染
           */
          boolean useExternalRender();
    • 设置外部渲染监听器
          /**
           * 设置外部渲染监听器
           * @param onExternalRenderListener
           */
          void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener {
      
      public interface OnExternalRenderListener {
          /**
           * 通知已经有YUV数据帧需要被渲染
           * @param width 视频帧宽
           * @param height 视频帧高
           * @param timestamp 时间戳,单位为ms
           */
          void onVideoFrameUpdate(int width, int height ,long timestamp);
      }
    • 获取YUV帧数据用于渲染
          /**
           * 获取YUV帧数据用于渲染,只在外部渲染模式下有效
           * @return Yuv420p格式视频帧
           */
          Yuv420pFrame getYuvFrame();
    • 设置SEI信息监听器
          /**
           * 设置SEI信息监听器
           *
           * @param seiInfoBuffer  创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃
           * @param onSeiInfoListener
           */
          void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener);
      
      interface OnSeiInfoListener {
          /**
           * 当SEI信息更新时回调
           * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据
           * @param seiInfoBuffer
           */
          void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer);
      }
      							
    • 设置数据源准备就绪事件监听器
      /**
         * 设置数据源准备就绪事件监听器
         * @param listener
         */
        void setOnPreparedListener(OnPreparedListener listener);
      
      public interface OnPreparedListener {
          /**
           * 数据源准备就绪回调
           */
          void onPrepared();
      }
    • 设置播放器错误事件监听器
      /**
         * 设置播放器错误事件监听器,错误类型参见:
         * {@link PlayerException.SOURCE_ERROR}
         * {@link PlayerException.RENDER_ERROR}
         * {@link PlayerException.UNEXPECTED_ERROR}
         * @param listener
         */
        void setOnErrorListener(OnErrorListener listener);
      
      public interface OnErrorListener {
          /**
           * 播放器错误回调,参见
           * {@link PlayerException}
           * @param exception
           */
          void onError(PlayerException exception);
      }
    • 设置播放状态变更事件监听器
      /**
         * 设置播放状态变更事件监听器,请参见状态图
         * @param listener
         */
        void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener);
      
      public interface OnPlayerStateChangedListener {
          /**
           * 播放器状态变更回调
           *
           * @param playerState 参见
           *                    {@link PlayerState#STATE_IDLE}
           *                    {@link PlayerState#STATE_BUFFERING}
           *                    {@link PlayerState#STATE_READY}
           *                    {@link PlayerState#STATE_ENDED}
           */
          void onPlayerStateChange(int playerState);
      }
    • 设置首帧被渲染事件监听器
      /**
         * 设置首帧被渲染事件监听器
         * @param listener
         */
        void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener);
      
      public interface OnRenderedFirstFrameListener {
          /**
           * 首帧被渲染回调
           */
          void onRenderedFirstFrame();
      }
    • 设置视频内容宽高变更回调
          /**
           * 设置视频内容宽高变更回调
           * @param listener
           */
          void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener);
      public interface OnVideoSizeChangedListener {
      
          /**
           * 内容宽高改变时的回调
           *
           * @param width  视频内容宽,单位像素
           * @param height 视频内容高,单位像素
           */
          void onVideoSizeChanged(int width, int height);
      }
    • 获取音量
      /**
         * 获取音量
         * @return 范围0-1,0为静音
         */
        float getVolume();
    • 获取播放器状态
      /**
         * 获取播放状态
         * @return 状态枚举:
         * {@link PlayerState#STATE_IDLE} 播放器初始状态
         * {@link PlayerState#STATE_BUFFERING} 缓冲中状态
         * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态
         * {@link PlayerState#STATE_ENDED} 播放完成状态
         */
        int getPlayState();
    • 获取播放器当前流的连接类型
      /**
         * 获取播放器当前流的连接类型
         * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
         *
         * @return {@link StreamConnectType}
         */
        StreamConnectType getStreamConnectType();
    • 获取播放器当前的帧率/码率等信息
      /**
         * 获取播放器当前的帧率/码率等信息
         * 播放器状态为{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效
         * @return 包含帧率/码率等信息的json string
         */
        PlayInfo getCurrentPlayInfo();
  • VodPlayer
    • 构造方法
      /**
         * 构造方法
         * @param applicationContext ApplicationContext
         */    
        VodPlayer(Context applicationContext);
    • 设置非加密播放源
      /**
         * 设置播放源
         * @param url RTMP地址
         */
        void setDataSource(String url) throws IllegalArgumentException;
    • 设置加密播放源
      /**
         * 设置加密播放源(请确保源是做过AES加密)
         * @param url         rtmp源地址
         * @param isEncrypted 是否是加密源
         * @param decryptIv   解密向量,16 byte array
         * @param decryptKey  解密密钥,16 byte array
         * @throws IllegalArgumentException
         */
        void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
    • 校验和准备数据
      /**
         * 校验和准备数据
         */
        void prepare();
    • 开始或恢复播放视频
      /**
         * 开始播放或恢复播放视频
         */
        void start();
    • 暂停播放
      /**
         * 暂停播放,调用start()恢复播放
         */
        void pause();
    • seek到指定位置
      /**
         * seek到指定位置
         * @param position 毫秒
         */
        void seekTo(long positionInMs);
    • 停止播放
      /**
         * 停止播放
         */
        void stop();
    • 重置播放器
      /**
         * 重置播放器
         */
        void reset();
    • 释放播放器资源
      /**
         * 释放播放器资源
         */
        void release();
    • 截图
      /**
         * 当前视频画面截图
         * @return 如果当前无画面则返回 null
         */
        Bitmap snapShot();
    • 截图到文件
      /**
           * 当前视频画面截图
           * @param jpegFile 保存截图jpeg的文件
           * @return true - 文件保存成功
           */
          boolean snapShotToFile(File jpegFile);
    • 开始录屏
      /**
         * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中
         * 文件名后缀必须为mp4
         * 须在{@link PlayerState#STATE_READY}时调用有效
         * @param contentFile
         * @return 操作成功与否
         */
        boolean startRecordingContent(File contentFile) throws IOException;
    • 获取当前录制的视频时长
          /**
           * 获取当前录制的视频时长
           * @return 单位ms
           */
          long getCurrentRecordingContentDuration();
    • 结束录屏
      /**
         * 停止记录播放内容
         * @return 操作成功与否
         */
        boolean stopRecordingContent();
    • 设置播放器音量
      /**
         * 设置播放器音量
         * @param audioVolume 范围 0-1,0为静音
         */
        void setVolume(float audioVolume);
    • 设置音频流通道类型
      /**
         * 设置音频流通道类型,参见{@link android.media.AudioManager}
         * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿
         * @param audioStreamType
         */
        void setAudioStreamType(int audioStreamType);
    • 设置画面缩放模式
      /**
         * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
         * @param videoScalingMode 参见:
         * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}
         * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
         */
        void setVideoScalingMode(int videoScalingMode);
    • 设置播放停止时画面绘制策略
      /**
           * 设置播放停止时画面绘制策略
           * @param playerStoppedDrawingMode
           * ALWAYS_KEEP_LAST_FRAME          播放停止时始终保留最后一帧画面
           * KEEP_LAST_FRAME_WITHOUT_ERROR   播放停止时只有未出现错误时才保留最后一帧画面(默认是此模式) 
           * ALWAYS_BLACK                    播放停止时始终显示黑色
           */
          void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)
    • 设置surfaceview
      /**
           * 设置SurfaceView,必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView
           * 注意GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法
           * GLSurfaceView及其容器不可设置背景色
           * @param surfaceview
           */
        void setSurfaceView(SurfaceView surfaceview);
    • 清除surfaceview
      /**
         * 清除surfaceview
         */
        void clearSurfaceView();
    • 设置textureview
      /**
           * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照
           * @param textureview
           */
          void setTextureView(TextureView textureView);
    • 清除textureview
      /**
           * 清除textureview
           */
          void clearTextureView();
    • 设置是否由外部来完成YUV数据的渲染
          /**
           * 设置是否由外部来完成YUV数据的渲染
           * @param useExternalRender true为由外部渲染,false为由内部渲染
           */
          void setUseExternalRender(boolean useExternalRender);
    • 获取是否使用外部渲染
          /**
           * 获取是否使用外部渲染
           * @return true为由外部渲染,false为由内部渲染
           */
          boolean useExternalRender();
    • 设置外部渲染监听器
          /**
           * 设置外部渲染监听器
           * @param onExternalRenderListener
           */
          void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener {
      
      public interface OnExternalRenderListener {
          /**
           * 通知已经有YUV数据帧需要被渲染
           * @param width 视频帧宽
           * @param height 视频帧高
           * @param timestamp 时间戳,单位为ms
           */
          void onVideoFrameUpdate(int width, int height ,long timestamp);
      }
    • 获取YUV帧数据用于渲染
          /**
           * 获取YUV帧数据用于渲染,只在外部渲染模式下有效
           * @return Yuv420p格式视频帧
           */
          Yuv420pFrame getYuvFrame();
    • 设置SEI信息监听器
          /**
           * 设置SEI信息监听器
           *
           * @param seiInfoBuffer  创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃
           * @param onSeiInfoListener
           */
          void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener);
      
      interface OnSeiInfoListener {
          /**
           * 当SEI信息更新时回调
           * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据
           * @param seiInfoBuffer
           */
          void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer);
      }
      							
    • 设置数据源准备就绪事件监听器
      /**
         * 设置数据源准备就绪事件监听器
         * @param listener
         */
        void setOnPreparedListener(OnPreparedListener listener);
      
      interface OnPreparedListener {
          /**
           * 数据源准备就绪回调
           */
          void onPrepared();
      }
    • 设置播放器错误事件监听器
      /**
         * 设置播放器错误事件监听器,错误类型参见:
         * {@link PlayerException.SOURCE_ERROR}
         * {@link PlayerException.RENDER_ERROR}
         * {@link PlayerException.UNEXPECTED_ERROR}
         * @param listener
         */
        void setOnErrorListener(OnErrorListener listener);
      
      interface OnErrorListener {
          /**
           * 播放器错误回调,参见
           * {@link PlayerException}
           * @param exception
           */
          void onError(PlayerException exception);
      }
    • 设置播放状态变更事件监听器
      /**
         * 设置播放状态变更事件监听器
         * @param listener
         */
        void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener);
      
      interface OnPlayerStateChangedListener {
          /**
           * 播放器状态变更回调
           *
           * @param playerState 参见
           *                    {@link PlayerState#STATE_IDLE}
           *                    {@link PlayerState#STATE_BUFFERING}
           *                    {@link PlayerState#STATE_READY}
           *                    {@link PlayerState#STATE_ENDED}
           */
          void onPlayerStateChange(int playerState);
      }
    • 设置首帧被渲染事件监听器
      /**
         * 设置首帧被渲染事件监听器
         * @param listener
         */
        void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener);
      
      interface OnRenderedFirstFrameListener {
          /**
           * 首帧被渲染回调
           */
          void onRenderedFirstFrame();
      }
    • 设置视频内容宽高变更回调
          /**
           * 设置视频内容宽高变更回调
           * @param listener
           */
          void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener);
      
      interface OnVideoSizeChangedListener {
      
          /**
           * 内容宽高改变时的回调
           *
           * @param width  视频内容宽,单位像素
           * @param height 视频内容高,单位像素
           */
          void onVideoSizeChanged(int width, int height);
      }
    • 设置播放到内容结束事件监听器
      /**
         * 设置播放到内容结束事件监听器
         * 收到该事件后,需要调用stop,播放器状态才会切到STATE_END
         * @param listener
         */
        void setOnCompletionListener(OnCompletionListener listener);
      
      interface OnCompletionListener {
          /**
           * 播放到文件末尾回调
           */
          void onCompletion();
      }
    • 获取当前播放进度
      /**
         * 获取当前播放进度,相对于开始位置的偏移量
         * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
         * @return 单位MS
         */
        long getCurrentPosition();
    • 获取视频总时长
      /**
         * 获取视频总时长
         * 播放器状态为{@link #STATE_READY}时调用有效
         * @return 单位MS
         */
        long getDuration();
    • 设置回放速率
           /**
           * 设置播放速率
           * 须在{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效
           * 非1倍速率下默认关闭声音
           * @param speed 只支持1/16、1/8、1/4、1/2、1、2、4、8、16倍速
           */
          void setPlaybackSpeed(float speed)
    • 获取音量
      /**
         * 获取音量
         * @return 范围0-1,0为静音
         */
        float getVolume();
    • 获取播放器状态
      /**
         * 获取播放状态
         * @return 状态枚举:
         * {@link PlayerState#STATE_IDLE} 播放器初始状态
         * {@link PlayerState#STATE_BUFFERING} 缓冲中状态
         * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态
         * {@link PlayerState#STATE_ENDED} 播放完成状态
         */
        int getPlayState();
    • 获取播放器当前流的连接类型
      /**
         * 获取播放器当前流的连接类型
         * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
         * @return {@link StreamConnectType}
         */
        StreamConnectType getStreamConnectType();
    • 获取播放器当前的帧率/码率等信息
      /**
         * 获取播放器当前的帧率/码率等信息
         * 播放器状态为{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效
         * @return 包含帧率/码率等信息的json string
         */
        PlayInfo getCurrentPlayInfo();
  • ZoomableTextureView
    • 设置画面放大倍数上限
          /**
           * 设置画面放大倍数上限
           * 默认为4倍
           *
           * @param scale 倍数
           */
          void setMaxScale(float scale);
    • 将画面缩放比重置为1
          /**
           * 缩放比重置为1
           *
           * @param smooth 是否带有平滑变化效果
           */
          void zoomOut(boolean smooth);
    • 获取当前缩放比
          /**
           * 获取当前缩放比
           *
           * @return  未放缩时为1.0f
           */
          float getScale();
    • 设置监听器
          /* 设置监听器
           * @param listener
           */
          void setOnZoomableTextureListener(OnZoomableTextureListener listener);
      
          public interface OnZoomableTextureListener {
      
              /**
               * 当画面缩放比例发生变化时回调
               *
               * @param zoomableTextureView
               * @param scale               画面缩放比例
               */
              void onScaleChanged(ZoomableTextureView zoomableTextureView, float scale);
      
              /**
               * view双击事件回调
               *
               * @param zoomableTextureView
               * @param e                   MotionEvent
               * @return 事件是否被处理,如果返回false,则会启用内部缩放逻辑
               */
              boolean onDoubleTap(ZoomableTextureView zoomableTextureView, MotionEvent e);
      
              /**
               * view单击事件回调
               *
               * @param zoomableTextureView
               * @param e                   MotionEvent
               * @return 事件是否被处理
               */
              boolean onSingleTapConfirmed(ZoomableTextureView zoomableTextureView, MotionEvent e);
      
              /**
               * view长按事件回调
               *
               * @param zoomableTextureView
               * @param e                   MotionEvent
               */
              void onLongPress(ZoomableTextureView zoomableTextureView, MotionEvent e);
          }
    • 设置边缘监听器
      
           void setOnViewEdgeListener(OnViewEdgeListener listener)
      
           interface OnViewEdgeListener {
      
              /**
               * 当第一次拖动到view的边缘
               */
              void onViewEdgeFirstTouched();
      
              /**
               * 当拖动到view下边缘,持续拖动会持续回调
               *
               * @param zoomableTextureView
               * @param delta    持续处于边缘时触摸移动相对上次的差值
               */
              void onBottomEdge(ZoomableTextureView zoomableTextureView, float delta);
      
              /**
               * 当拖动到view上边缘,持续拖动会持续回调
               *
               * @param zoomableTextureView
               * @param delta               持续处于边缘时触摸移动相对上次的差值
               */
              void onTopEdge(ZoomableTextureView zoomableTextureView, float delta);
      
              /**
               * 当拖动到view右边缘,持续拖动会持续回调
               *
               * @param zoomableTextureView
               * @param delta               持续处于边缘时触摸移动相对上次的差值
               */
              void onRightEdge(ZoomableTextureView zoomableTextureView, float delta);
      
              /**
               * 当拖动到view左边缘,持续拖动会持续回调
               *
               * @param zoomableTextureView
               * @param delta               持续处于边缘时触摸移动相对上次的差值
               */
              void onLeftEdge(ZoomableTextureView zoomableTextureView, float delta);
          }