OpenHarmony 视频录制反复暂停恢复出现录制失败问题处理
一、问题描述 OpenHarmony 录制应用调用AVRecorder接口进行视频录制时,如果反复调用暂停和恢复录制的接口,会出现录制失败的情况,AVRecorder上报错误信息,录制的文件无法播放等。 二、复现方法 1、版本环境:OpenHarmony-4.1-Release、OpenHarmony-4.0-Release、O
一、问题描述
OpenHarmony 录制应用调用AVRecorder接口进行视频录制时,如果反复调用暂停和恢复录制的接口,可能会出现录制失败的问题,AVRecorder上报错误消息,录制的文件无法播放等。
二、复现方法
1、版本环境:OpenHarmony-4.1-Release、OpenHarmony-4.0-Release、OpenHarmony-3.2-Release
2、应用环境:录制应用设置AVRecorder的录制参数:VideoSourceType=1(VIDEO_SOURCE_SURFACE_ES),从surface传递给AVRecorder的输入数据是h264 es数据
3、录制失败的log中会有如下打印,音视频pts差异大于2s:
W C02b2b/splitmuxsink: {check_completed_gop():2760} [gst::MuxSinkBin:F1C0D0] error: Timestamping error on input streams
W C02b2b/splitmuxsink: {check_completed_gop():2760} [gst::MuxSinkBin:F1C0D0] error: Context 0x7fa1ade330 sink pad <queue_audio_0:sink> running time +0:13:01.638298898, next gop start: +0:13:05.685712872, diff +0:00:04.047413974
三、修改方法
1、OpenHarmony-4.1-Release 以前的版本首先需要同步下面这一笔提交
2、修改 foundation/multimedia/player_framework/services/engine/gstreamer/plugins/source/videocapture/src/gst_video_capture_src.cpp
的gst_video_capture_src_pause 函数
static void gst_video_capture_src_pause(GstVideoCaptureSrc *src)
{
...
src->cur_state = RECORDER_PAUSED;
src->paused_count++;
GstBufferPool *bufferpool = GST_BUFFER_POOL(surfacesrc->pool);
- if (src->stream_type != VIDEO_STREAM_TYPE_ES_AVC) {
gst_buffer_pool_set_flushing(bufferpool, TRUE);
gst_buffer_pool_set_flushing(bufferpool, FALSE);
- }
GST_DEBUG_OBJECT(src, "video capture src pause");
}
删除上面代码中前面标记“-”的那两行。VIDEO_SOURCE_SURFACE_ES录制模式下暂停录制时也需要清空buffer pool。
四、结语
上面修改后本人camera录像测试,间隔3s不停暂停恢复录像5分钟以上未复现问题。
如果录制时不停暂停恢复还存在问题,可以设置系统属性复现 param set sys.media.log.level *:D;param set hilog.loggable.global D ,在评论区发一下完整日志。
更多推荐
所有评论(0)