Add Page.startScreenRecording/stopScreenRecording DevTools commands [chromium/src : main]

0 views
Skip to first unread message

Alex Rudenko (Gerrit)

unread,
Aug 4, 2026, 6:56:31 AM (yesterday) Aug 4
to devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org

Alex Rudenko added 4 comments

File content/browser/devtools/protocol/media_recorder.cc
Line 375, Patchset 22 (Latest): base::span<const uint8_t> mapping_memory(it->second.read_only_mapping);
Alex Rudenko . unresolved

WrapExternalData typically expects a mutable `uint8_t*` or `base::span<uint8_t>` for the data argument. Passing `mapping_memory` (which is a `base::span<const uint8_t>`) here will likely result in a compilation error.

For `read_only_mapping`, you might need to use a `const_cast` or a `WrapReadOnlyExternalData` equivalent if one exists. Similarly, for `writable_mapping` below, you should construct a `base::span<uint8_t>` directly instead of `base::span<const uint8_t>`.

Line 444, Patchset 22 (Latest): auto audio_bus =
Alex Rudenko . unresolved

There is no need to copy `audio_source` into a temporary `audio_bus` here. `media::AudioBuffer::CopyFrom` creates its own internal copy of the data. You can pass `audio_source` directly to `CopyFrom` to avoid the extra allocation and copy overhead.

Line 482, Patchset 22 (Latest): gfx::Size fallback_size(max_width_ > 0 ? max_width_ : 800,
Alex Rudenko . unresolved

The comment above states we should only inject a blank frame if *no* frames were received, but this code currently injects a black frame unconditionally on every `Stop()`.

You likely need to add a boolean flag (e.g. `has_received_frames_`), set it to true in `OnFrameFromVideoConsumer`, and check it here before injecting the fallback frame.

File content/browser/devtools/protocol/page_handler.cc
Line 1689, Patchset 22 (Latest):
Alex Rudenko . unresolved

If the client calls `StopScreenRecording` multiple times before the first stop completes (i.e. before the async Mojo closure resets `media_recorder_`), `media_recorder_->Stop()` will be called again with a new callback. This overwrites `on_stop_callback_` inside `MediaRecorder`, dropping the first callback and causing it to return an Internal Error due to its destructor firing without a response.

It would be much cleaner to take ownership of the recorder and keep it alive in the closure, instantly clearing `media_recorder_` so subsequent calls return the "No active screen recording" error correctly:

```cpp
auto recorder = std::move(media_recorder_);
recorder->Stop(base::BindOnce(
[](std::unique_ptr<MediaRecorder> recorder,
std::unique_ptr<StopScreenRecordingCallback> callback,
std::string stream) {
if (callback) {
callback->sendSuccess(stream);
}
},
std::move(recorder), std::move(callback)));
```
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
Gerrit-Change-Number: 7940551
Gerrit-PatchSet: 22
Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
Gerrit-Comment-Date: Tue, 04 Aug 2026 10:56:09 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Alex Rudenko (Gerrit)

unread,
Aug 4, 2026, 7:36:47 AM (24 hours ago) Aug 4
to devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org

Alex Rudenko added 4 comments

File content/browser/devtools/protocol/media_recorder.cc
Line 375, Patchset 22: base::span<const uint8_t> mapping_memory(it->second.read_only_mapping);
Alex Rudenko . resolved

WrapExternalData typically expects a mutable `uint8_t*` or `base::span<uint8_t>` for the data argument. Passing `mapping_memory` (which is a `base::span<const uint8_t>`) here will likely result in a compilation error.

For `read_only_mapping`, you might need to use a `const_cast` or a `WrapReadOnlyExternalData` equivalent if one exists. Similarly, for `writable_mapping` below, you should construct a `base::span<uint8_t>` directly instead of `base::span<const uint8_t>`.

Alex Rudenko

Done

Line 444, Patchset 22: auto audio_bus =
Alex Rudenko . resolved

There is no need to copy `audio_source` into a temporary `audio_bus` here. `media::AudioBuffer::CopyFrom` creates its own internal copy of the data. You can pass `audio_source` directly to `CopyFrom` to avoid the extra allocation and copy overhead.

Alex Rudenko

Done

Line 482, Patchset 22: gfx::Size fallback_size(max_width_ > 0 ? max_width_ : 800,
Alex Rudenko . resolved

The comment above states we should only inject a blank frame if *no* frames were received, but this code currently injects a black frame unconditionally on every `Stop()`.

You likely need to add a boolean flag (e.g. `has_received_frames_`), set it to true in `OnFrameFromVideoConsumer`, and check it here before injecting the fallback frame.

Alex Rudenko

Done

File content/browser/devtools/protocol/page_handler.cc
Line 1689, Patchset 22:
Alex Rudenko . resolved

If the client calls `StopScreenRecording` multiple times before the first stop completes (i.e. before the async Mojo closure resets `media_recorder_`), `media_recorder_->Stop()` will be called again with a new callback. This overwrites `on_stop_callback_` inside `MediaRecorder`, dropping the first callback and causing it to return an Internal Error due to its destructor firing without a response.

It would be much cleaner to take ownership of the recorder and keep it alive in the closure, instantly clearing `media_recorder_` so subsequent calls return the "No active screen recording" error correctly:

```cpp
auto recorder = std::move(media_recorder_);
recorder->Stop(base::BindOnce(
[](std::unique_ptr<MediaRecorder> recorder,
std::unique_ptr<StopScreenRecordingCallback> callback,
std::string stream) {
if (callback) {
callback->sendSuccess(stream);
}
},
std::move(recorder), std::move(callback)));
```
Alex Rudenko

Done

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
    Gerrit-Change-Number: 7940551
    Gerrit-PatchSet: 23
    Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
    Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Comment-Date: Tue, 04 Aug 2026 11:36:28 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Alex Rudenko <alexr...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Alex Rudenko (Gerrit)

    unread,
    Aug 4, 2026, 9:26:27 AM (22 hours ago) Aug 4
    to Danil Somsikov, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
    Attention needed from Danil Somsikov

    Alex Rudenko added 1 comment

    Patchset-level comments
    File-level comment, Patchset 28 (Latest):
    Alex Rudenko . resolved

    PTAL. Let me know if you prefer me to split it in some way. The main logic is in media_recorder.cc that manages video and audio capture and sends data to the encoding service. The rest is tests/wiring.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Danil Somsikov
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
    Gerrit-Change-Number: 7940551
    Gerrit-PatchSet: 28
    Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
    Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Tue, 04 Aug 2026 13:26:11 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Danil Somsikov (Gerrit)

    unread,
    Aug 4, 2026, 10:45:32 AM (21 hours ago) Aug 4
    to Alex Rudenko, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
    Attention needed from Alex Rudenko

    Danil Somsikov added 4 comments

    File content/browser/devtools/protocol/devtools_protocol_browsertest.cc
    Line 1402, Patchset 28:#if !BUILDFLAG(ENABLE_AV1_DECODER)
    Danil Somsikov . unresolved

    The StartScreenRecording implementation requires `ENABLE_LIBAOM` to record video, but this test checks `ENABLE_AV1_DECODER`. The test might fail on platforms where the AV1 decoder is enabled but the libaom encoder is not. You should check for `ENABLE_LIBAOM` instead.

    File content/browser/devtools/protocol/media_recorder.cc
    Line 260, Patchset 28:#if BUILDFLAG(ENABLE_LIBAOM)
    Danil Somsikov . unresolved

    The stream file and encoding service process are created unconditionally above, before checking `#if BUILDFLAG(ENABLE_LIBAOM)`. If AV1 encoding is not enabled, this returns an error but leaks the created service process and stream file. You should move the `#if BUILDFLAG(ENABLE_LIBAOM)` check to the beginning of the function.

    Line 376, Patchset 28: base::span<const uint8_t> mapping_memory(it->second.read_only_mapping);
    Danil Somsikov . unresolved

    ReadOnlySharedMemoryMapping and WritableSharedMemoryMapping cannot be passed directly to the `base::span` constructor; you must use `.GetMemoryAsSpan<uint8_t>()`.

    Furthermore, `media::VideoFrame::WrapExternalData` expects a mutable pointer or `base::span<uint8_t>`. Passing a `span<const uint8_t>` for the read-only mapping will result in a compilation error. You need to cast away the constness of the memory for the read-only mapping to satisfy `WrapExternalData`.

    Line 422, Patchset 28: client_buffers_.erase(buffer_id);
    Danil Somsikov . unresolved

    Erasing the buffer here destroys the underlying `SharedMemoryMapping`. If a `VideoFrame` is still using this memory (e.g., waiting to be encoded asynchronously by the encoding service), it will read from unmapped memory, causing a use-after-free crash.

    You probably should wrap `ClientBuffer` in a ref-counted wrapper (e.g., `base::RefCountedThreadSafe`) and capture a reference to it in the `VideoFrame`'s destruction observer (`AddDestructionObserver` in `OnFrameReadyInBuffer`).

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alex Rudenko
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
      Gerrit-Change-Number: 7940551
      Gerrit-PatchSet: 28
      Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
      Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
      Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-Attention: Alex Rudenko <alexr...@chromium.org>
      Gerrit-Comment-Date: Tue, 04 Aug 2026 14:45:14 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Alex Rudenko (Gerrit)

      unread,
      Aug 4, 2026, 12:25:11 PM (19 hours ago) Aug 4
      to Danil Somsikov, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
      Attention needed from Danil Somsikov

      Alex Rudenko added 4 comments

      File content/browser/devtools/protocol/devtools_protocol_browsertest.cc
      Line 1402, Patchset 28:#if !BUILDFLAG(ENABLE_AV1_DECODER)
      Danil Somsikov . resolved

      The StartScreenRecording implementation requires `ENABLE_LIBAOM` to record video, but this test checks `ENABLE_AV1_DECODER`. The test might fail on platforms where the AV1 decoder is enabled but the libaom encoder is not. You should check for `ENABLE_LIBAOM` instead.

      Alex Rudenko

      Done

      File content/browser/devtools/protocol/media_recorder.cc
      Line 260, Patchset 28:#if BUILDFLAG(ENABLE_LIBAOM)
      Danil Somsikov . resolved

      The stream file and encoding service process are created unconditionally above, before checking `#if BUILDFLAG(ENABLE_LIBAOM)`. If AV1 encoding is not enabled, this returns an error but leaks the created service process and stream file. You should move the `#if BUILDFLAG(ENABLE_LIBAOM)` check to the beginning of the function.

      Alex Rudenko

      Done

      Line 376, Patchset 28: base::span<const uint8_t> mapping_memory(it->second.read_only_mapping);
      Danil Somsikov . resolved

      ReadOnlySharedMemoryMapping and WritableSharedMemoryMapping cannot be passed directly to the `base::span` constructor; you must use `.GetMemoryAsSpan<uint8_t>()`.

      Furthermore, `media::VideoFrame::WrapExternalData` expects a mutable pointer or `base::span<uint8_t>`. Passing a `span<const uint8_t>` for the read-only mapping will result in a compilation error. You need to cast away the constness of the memory for the read-only mapping to satisfy `WrapExternalData`.

      Alex Rudenko

      Applied the `.GetMemoryAsSpan<uint8_t>()` suggestion but the comment about media::VideoFrame::WrapExternalData does not appear to be accurate: it accepts `base::span<const uint8_t>` (https://source.chromium.org/chromium/chromium/src/+/main:media/base/video_frame.cc;l=580;drc=e87601ce38a77979426caf8d9d75f8019bbbef1d). So I think we do not need to cast away constness.

      Line 422, Patchset 28: client_buffers_.erase(buffer_id);
      Danil Somsikov . resolved

      Erasing the buffer here destroys the underlying `SharedMemoryMapping`. If a `VideoFrame` is still using this memory (e.g., waiting to be encoded asynchronously by the encoding service), it will read from unmapped memory, causing a use-after-free crash.

      You probably should wrap `ClientBuffer` in a ref-counted wrapper (e.g., `base::RefCountedThreadSafe`) and capture a reference to it in the `VideoFrame`'s destruction observer (`AddDestructionObserver` in `OnFrameReadyInBuffer`).

      Alex Rudenko

      Done

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Danil Somsikov
      Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement is not satisfiedCode-Owners
        • requirement is not satisfiedCode-Review
        • requirement is not satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
        Gerrit-Change-Number: 7940551
        Gerrit-PatchSet: 31
        Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
        Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
        Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
        Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
        Gerrit-Attention: Danil Somsikov <d...@chromium.org>
        Gerrit-Comment-Date: Tue, 04 Aug 2026 16:24:53 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Danil Somsikov <d...@chromium.org>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Danil Somsikov (Gerrit)

        unread,
        Aug 4, 2026, 6:29:35 PM (13 hours ago) Aug 4
        to Alex Rudenko, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
        Attention needed from Alex Rudenko

        Danil Somsikov added 2 comments

        Commit Message
        Line 12, Patchset 31 (Latest):media is then sent to a new DevToolsMediaEncodingServer service for
        Danil Somsikov . unresolved

        Where is this defined?

        File content/browser/devtools/protocol/media_recorder.cc
        Line 252, Patchset 28: remote->StartRecording(client_receiver_.BindNewPipeAndPassRemote(), max_width,
        Danil Somsikov . unresolved

        Following up on the design doc discussion regarding fragmented MP4 (fMP4): were we able to enable fMP4 format for the stream output here?

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Alex Rudenko
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
          Gerrit-Change-Number: 7940551
          Gerrit-PatchSet: 31
          Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-Attention: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Comment-Date: Tue, 04 Aug 2026 22:29:18 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Alex Rudenko (Gerrit)

          unread,
          1:36 AM (6 hours ago) 1:36 AM
          to Danil Somsikov, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
          Attention needed from Danil Somsikov

          Alex Rudenko added 1 comment

          Commit Message
          Line 12, Patchset 31 (Latest):media is then sent to a new DevToolsMediaEncodingServer service for
          Danil Somsikov . resolved

          Where is this defined?

          Alex Rudenko

          This was added in https://crrev.com/c/7951617.

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Danil Somsikov
          Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
          Gerrit-Change-Number: 7940551
          Gerrit-PatchSet: 31
          Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-Attention: Danil Somsikov <d...@chromium.org>
          Gerrit-Comment-Date: Wed, 05 Aug 2026 05:35:58 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          Comment-In-Reply-To: Danil Somsikov <d...@chromium.org>
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Alex Rudenko (Gerrit)

          unread,
          3:06 AM (4 hours ago) 3:06 AM
          to Danil Somsikov, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
          Attention needed from Danil Somsikov

          Alex Rudenko added 1 comment

          File content/browser/devtools/protocol/media_recorder.cc
          Line 252, Patchset 28: remote->StartRecording(client_receiver_.BindNewPipeAndPassRemote(), max_width,
          Danil Somsikov . unresolved

          Following up on the design doc discussion regarding fragmented MP4 (fMP4): were we able to enable fMP4 format for the stream output here?

          Alex Rudenko

          I added the fMP4 exploration to a follow up in the design doc since the current use cases are motivated by saving the video stream to a file in ChromeDriver/Puppeteer. So I have not tried fMP4 yet. The streaming via a video tag already works with the current mp4 encoder (test script: https://paste.googleplex.com/5961887689867264) if the page produces keyframes (we might want to tweak how often the encoder flushes once we integrate streaming in our products).

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Danil Somsikov
          Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
          Gerrit-Change-Number: 7940551
          Gerrit-PatchSet: 33
          Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-Attention: Danil Somsikov <d...@chromium.org>
          Gerrit-Comment-Date: Wed, 05 Aug 2026 07:05:52 +0000
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Danil Somsikov (Gerrit)

          unread,
          6:10 AM (1 hour ago) 6:10 AM
          to Alex Rudenko, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
          Attention needed from Alex Rudenko

          Danil Somsikov added 1 comment

          Patchset-level comments
          File-level comment, Patchset 33 (Latest):
          Danil Somsikov . unresolved

          Ok, this works, but this is obviously too big. Can we have (a subset) if a media recorder in a standalone CL with unit tests?

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Alex Rudenko
          Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
          Gerrit-Change-Number: 7940551
          Gerrit-PatchSet: 33
          Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-Attention: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Comment-Date: Wed, 05 Aug 2026 10:10:23 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Alex Rudenko (Gerrit)

          unread,
          6:31 AM (1 hour ago) 6:31 AM
          to Danil Somsikov, devtools...@chromium.org, Chromium LUCI CQ, Rijubrata Bhaumik, android-bu...@system.gserviceaccount.com, jshin...@chromium.org, headless...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, devtools-re...@chromium.org, blink-re...@chromium.org, blink-...@chromium.org
          Attention needed from Danil Somsikov

          Alex Rudenko added 1 comment

          File content/browser/devtools/protocol/media_recorder.cc
          Line 252, Patchset 28: remote->StartRecording(client_receiver_.BindNewPipeAndPassRemote(), max_width,
          Danil Somsikov . resolved

          Following up on the design doc discussion regarding fragmented MP4 (fMP4): were we able to enable fMP4 format for the stream output here?

          Alex Rudenko

          I added the fMP4 exploration to a follow up in the design doc since the current use cases are motivated by saving the video stream to a file in ChromeDriver/Puppeteer. So I have not tried fMP4 yet. The streaming via a video tag already works with the current mp4 encoder (test script: https://paste.googleplex.com/5961887689867264) if the page produces keyframes (we might want to tweak how often the encoder flushes once we integrate streaming in our products).

          Alex Rudenko

          Done

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Danil Somsikov
          Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I554fa1b20d65983a4f908add81fcab89abf1dd66
          Gerrit-Change-Number: 7940551
          Gerrit-PatchSet: 33
          Gerrit-Owner: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Alex Rudenko <alexr...@chromium.org>
          Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-Attention: Danil Somsikov <d...@chromium.org>
          Gerrit-Comment-Date: Wed, 05 Aug 2026 10:31:26 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          Comment-In-Reply-To: Alex Rudenko <alexr...@chromium.org>
          Comment-In-Reply-To: Danil Somsikov <d...@chromium.org>
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy
          Reply all
          Reply to author
          Forward
          0 new messages