diff --git a/test/pc/e2e/peer_connection_e2e_smoke_test.cc b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
index 10f6283..92104c7 100644
--- a/test/pc/e2e/peer_connection_e2e_smoke_test.cc
+++ b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
@@ -147,6 +147,8 @@
     audio.sampling_frequency_in_hz = 48000;
     audio.sync_group = "alice-media";
     alice->SetAudioConfig(std::move(audio));
+    alice->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
   });
   AddPeer(network_links.second, [](PeerConfigurer* charlie) {
     charlie->SetName("charlie");
@@ -161,6 +163,8 @@
     audio.input_file_name =
         test::ResourcePath("pc_quality_smoke_test_bob_source", "wav");
     charlie->SetAudioConfig(std::move(audio));
+    charlie->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
   });
   fixture()->AddQualityMetricsReporter(
       std::make_unique<StatsBasedNetworkQualityMetricsReporter>(
@@ -169,8 +173,6 @@
                {"charlie", network_links.second->endpoints()}}),
           network_emulation()));
   RunParams run_params(TimeDelta::Seconds(2));
-  run_params.video_codecs = {
-      VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})};
   run_params.use_flex_fec = true;
   run_params.use_ulp_fec = true;
   run_params.video_encoder_bitrate_multiplier = 1.1;
@@ -217,8 +219,13 @@
     video.stream_label = "alice-video";
     video.sync_group = "alice-media";
     alice->AddVideoConfig(std::move(video));
+    alice->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
   });
-  AddPeer(bob_network, [](PeerConfigurer* bob) {});
+  AddPeer(bob_network, [](PeerConfigurer* bob) {
+    bob->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
+  });
   fixture()->AddQualityMetricsReporter(
       std::make_unique<StatsBasedNetworkQualityMetricsReporter>(
           std::map<std::string, std::vector<EmulatedEndpoint*>>(
@@ -233,8 +240,6 @@
   });
 
   RunParams run_params(TimeDelta::Seconds(2));
-  run_params.video_codecs = {
-      VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})};
   run_params.use_flex_fec = true;
   run_params.use_ulp_fec = true;
   run_params.video_encoder_bitrate_multiplier = 1.1;
@@ -323,7 +328,6 @@
   });
   AddPeer(network_links.second, [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(2));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   RunAndCheckEachVideoStreamReceivedFrames(run_params);
 }
 
@@ -350,10 +354,12 @@
     audio.input_file_name =
         test::ResourcePath("pc_quality_smoke_test_alice_source", "wav");
     alice->SetAudioConfig(std::move(audio));
+    alice->SetVideoCodecs({VideoCodecConfig(cricket::kVp9CodecName)});
   });
-  AddPeer(network_links.second, [](PeerConfigurer* bob) {});
+  AddPeer(network_links.second, [](PeerConfigurer* bob) {
+    bob->SetVideoCodecs({VideoCodecConfig(cricket::kVp9CodecName)});
+  });
   RunParams run_params(TimeDelta::Seconds(2));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp9CodecName)};
   RunAndCheckEachVideoStreamReceivedFrames(run_params);
 }
 
@@ -384,11 +390,14 @@
         test::ResourcePath("pc_quality_smoke_test_alice_source", "wav");
     audio.sampling_frequency_in_hz = 48000;
     alice->SetAudioConfig(std::move(audio));
+    alice->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
   });
-  AddPeer(network_links.second, [](PeerConfigurer* bob) {});
+  AddPeer(network_links.second, [](PeerConfigurer* bob) {
+    bob->SetVideoCodecs(
+        {VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})});
+  });
   RunParams run_params(TimeDelta::Seconds(2));
-  run_params.video_codecs = {
-      VideoCodecConfig(cricket::kVp9CodecName, {{"profile-id", "0"}})};
   RunAndCheckEachVideoStreamReceivedFrames(run_params);
 }
 
diff --git a/video/pc_full_stack_tests.cc b/video/pc_full_stack_tests.cc
index 5cebf41..6fb83f8 100644
--- a/video/pc_full_stack_tests.cc
+++ b/video/pc_full_stack_tests.cc
@@ -121,12 +121,18 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -149,12 +155,18 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -184,12 +196,18 @@
         auto frame_generator = CreateSquareFrameGenerator(
             video, test::FrameGeneratorInterface::OutputType::kI010);
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile2)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile2)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -243,7 +261,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -267,7 +284,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -297,7 +313,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -322,7 +337,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -348,7 +362,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = true;
   fixture->Run(std::move(run_params));
@@ -374,7 +387,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = true;
   fixture->Run(std::move(run_params));
@@ -402,7 +414,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   run_params.video_encoder_bitrate_multiplier = 1.30;
@@ -434,7 +445,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   run_params.video_encoder_bitrate_multiplier = 1.30;
@@ -461,7 +471,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -487,7 +496,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = true;
   fixture->Run(std::move(run_params));
@@ -512,7 +520,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = true;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -538,7 +545,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = true;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -564,7 +570,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = true;
   fixture->Run(std::move(run_params));
@@ -585,10 +590,12 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -614,10 +621,12 @@
         bitrate_settings.start_bitrate_bps = 30000;
         bitrate_settings.max_bitrate_bps = 30000;
         alice->SetBitrateSettings(bitrate_settings);
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -640,10 +649,12 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -668,10 +679,12 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -693,10 +706,12 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = true;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -720,10 +735,12 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("foreman_cif"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kH264CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = true;
   fixture->Run(std::move(run_params));
@@ -749,7 +766,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -775,7 +791,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -801,7 +816,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -828,7 +842,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -875,7 +888,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -902,7 +914,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1052,12 +1063,18 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1082,7 +1099,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1105,7 +1121,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   run_params.use_conference_mode = true;
@@ -1134,7 +1149,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1160,7 +1174,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   run_params.use_conference_mode = true;
@@ -1364,12 +1377,18 @@
         auto frame_generator = CreateScreenShareFrameGenerator(
             video, ScreenShareConfig(TimeDelta::Seconds(10)));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1393,12 +1412,18 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1422,12 +1447,18 @@
         auto frame_generator = CreateFromYuvFileFrameGenerator(
             video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
         alice->AddVideoConfig(std::move(video), std::move(frame_generator));
+        alice->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
       },
-      [](PeerConfigurer* bob) {});
+      [](PeerConfigurer* bob) {
+        bob->SetVideoCodecs({VideoCodecConfig(
+            /*name=*/cricket::kVp9CodecName, /*required_params=*/{
+                {kVP9FmtpProfileId,
+                 VP9ProfileToString(VP9Profile::kProfile0)}})});
+      });
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(
-      /*name=*/cricket::kVp9CodecName, /*required_params=*/{
-          {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}})};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1552,7 +1583,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1578,7 +1608,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
@@ -1603,7 +1632,6 @@
       },
       [](PeerConfigurer* bob) {});
   RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
-  run_params.video_codecs = {VideoCodecConfig(cricket::kVp8CodecName)};
   run_params.use_flex_fec = false;
   run_params.use_ulp_fec = false;
   fixture->Run(std::move(run_params));
