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_;