Web
Function Description
This article mainly introduces the advanced usage of custom capture and custom rendering.
Custom Capture
If you need to customize the capture, you can specify the
option.videoTrack
/option.audioTrack
parameter of the trtc.startLocalVideo()
/ trtc.startLocalAudio()
method.There are usually several ways to obtain
audioTrack
and videoTrack
:Use getUserMedia to capture the camera and microphone.
Use getDisplayMedia to capture screen sharing.
Use
videoElement.captureStream
to capture the audio and video being played in the video tag.Use
canvas.captureStream
to capture the animation in the canvas.Capture the video being played in the video tag
// Check if your current browser supports capturing streams from video elementsif (!HTMLVideoElement.prototype.captureStream) {console.log('your browser does not support capturing stream from video element');return}// Get the video tag that is playing video on your pageconst video = document.getElementByID('your-video-element-ID');// Capture the video stream from the playing videoconst stream = video.captureStream();const audioTrack = stream.getAudioTracks()[0];const videoTrack = stream.getVideoTracks()[0];trtc.startLocalVideo({ option:{ videoTrack } });trtc.startLocalAudio({ option:{ audioTrack } });
Capture the animation in the canvas
// Check if your current browser supports capturing streams from canvas elementsif (!HTMLCanvasElement.prototype.captureStream) {console.log('your browser does not support capturing stream from canvas element');return}// Get your canvas tagconst canvas = document.getElementByID('your-canvas-element-ID');// Capture a 15 fps video stream from the canvasconst fps = 15;const stream = canvas.captureStream(fps);const videoTrack = stream.getVideoTracks()[0];trtc.startLocalVideo({ option:{ videoTrack } });
Custom Rendering
By default, when calling
trtc.startLocalVideo(view)
or trtc.startRemoteVideo(view, streamType, userId)
, you need to pass in the view
parameter. The SDK will create a video
tag under the specified element tag to play the video.If you need to customize the rendering, and do not need the SDK to play the video, you can refer to the following steps:
Do not fill in the
view
parameter or pass in null
when calling the startLocalVideo
or startRemoteVideo
method.Use the
trtc.getVideoTrack(userId, streamType)
method to obtain the corresponding videoTrack
.Use your own player for video rendering.
After using this custom rendering method, the
EVENT.VIDEO_PLAY_STATE_CHANGED
event will not be triggered. You need to listen to the mute/unmute/ended
events of the video track MediaStreamTrack
to determine the status of the current video data stream.For remote video, you also need to listen to the
EVENT.REMOTE_VIDEO_AVAILABLE
and EVENT.REMOTE_VIDEO_UNAVAILABLE
events to handle the lifecycle of remote video.Custom rendering of local video
await trtc.startLocalVideo();const videoTrack = trtc.getVideoTrack();// Use your own player for video renderingconst videoElement = document.getElementById('video-element');videoElement.srcObject = new MediaStream([videoTrack]);videoElement.play();
Custom rendering of remote video
trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, async ({ userId, streamType }) => {// Only pull the stream, do not play itawait trtc.startRemoteVideo({ userId, streamType })const videoTrack = trtc.getVideoTrack({ userId, streamType });// Use your own player for video renderingconst videoElement = document.getElementById('remote-video-element');videoElement.srcObject = new MediaStream([videoTrack]);videoElement.play();});