Skip to content

clip_record

zanxiaofei edited this page Jul 25, 2017 · 5 revisions

断点拍摄

短视频SDK提供断点拍摄及回删功能
断点拍摄是在拍摄过程中可以进行分段式拍摄,并将最终拍摄的所有内容合成一个视频的功能
SDK提供同时提供断点拍摄的回删功能,即删除断点拍摄的任意一段视频

断点拍摄效果展示(TODO)

断点拍摄当前只支持相同配置设置的拍摄,不支持拍摄过程中修改参数

接口说明

  1. 开始拍摄
    任何一段视频的拍摄开始都可以调用该接口
boolean startRecord(String recordUrl)
  1. 停止当前视频拍摄
    任何一段视频的拍摄停止都可以调用该接口 接口为异步,接口返回后,会发送KSY_STREAMER_FILE_RECORD_STOPPED消息,下一次录制开始需要在接收到该消息后再进行
void stopRecord()
  1. 停止断点拍摄
    当完成所有拍摄后,调用该接口停止断点拍摄,并触发断点拍摄的视频合成
    接口为异步,所有断点的视频合成后,会通过MegerFilesFinishedListener通知合成结束,并返回合成后文件路径
 /**
     * 停止断点拍摄
     * @param outputFile 最终生成的文件路径
     * @param listener  文件合成结束回调
     */
    void stopRecord(final String outputFile, final MegerFilesFinishedListener listener)
  1. 删除某一段视频
    断点拍摄过程中,可以调用该接口删除任何一段拍摄的视频,Demo中展示了删除上一段视频的的效果
    /**
     * 删除断点拍摄的某一段视频
     * @param file 需要删除的文件路径
     * @return
     */
    boolean deleteRecordFile(String file) 
  1. 删除所有录制视频 断点拍摄结束后,视频合成成功后,可以删除所有之前录制的视频
    /**
     * delete all recorded files
     */
    boolean deleteAllFiles() 
  1. 获取最后一段视频
     /**
     * 返回当前拍摄的最后一段视频路径
     * @return 最后一段视频路径
     */
    String getLastRecordedFiles()
  1. 获取当前拍摄的视频个数
     /**
     * 返回当前拍摄的所有视频个数
     * @return 视频个数
     */
    int getRecordedFilesCount()

示例说明

Demo中对断点拍摄的使用进行展示,主要类包含(此UI仅做参考) :
RecordProgressView:断点拍摄进度显示
RecordProgressTimer:拍摄计时,用于更新拍摄进度
RecordProgressController:断点拍摄进度控制类 RecordClipModel:每段视频进度信息

  1. 初始化
        // 初始化断点拍摄UI
        //创建一个断点拍摄控制类,mBarBottomLayout为进度显示的父空间
        mRecordProgressCtl = new RecordProgressController(mBarBottomLayout);  
        //设置拍摄时长状态更新回调,用于通知最短拍摄时长和最长拍摄时长
        //(这里的时长是UI统计的拍摄时间,具体录制文件时长以录制后的文件为准)
        mRecordProgressCtl.setRecordingLengthChangedListener(mRecordLengthChangedListener);
        //启动进度更新timer
        mRecordProgressCtl.start();
  1. 开始拍摄
    调用开始拍摄按钮后,在回调StreamerConstants.KSY_STREAMER_OPEN_FILE_SUCCESS中,开始更新拍摄进度
 case StreamerConstants.KSY_STREAMER_OPEN_FILE_SUCCESS:
                    Log.d(TAG, "KSY_STREAMER_OPEN_FILE_SUCCESS");
                    mChronometer.setBase(SystemClock.elapsedRealtime());
                    mChronometer.start();
                    mRecordProgressCtl.startRecording();
  1. 停止拍摄
    在调用停止拍摄的接口后, 需要通知ctrl停止更新拍摄进度,参考Demo中的RecordActivity的stopRecord(boolean finished)的实现
 mRecordProgressCtl.stopRecording();
  1. 拍摄异常停止
    当拍摄异常停止时,SDK内部会主动删除异常的文件,UI需要更新进度显示
 private void rollBackClipForError() {
        int clipCount = mRecordProgressCtl.getClipListSize();
        int fileCount = mKSYRecordKit.getRecordedFilesCount();
        if (clipCount > fileCount) {
            int diff = clipCount - fileCount;
            for (int i = 0; i < diff; i++) {
                //删除最后一个录制文件
                mRecordProgressCtl.rollback();
            }
        }
    }
  1. 回删
    删除当前正在拍摄或者最近拍摄的视频,参考Demo中的RecordActivity的onBackoffClick()的实现
          //删除录制文件
          mKSYRecordKit.deleteRecordFile(mKSYRecordKit.getLastRecordedFiles());
          //更新进度
          mRecordProgressCtl.rollback();
          updateDeleteView();
Clone this wiki locally