Commit eacb6bff authored by Francois Beaufort's avatar Francois Beaufort Committed by Commit Bot

Report media track info from WebMediaPlayerMS

This CL makes sure audio and video tracks information are reflected in
HTMLMediaElement audioTracks and videoTracks when source is a MediaStream.

  Platform features" flag enabled.

Test: https://glowing-juvenile-bear.glitch.me/ with "Experimental Web
Bug: 894556
Change-Id: Iceac66b1f142d5c28eeaaffefd621c095e65ecda
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2518856Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Cr-Commit-Position: refs/heads/master@{#824360}
parent 27dac6bd
...@@ -475,28 +475,50 @@ WebMediaPlayer::LoadTiming WebMediaPlayerMS::Load( ...@@ -475,28 +475,50 @@ WebMediaPlayer::LoadTiming WebMediaPlayerMS::Load(
audio_renderer_->SetVolume(volume_); audio_renderer_->SetVolume(volume_);
audio_renderer_->Start(); audio_renderer_->Start();
// Store the ID of audio track being played in |current_audio_track_id_|.
if (!web_stream_.IsNull()) { if (!web_stream_.IsNull()) {
MediaStreamDescriptor& descriptor = *web_stream_; MediaStreamDescriptor& descriptor = *web_stream_;
auto audio_components = descriptor.AudioComponents(); auto audio_components = descriptor.AudioComponents();
// Store the ID of audio track being played in |current_audio_track_id_|.
DCHECK_GT(audio_components.size(), 0U); DCHECK_GT(audio_components.size(), 0U);
current_audio_track_id_ = WebString(audio_components[0]->Id()); current_audio_track_id_ = WebString(audio_components[0]->Id());
SendLogMessage(String::Format("%s => (audio_track_id=%s)", __func__, SendLogMessage(String::Format("%s => (audio_track_id=%s)", __func__,
current_audio_track_id_.Utf8().c_str())); current_audio_track_id_.Utf8().c_str()));
// Report the media track information to blink. Only the first audio track
// is enabled by default to match blink logic.
bool is_first_audio_track = true;
for (auto component : audio_components) {
client_->AddAudioTrack(
blink::WebString::FromUTF8(component->Id().Utf8()),
blink::WebMediaPlayerClient::kAudioTrackKindMain,
blink::WebString::FromUTF8(component->Source()->GetName().Utf8()),
/*language=*/"", is_first_audio_track);
is_first_audio_track = false;
}
} }
} }
if (video_frame_provider_) { if (video_frame_provider_) {
video_frame_provider_->Start(); video_frame_provider_->Start();
// Store the ID of video track being played in |current_video_track_id_|.
if (!web_stream_.IsNull()) { if (!web_stream_.IsNull()) {
MediaStreamDescriptor& descriptor = *web_stream_; MediaStreamDescriptor& descriptor = *web_stream_;
auto video_components = descriptor.VideoComponents(); auto video_components = descriptor.VideoComponents();
// Store the ID of video track being played in |current_video_track_id_|.
DCHECK_GT(video_components.size(), 0U); DCHECK_GT(video_components.size(), 0U);
current_video_track_id_ = WebString(video_components[0]->Id()); current_video_track_id_ = WebString(video_components[0]->Id());
SendLogMessage(String::Format("%s => (video_track_id=%s)", __func__, SendLogMessage(String::Format("%s => (video_track_id=%s)", __func__,
current_video_track_id_.Utf8().c_str())); current_video_track_id_.Utf8().c_str()));
// Report the media track information to blink. Only the first video track
// is enabled by default to match blink logic.
bool is_first_video_track = true;
for (auto component : video_components) {
client_->AddVideoTrack(
blink::WebString::FromUTF8(component->Id().Utf8()),
blink::WebMediaPlayerClient::kVideoTrackKindMain,
blink::WebString::FromUTF8(component->Source()->GetName().Utf8()),
/*language=*/"", is_first_video_track);
is_first_video_track = false;
}
} }
} }
// When associated with an <audio> element, we don't want to wait for the // When associated with an <audio> element, we don't want to wait for the
......
...@@ -22,6 +22,35 @@ ...@@ -22,6 +22,35 @@
assert_equals(audio.audioTracks[0].language, "", "audioTrack.language"); assert_equals(audio.audioTracks[0].language, "", "audioTrack.language");
}); });
}); });
async_test(function(t)
{
var ac1 = new AudioContext();
var stream1 = ac1.createMediaStreamDestination().stream;
var ac2 = new AudioContext();
var stream2 = ac2.createMediaStreamDestination().stream;
var audio = document.createElement("audio");
var tracks = [...stream1.getTracks(), ...stream2.getTracks()];
var stream = new MediaStream(tracks);
audio.srcObject = stream;
audio.onloadedmetadata = t.step_func_done(function()
{
assert_equals(audio.audioTracks.length, 2, "audioTracks.length");
assert_true(audio.audioTracks[0].enabled, "audioTrack.enabled");
assert_true("id" in audio.audioTracks[0], "audioTrack.id");
assert_equals(audio.audioTracks[0].kind, "main", "audioTrack.kind");
assert_true("label" in audio.audioTracks[0], "audioTrack.label");
assert_equals(audio.audioTracks[0].language, "", "audioTrack.language");
assert_false(audio.audioTracks[1].enabled, "audioTrack.enabled");
assert_true("id" in audio.audioTracks[1], "audioTrack.id");
assert_equals(audio.audioTracks[1].kind, "main", "audioTrack.kind");
assert_true("label" in audio.audioTracks[1], "audioTrack.label");
assert_equals(audio.audioTracks[1].language, "", "audioTrack.language");
});
});
</script> </script>
</body> </body>
</html> </html>
...@@ -22,6 +22,37 @@ ...@@ -22,6 +22,37 @@
assert_equals(video.videoTracks[0].language, "", "videoTrack.language"); assert_equals(video.videoTracks[0].language, "", "videoTrack.language");
}); });
}); });
async_test(function(t)
{
var canvas1 = document.createElement("canvas");
canvas1.getContext('2d').fillRect(0, 0, canvas1.width, canvas1.height);
var stream1 = canvas1.captureStream();
var canvas2 = document.createElement("canvas");
canvas2.getContext('2d').fillRect(0, 0, canvas2.width, canvas2.height);
var stream2 = canvas2.captureStream();
var video = document.createElement("video");
var tracks = [...stream1.getTracks(), ...stream2.getTracks()];
var stream = new MediaStream(tracks);
video.srcObject = stream;
video.onloadedmetadata = t.step_func_done(function()
{
assert_equals(video.videoTracks.length, 2, "videoTracks.length");
assert_true(video.videoTracks[0].selected, "videoTrack.selected");
assert_true("id" in video.videoTracks[0], "videoTrack.id");
assert_equals(video.videoTracks[0].kind, "main", "videoTrack.kind");
assert_true("label" in video.videoTracks[0], "videoTrack.label");
assert_equals(video.videoTracks[0].language, "", "videoTrack.language");
assert_false(video.videoTracks[1].selected, "videoTrack.selected");
assert_true("id" in video.videoTracks[1], "videoTrack.id");
assert_equals(video.videoTracks[1].kind, "main", "videoTrack.kind");
assert_true("label" in video.videoTracks[1], "videoTrack.label");
assert_equals(video.videoTracks[1].language, "", "videoTrack.language");
});
});
</script> </script>
</body> </body>
</html> </html>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment