diff --git a/media/engine/internal_encoder_factory.cc b/media/engine/internal_encoder_factory.cc
index 7b5fc24..398926a 100644
--- a/media/engine/internal_encoder_factory.cc
+++ b/media/engine/internal_encoder_factory.cc
@@ -14,7 +14,9 @@
 #include <string>
 #include <vector>
 
-#include "absl/strings/match.h"
+#include "absl/types/optional.h"
+#include "api/environment/environment.h"
+#include "api/video_codecs/sdp_video_format.h"
 #include "api/video_codecs/video_encoder_factory.h"
 #include "api/video_codecs/video_encoder_factory_template.h"
 #if defined(RTC_USE_LIBAOM_AV1_ENCODER)
@@ -45,12 +47,12 @@
   return Factory().GetSupportedFormats();
 }
 
-std::unique_ptr<VideoEncoder> InternalEncoderFactory::CreateVideoEncoder(
+std::unique_ptr<VideoEncoder> InternalEncoderFactory::Create(
+    const Environment& env,
     const SdpVideoFormat& format) {
   auto original_format =
       FuzzyMatchSdpVideoFormat(Factory().GetSupportedFormats(), format);
-  return original_format ? Factory().CreateVideoEncoder(*original_format)
-                         : nullptr;
+  return original_format ? Factory().Create(env, *original_format) : nullptr;
 }
 
 VideoEncoderFactory::CodecSupport InternalEncoderFactory::QueryCodecSupport(
diff --git a/media/engine/internal_encoder_factory.h b/media/engine/internal_encoder_factory.h
index 25480d0..1d79d3c 100644
--- a/media/engine/internal_encoder_factory.h
+++ b/media/engine/internal_encoder_factory.h
@@ -15,6 +15,9 @@
 #include <string>
 #include <vector>
 
+#include "absl/types/optional.h"
+#include "api/environment/environment.h"
+#include "api/video_codecs/sdp_video_format.h"
 #include "api/video_codecs/video_encoder_factory.h"
 #include "rtc_base/system/rtc_export.h"
 
@@ -25,8 +28,8 @@
   CodecSupport QueryCodecSupport(
       const SdpVideoFormat& format,
       absl::optional<std::string> scalability_mode) const override;
-  std::unique_ptr<VideoEncoder> CreateVideoEncoder(
-      const SdpVideoFormat& format) override;
+  std::unique_ptr<VideoEncoder> Create(const Environment& env,
+                                       const SdpVideoFormat& format) override;
 };
 
 }  // namespace webrtc
diff --git a/media/engine/internal_encoder_factory_unittest.cc b/media/engine/internal_encoder_factory_unittest.cc
index 7846bd3..c13c528 100644
--- a/media/engine/internal_encoder_factory_unittest.cc
+++ b/media/engine/internal_encoder_factory_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "media/engine/internal_encoder_factory.h"
 
+#include "api/environment/environment_factory.h"
 #include "api/video_codecs/sdp_video_format.h"
 #include "api/video_codecs/video_encoder.h"
 #include "api/video_codecs/vp9_profile.h"
@@ -48,7 +49,7 @@
 TEST(InternalEncoderFactoryTest, Vp8) {
   InternalEncoderFactory factory;
   std::unique_ptr<VideoEncoder> encoder =
-      factory.CreateVideoEncoder(SdpVideoFormat::VP8());
+      factory.Create(CreateEnvironment(), SdpVideoFormat::VP8());
   EXPECT_TRUE(encoder);
 }
 
@@ -56,7 +57,7 @@
   InternalEncoderFactory factory;
   if (kVp9Enabled) {
     std::unique_ptr<VideoEncoder> encoder =
-        factory.CreateVideoEncoder(SdpVideoFormat::VP9Profile0());
+        factory.Create(CreateEnvironment(), SdpVideoFormat::VP9Profile0());
     EXPECT_TRUE(encoder);
   } else {
     EXPECT_THAT(
@@ -69,7 +70,7 @@
   InternalEncoderFactory factory;
   if (kH264Enabled) {
     std::unique_ptr<VideoEncoder> encoder =
-        factory.CreateVideoEncoder(SdpVideoFormat::H264());
+        factory.Create(CreateEnvironment(), SdpVideoFormat::H264());
     EXPECT_TRUE(encoder);
   } else {
     EXPECT_THAT(
@@ -81,8 +82,8 @@
 // At current stage H.265 is not supported by internal encoder factory.
 TEST(InternalEncoderFactoryTest, H265IsNotEnabled) {
   InternalEncoderFactory factory;
-  std::unique_ptr<VideoEncoder> encoder =
-      factory.CreateVideoEncoder(SdpVideoFormat(cricket::kH265CodecName));
+  std::unique_ptr<VideoEncoder> encoder = factory.Create(
+      CreateEnvironment(), SdpVideoFormat(cricket::kH265CodecName));
   EXPECT_EQ(static_cast<bool>(encoder), kH265Enabled);
   EXPECT_THAT(
       factory.GetSupportedFormats(),
@@ -113,7 +114,8 @@
   InternalEncoderFactory factory;
   EXPECT_THAT(factory.GetSupportedFormats(),
               Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName)));
-  EXPECT_TRUE(factory.CreateVideoEncoder(SdpVideoFormat::AV1Profile0()));
+  EXPECT_TRUE(
+      factory.Create(CreateEnvironment(), SdpVideoFormat::AV1Profile0()));
 }
 
 TEST(InternalEncoderFactoryTest, QueryCodecSupportNoScalabilityModeAv1) {
