diff --git a/src/media/media_recorder.cpp b/src/media/media_recorder.cpp index ed0effb5dfa8092a6e3c4c564f528ee3d88c45b5..273188f4ce1b7eacc6ef49cd9a24c0169c240af7 100644 --- a/src/media/media_recorder.cpp +++ b/src/media/media_recorder.cpp @@ -148,6 +148,7 @@ MediaRecorder::startRecording() { std::time_t t = std::time(nullptr); startTime_ = *std::localtime(&t); + startTimeStamp_ = av_gettime(); encoder_.reset(new MediaEncoder); @@ -232,7 +233,13 @@ MediaRecorder::onFrame(const std::string& name, const std::shared_ptr<MediaFrame clone = std::make_unique<MediaFrame>(); clone->copyFrom(*frame); } +#if (defined(TARGET_OS_IOS) && TARGET_OS_IOS) + clone->pointer()->pts = av_rescale_q_rnd(av_gettime() - startTimeStamp_, + {1, AV_TIME_BASE}, ms.timeBase, + static_cast<AVRounding>(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX)); +#else clone->pointer()->pts -= ms.firstTimestamp; +#endif if (ms.isVideo) videoFilter_->feedInput(clone->pointer(), name); else diff --git a/src/media/media_recorder.h b/src/media/media_recorder.h index f4cca5edf10400fca033a30ea4cc4e5879ccdf59..9c3bbf62ba4d376815071a835570fa67d6f5e6c2 100644 --- a/src/media/media_recorder.h +++ b/src/media/media_recorder.h @@ -135,6 +135,7 @@ private: std::string path_; std::tm startTime_; + int64_t startTimeStamp_; std::string title_; std::string description_; diff --git a/src/media/system_codec_container.cpp b/src/media/system_codec_container.cpp index f2ce0069df91159ae3d402bcd33ee79f2c1dfc6b..814bba42e7b5e6d3e4f17033148ba6f676437064 100644 --- a/src/media/system_codec_container.cpp +++ b/src/media/system_codec_container.cpp @@ -64,14 +64,13 @@ SystemCodecContainer::initCodecConfig() defaultBitrate, minH264, maxH264), - -#if !(defined(TARGET_OS_IOS) && TARGET_OS_IOS) std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_VP8, "VP8", "libvpx", CODEC_ENCODER_DECODER, defaultBitrate, minVP8, maxVP8), +#if !(defined(TARGET_OS_IOS) && TARGET_OS_IOS) std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_MPEG4, "MP4V-ES", "mpeg4", CODEC_ENCODER_DECODER, diff --git a/src/media/video/iosvideo/video_device_impl.cpp b/src/media/video/iosvideo/video_device_impl.cpp index be1acbf16a3833f5035545c8e61dff3b3fe13a63..96a71d3e99f7b57c59ec4dedbb0341f66f21a773 100644 --- a/src/media/video/iosvideo/video_device_impl.cpp +++ b/src/media/video/iosvideo/video_device_impl.cpp @@ -161,6 +161,7 @@ VideoDeviceImpl::getDeviceParams() const params.name = name; params.input = name; params.channel = 0; + params.pixel_format = "nv12"; params.width = size_.first; params.height = size_.second; params.framerate = rate_;