点播播放器

本文介绍Android应用端,点播播放器的使用流程。

使用流程

  1. 创建点播播放器。

  2. 配置播放器的渲染窗口及设置播放回调。

  3. 根据需求配置播放器的其他参数。例如:软硬解码偏好、视频画面模式等。

  4. 设置播放数据源。

    1. 按文件播放设备录像:调用QueryDeviceVodUrl接口,获取本地NVR设备或IPC设备的存储卡中,指定录像文件名的录像文件rtmp播放地址,并作为数据源设置给播放器。

    2. 按时间播放设备录像:调用QueryDeviceVodUrlByTime接口,获取本地NVR设备或IPC设备存储卡中,指定录像时间范围的录像文件rtmp播放地址,并作为数据源设置给播放器。

    3. 按文件播放云存录像:调用QueryRecordUrl接口查询云端录像文件的hls播放地址,并作为数据源设置给播放器。

  5. 开始播放。

  6. 暂停、恢复、seek操作。

  7. 停止播放。

  8. 销毁点播播放器。

使用示例

设备录像点播

// 构造播放器实例
LVVodPlayer player = new LVVodPlayer(getApplicationContext());
// 设置textureview,可使用SDK提供的带画面缩放的ZoomableTextureView组件
player.setTextureView(zoomableTextureView);

// 设置必要的监听
player.setPlayerListener(new ILVPlayerListener() {
    @Override
    public void onError(LVPlayerError error) {
        // 播放报错
    }
    @Override
    public void onPlayerStateChange(LVPlayerState state) {
        Log.d(TAG, "play state= " + state.name());
        switch (state) {
            case STATE_BUFFERING:
                // 显示正在缓冲
                break;
            case STATE_IDLE:
                break;
            case STATE_READY:
                // 隐藏正在缓冲
                updatePlayInfo();
                break;
            case STATE_ENDED:
                // 隐藏正在缓冲
                break;
            default:
                break;
        }
    }
    @Override
    public void onRenderedFirstFrame(int elapsedTimeInMs) {
        // 显示回调,elapsedTimeInMs为出图耗时
    }
    @Override
    public void onVideoSizeChanged(int width, int height) {
        // 宽高变化回调
    }
    @Override
    public void onStandardSeiInfoUpdate(byte[] buffer, int length, long timeStamp) {
        // 码流SEI数据帧回调
    }
    @Override
    public void onVideoJitterBufferEmpty() {
    }
});

// 设置播放完成监听
player.setVodCompletionListener(new ILVVodPlayerCompletionListener() {
    @Override
    public void onCompletion() {
        // 播放完成
    }
});

// 设置数据源,从云端获取的设备录像点播rtmp地址及解密密钥
player.setDataSource("rtmp://xx.xx.xx.xx/vod/xxx", true, decryptIvBase64String, decryptKeyBase64String);


// 设置解码策略为硬解码优先
player.setDecoderStrategy(LVDecoderStrategy.LV_DECODER_STRATEGY_HARDWARE_FIRST);
// 设置画面模式为保持宽高
player.setVideoScalingMode(LVVideoScalingMode.LV_VIDEO_SCALING_MODE_FIT);
...
// 开始播放
player.start();
...
// 暂停
player.pause();
...
// 恢复
player.resume();
...
// 停止播放
player.stop();
...
// 释放播放器资源
player.release();                 

云存录像点播

// 构造播放器实例
LVVodPlayer player = new LVVodPlayer(getApplicationContext());
// 设置textureview,可使用SDK提供的带画面缩放的ZoomableTextureView组件
player.setTextureView(zoomableTextureView);
// 设置必要的监听
player.setPlayerListener(new ILVPlayerListener() {
    @Override
    public void onError(LVPlayerError error) {
        // 播放报错
    }
    @Override
    public void onPlayerStateChange(LVPlayerState state) {
        Log.d(TAG, "play state= " + state.name());
        switch (state) {
            case STATE_BUFFERING:
                // 显示正在缓冲
                break;
            case STATE_IDLE:
                break;
            case STATE_READY:
                // 隐藏正在缓冲
                updatePlayInfo();
                break;
            case STATE_ENDED:
                // 隐藏正在缓冲
                break;
            default:
                break;
        }
    }
    @Override
    public void onRenderedFirstFrame(int elapsedTimeInMs) {
        // 显示回调,elapsedTimeInMs为出图耗时
    }
    @Override
    public void onVideoSizeChanged(int width, int height) {
        // 宽高变化回调
    }
    @Override
    public void onStandardSeiInfoUpdate(byte[] buffer, int length, long timeStamp) {
        // 码流SEI数据帧回调
    }
    @Override
    public void onVideoJitterBufferEmpty() {
    }
});
// 设置播放完成监听
player.setVodCompletionListener(new ILVVodPlayerCompletionListener() {
    @Override
    public void onCompletion() {
        // 播放完成
    }
});

// 设置数据源,从云端获取的hls播放地址
player.setDataSource("https://xx.xx.xx.xx/hls/xx.m3u8");

// 设置解码策略为硬解码优先
player.setDecoderStrategy(LVDecoderStrategy.LV_DECODER_STRATEGY_HARDWARE_FIRST);
// 设置画面模式为保持宽高
player.setVideoScalingMode(LVVideoScalingMode.LV_VIDEO_SCALING_MODE_FIT);
...
// 开始播放
player.start();
...
// 暂停
player.pause();
...
// 恢复
player.resume();
...
// 停止播放
player.stop();
...
// 释放播放器资源
player.release();