全部产品
云市场

RTMP播放器

更新时间:2019-02-20 21:38:09

RTMP播放器

提供两种RTMP播放器,LivePlayer用于rtmp直播源的播放,VodPlayer用于rtmp点播源的播放.

RTMP直播播放器(LivePlayer)

直播播放器使用说明:

  1. // 创建播放器实例
  2. LivePlayer player = new LivePlayer();
  3. // 设置surfaceview, 必须为GLSurfaceView
  4. // 注意:GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法
  5. player.setSurfaceView(GLSurfaceView);
  6. // 设置必要的状态监听
  7. player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() {
  8. @Override
  9. public void onPlayerStateChange(int playerState) {
  10. Log.d(TAG, "play state= " + playerState);
  11. switch (playerState) {
  12. case Player.STATE_BUFFERING:
  13. break;
  14. case Player.STATE_IDLE:
  15. break;
  16. case Player.STATE_READY:
  17. break;
  18. case Player.STATE_ENDED:
  19. break;
  20. default:
  21. break;
  22. }
  23. }
  24. });
  25. // 设置错误监听
  26. player.setOnErrorListener(new OnErrorListener() {
  27. @Override
  28. public void onError(PlayerException exception) {
  29. makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage());
  30. }
  31. });
  32. // 设置rtmp地址
  33. player.setDataSource("rtmp://live.hkstv.hk.lxdns.com/live/hks2");
  34. // 设置数据源就绪监听器
  35. player.setOnPreparedListener(new OnPreparedListener() {
  36. @Override
  37. public void onPrepared() {
  38. // 数据源就绪后开始播放
  39. player.start();
  40. }
  41. });
  42. player.prepare();
  43. ...
  44. // 停止播放
  45. player.stop();
  46. ...
  47. // 释放播放器资源
  48. player.release();

RTMP点播播放器(VodPlayer)

点播播放器使用说明:

  1. // 创建播放器实例
  2. VodPlayer player = new VodPlayer();
  3. // 设置surfaceview, 必须为GLSurfaceView
  4. // 注意:GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法
  5. player.setSurfaceView(GLSurfaceView);
  6. // 设置必要的状态监听
  7. player.setOnPlayerStateChangedListener(new OnPlayerStateChangedListener() {
  8. @Override
  9. public void onPlayerStateChange(int playerState) {
  10. Log.d(TAG, "play state= " + playerState);
  11. switch (playerState) {
  12. case Player.STATE_BUFFERING:
  13. break;
  14. case Player.STATE_IDLE:
  15. break;
  16. case Player.STATE_READY:
  17. break;
  18. case Player.STATE_ENDED:
  19. break;
  20. default:
  21. break;
  22. }
  23. }
  24. });
  25. // 设置错误监听
  26. player.setOnErrorListener(new OnErrorListener() {
  27. @Override
  28. public void onError(PlayerException exception) {
  29. makeToast("errorcode: " + exception.getCode() + "\n" + exception.getMessage());
  30. }
  31. });
  32. // 设置支持点播的rtmp地址
  33. player.setDataSource("rtmp://xxxx");
  34. // 设置数据源就绪监听器
  35. player.setOnPreparedListener(new OnPreparedListener() {
  36. @Override
  37. public void onPrepared() {
  38. // 数据源就绪后开始播放
  39. player.start();
  40. }
  41. });
  42. player.prepare();
  43. ...
  44. // 暂停播放
  45. player.pause();
  46. ...
  47. // 恢复播放
  48. player.resume();
  49. ...
  50. // 停止播放
  51. player.stop();
  52. ...
  53. // 释放播放器资源
  54. player.release();

接口说明:

LivePlayer

  • 构造方法
  1. /**
  2. * 支持{@link #setDataSource(String)}
  3. * {@link #setDataSource(String, boolean, byte[], byte[])}的源
  4. */
  5. LivePlayer();
  • 设置非加密播放源
  1. /**
  2. * 设置播放源
  3. * @param url RTMP地址
  4. */
  5. void setDataSource(String url) throws IllegalArgumentException;
  • 设置加密播放源
  1. /**
  2. * 设置加密播放源(请确保源是做过AES加密)
  3. * @param url rtmp源地址
  4. * @param isEncrypted 是否是加密源
  5. * @param decryptIv 解密向量,16 byte array
  6. * @param decryptKey 解密密钥, 16 byte array
  7. * @throws IllegalArgumentException
  8. */
  9. void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
  • 校验和准备数据
  1. /**
  2. * 校验和准备数据
  3. */
  4. void prepare();
  • 开始播放视频
  1. /**
  2. * 开始播放视频
  3. */
  4. void start();
  • 停止播放
  1. /**
  2. * 停止播放
  3. */
  4. void stop();
  • 重置播放器
  1. /**
  2. * 重置播放器
  3. */
  4. void reset();
  • 释放播放器资源
  1. /**
  2. * 释放播放器资源
  3. */
  4. void release();
  • 截图
  1. /**
  2. * 当前视频画面截图
  3. *
  4. * @return 如果当前无画面则返回 null
  5. */
  6. Bitmap snapShot();
  • 开始录屏
  1. /**
  2. * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中
  3. * 文件名后缀必须为.mp4
  4. * 须在{@link PlayerState#STATE_READY}时调用有效
  5. *
  6. * @param contentFile
  7. * @return 操作成功与否
  8. */
  9. boolean startRecordingContent(File contentFile) throws IOException;
  • 结束录屏
  1. /**
  2. * 停止记录播放内容
  3. * @return 操作成功与否
  4. */
  5. boolean stopRecordingContent();
  • 设置播放器音量
  1. /**
  2. * 设置播放器音量
  3. * @param audioVolume 范围 0-1, 0为静音
  4. */
  5. void setVolume(float audioVolume);
  • 设置音频流通道类型
  1. /**
  2. * 设置音频流通道类型,see {@link android.media.AudioManager}
  3. * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿.
  4. * @param streamType
  5. */
  6. void setAudioStreamType(int streamType);
  • 设置画面缩放模式
  1. /**
  2. * 设置视频画面缩放模式, 默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
  3. * @param videoScalingMode 参考:
  4. * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}
  5. * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
  6. */
  7. void setVideoScalingMode(int videoScalingMode);
  • 设置surfaceview
  1. /**
  2. * 设置SurfaceView, 必须为GLSurfaceView
  3. * @param surfaceview
  4. */
  5. void setSurfaceView(SurfaceView surfaceview);
  • 清除surfaceview
  1. /**
  2. * 清除surfaceview
  3. */
  4. void clearSurfaceView();
  • 设置数据源准备就绪事件监听器
  1. /**
  2. * 设置数据源准备就绪事件监听器
  3. *
  4. * @param listener
  5. */
  6. void setOnPreparedListener(OnPreparedListener listener);
  • 设置播放器错误事件监听器
  1. /**
  2. * 设置播放器错误事件监听器,错误类型参考:
  3. * {@link PlayerException.SOURCE_ERROR}
  4. * {@link PlayerException.RENDER_ERROR}
  5. * {@link PlayerException.UNEXPECTED_ERROR}
  6. * @param listener
  7. */
  8. void setOnErrorListener(OnErrorListener listener);
  • 设置播放状态变更事件监听器
  1. /**
  2. * 设置播放状态变更事件监听器
  3. * @param listener
  4. */
  5. void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener);
  • 设置首帧被渲染事件监听器
  1. /**
  2. * 设置首帧被渲染事件监听器
  3. * @param listener
  4. */
  5. void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener);
  • 获取音量
  1. /**
  2. * 获取音量
  3. * @return 范围0-1
  4. */
  5. float getVolume();
  • 获取播放器状态
  1. /**
  2. * 获取播放状态
  3. * @return 状态枚举,参考:
  4. * {@link PlayerState#STATE_IDLE} 播放器初始状态
  5. * {@link PlayerState#STATE_BUFFERING} 缓冲中状态
  6. * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态
  7. * {@link PlayerState#STATE_ENDED} 播放完成状态
  8. */
  9. int getPlayState();
  • 获取播放器当前流的连接类型
  1. /**
  2. * 获取播放器当前流的连接类型
  3. * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
  4. *
  5. * @return {@link StreamConnectType}
  6. */
  7. StreamConnectType getStreamConnectType();
  • 获取播放器当前的帧率/码率等信息
  1. /**
  2. * 获取播放器当前的帧率/码率等信息
  3. * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
  4. *
  5. * @return 包含帧率/码率等信息的json string
  6. */
  7. PlayInfo getCurrentPlayInfo();

VodPlayer

  • 构造方法
  1. /**
  2. * 对于一般rtmp数据源,使用该构造方法初始化
  3. * 支持{@link #setDataSource(String)}
  4. * {@link #setDataSource(String, boolean, byte[], byte[])}的源
  5. */
  6. VodPlayer();
  • 设置非加密播放源
  1. /**
  2. * 设置播放源
  3. * @param url RTMP地址
  4. */
  5. void setDataSource(String url) throws IllegalArgumentException;
  • 设置加密播放源
  1. /**
  2. * 设置加密播放源(请确保源是做过AES加密)
  3. * @param url rtmp源地址
  4. * @param isEncrypted 是否是加密源
  5. * @param decryptIv 解密向量,16 byte array
  6. * @param decryptKey 解密密钥, 16 byte array
  7. * @throws IllegalArgumentException
  8. */
  9. void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;
  • 校验和准备数据
  1. /**
  2. * 校验和准备数据
  3. */
  4. void prepare();
  • 开始或恢复播放视频
  1. /**
  2. * 开始播放或恢复播放视频
  3. */
  4. void start();
  • 暂停播放
  1. /**
  2. * 暂停播放, 调用start()恢复播放
  3. */
  4. void pause();
  • seek到指定位置
  1. /**
  2. * seek到指定位置
  3. * @param position 毫秒
  4. */
  5. void seekTo(long positionInMs);
  • 停止播放
  1. /**
  2. * 停止播放
  3. */
  4. void stop();
  • 重置播放器
  1. /**
  2. * 重置播放器
  3. */
  4. void reset();
  • 释放播放器资源
  1. /**
  2. * 释放播放器资源
  3. */
  4. void release();
  • 截图
  1. /**
  2. * 当前视频画面截图
  3. *
  4. * @return 如果当前无画面则返回 null
  5. */
  6. Bitmap snapShot();
  • 开始录屏
  1. /**
  2. * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中
  3. * 文件名后缀必须为.mp4
  4. * 须在{@link PlayerState#STATE_READY}时调用有效
  5. *
  6. * @param contentFile
  7. * @return 操作成功与否
  8. */
  9. boolean startRecordingContent(File contentFile) throws IOException;
  • 结束录屏
  1. /**
  2. * 停止记录播放内容
  3. * @return 操作成功与否
  4. */
  5. boolean stopRecordingContent();
  • 设置播放器音量
  1. /**
  2. * 设置播放器音量
  3. * @param audioVolume 范围 0-1, 0为静音
  4. */
  5. void setVolume(float audioVolume);
  • 设置音频流通道类型
  1. /**
  2. * 设置音频流通道类型,see {@link android.media.AudioManager}
  3. * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿.
  4. * @param streamType
  5. */
  6. void setAudioStreamType(int streamType);
  • 设置画面缩放模式
  1. /**
  2. * 设置视频画面缩放模式, 默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
  3. * @param videoScalingMode 参考:
  4. * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}
  5. * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
  6. */
  7. void setVideoScalingMode(int videoScalingMode);
  • 设置surfaceview
  1. /**
  2. * 设置SurfaceView, 必须为GLSurfaceView
  3. * @param surfaceview
  4. */
  5. void setSurfaceView(SurfaceView surfaceview);
  • 清除surfaceview
  1. /**
  2. * 清除surfaceview
  3. */
  4. void clearSurfaceView();
  • 设置数据源准备就绪事件监听器
  1. /**
  2. * 设置数据源准备就绪事件监听器
  3. *
  4. * @param listener
  5. */
  6. void setOnPreparedListener(OnPreparedListener listener);
  • 设置播放器错误事件监听器
  1. /**
  2. * 设置播放器错误事件监听器,错误类型参考:
  3. * {@link PlayerException.SOURCE_ERROR}
  4. * {@link PlayerException.RENDER_ERROR}
  5. * {@link PlayerException.UNEXPECTED_ERROR}
  6. * @param listener
  7. */
  8. void setOnErrorListener(OnErrorListener listener);
  • 设置播放状态变更事件监听器
  1. /**
  2. * 设置播放状态变更事件监听器
  3. * @param listener
  4. */
  5. void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener);
  • 设置首帧被渲染事件监听器
  1. /**
  2. * 设置首帧被渲染事件监听器
  3. * @param listener
  4. */
  5. void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener);
  • 获取当前播放进度
  1. /**
  2. * 获取当前播放进度
  3. * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
  4. * @return 单位MS
  5. */
  6. long getCurrentPosition();
  • 获取视频总时长
  1. /**
  2. * 获取视频总时长
  3. * 播放器状态为{@link #STATE_READY}时调用有效
  4. * @return 单位MS
  5. */
  6. long getDuration();
  • 获取音量
  1. /**
  2. * 获取音量
  3. * @return 范围0-1
  4. */
  5. float getVolume();
  • 获取播放器状态
  1. /**
  2. * 获取播放状态
  3. * @return 状态枚举,参考:
  4. * {@link PlayerState#STATE_IDLE} 播放器初始状态
  5. * {@link PlayerState#STATE_BUFFERING} 缓冲中状态
  6. * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态
  7. * {@link PlayerState#STATE_ENDED} 播放完成状态
  8. */
  9. int getPlayState();
  • 获取播放器当前流的连接类型
  1. /**
  2. * 获取播放器当前流的连接类型
  3. * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
  4. *
  5. * @return {@link StreamConnectType}
  6. */
  7. StreamConnectType getStreamConnectType();
  • 获取播放器当前的帧率/码率等信息
  1. /**
  2. * 获取播放器当前的帧率/码率等信息
  3. * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
  4. *
  5. * @return 包含帧率/码率等信息的json string
  6. */
  7. PlayInfo getCurrentPlayInfo();