-
Notifications
You must be signed in to change notification settings - Fork 53
clip_record
zanxiaofei edited this page Jul 25, 2017
·
5 revisions
短视频SDK提供断点拍摄及回删功能
断点拍摄是在拍摄过程中可以进行分段式拍摄,并将最终拍摄的所有内容合成一个视频的功能
SDK提供同时提供断点拍摄的回删功能,即删除断点拍摄的任意一段视频
断点拍摄效果展示(TODO)
断点拍摄当前只支持相同配置设置的拍摄,不支持拍摄过程中修改参数
- 开始拍摄
任何一段视频的拍摄开始都可以调用该接口
boolean startRecord(String recordUrl)
- 停止当前视频拍摄
任何一段视频的拍摄停止都可以调用该接口 接口为异步,接口返回后,会发送KSY_STREAMER_FILE_RECORD_STOPPED消息,下一次录制开始需要在接收到该消息后再进行
void stopRecord()
- 停止断点拍摄
当完成所有拍摄后,调用该接口停止断点拍摄,并触发断点拍摄的视频合成
接口为异步,所有断点的视频合成后,会通过MegerFilesFinishedListener通知合成结束,并返回合成后文件路径
/**
* 停止断点拍摄
* @param outputFile 最终生成的文件路径
* @param listener 文件合成结束回调
*/
void stopRecord(final String outputFile, final MegerFilesFinishedListener listener)
- 删除某一段视频
断点拍摄过程中,可以调用该接口删除任何一段拍摄的视频,Demo中展示了删除上一段视频的的效果
/**
* 删除断点拍摄的某一段视频
* @param file 需要删除的文件路径
* @return
*/
boolean deleteRecordFile(String file)
- 删除所有录制视频 断点拍摄结束后,视频合成成功后,可以删除所有之前录制的视频
/**
* delete all recorded files
*/
boolean deleteAllFiles()
- 获取最后一段视频
/**
* 返回当前拍摄的最后一段视频路径
* @return 最后一段视频路径
*/
String getLastRecordedFiles()
- 获取当前拍摄的视频个数
/**
* 返回当前拍摄的所有视频个数
* @return 视频个数
*/
int getRecordedFilesCount()
Demo中对断点拍摄的使用进行展示,主要类包含(此UI仅做参考) :
RecordProgressView:断点拍摄进度显示
RecordProgressTimer:拍摄计时,用于更新拍摄进度
RecordProgressController:断点拍摄进度控制类
RecordClipModel:每段视频进度信息
- 初始化
// 初始化断点拍摄UI
//创建一个断点拍摄控制类,mBarBottomLayout为进度显示的父空间
mRecordProgressCtl = new RecordProgressController(mBarBottomLayout);
//设置拍摄时长状态更新回调,用于通知最短拍摄时长和最长拍摄时长
//(这里的时长是UI统计的拍摄时间,具体录制文件时长以录制后的文件为准)
mRecordProgressCtl.setRecordingLengthChangedListener(mRecordLengthChangedListener);
//启动进度更新timer
mRecordProgressCtl.start();
- 开始拍摄
调用开始拍摄按钮后,在回调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();
- 停止拍摄
在调用停止拍摄的接口后, 需要通知ctrl停止更新拍摄进度,参考Demo中的RecordActivity的stopRecord(boolean finished)的实现
mRecordProgressCtl.stopRecording();
- 拍摄异常停止
当拍摄异常停止时,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();
}
}
}
- 回删
删除当前正在拍摄或者最近拍摄的视频,参考Demo中的RecordActivity的onBackoffClick()的实现
//删除录制文件
mKSYRecordKit.deleteRecordFile(mKSYRecordKit.getLastRecordedFiles());
//更新进度
mRecordProgressCtl.rollback();
updateDeleteView();