Real-Time Streaming Systems (WebRTC + Live Data) · Pelajaran

Menambahkan dan Menghapus Trek Media

Pelajari cara mengelola trek audio dan video dalam `RTCPeerConnection`, sehingga aliran dapat dimanipulasi secara dinamis selama panggilan.

Pelajaran 2 dari 411 langkah

Menambahkan dan Menghapus Trek Media adalah pelajaran Real-Time Streaming Systems (WebRTC + Live Data) gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Real-Time Streaming Systems (WebRTC + Live Data), dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Real-Time Streaming Systems (WebRTC + Live Data) mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Dynamic Media in WebRTC Calls

Imagine you're in a video call and want to mute your microphone or switch your camera. How does WebRTC handle these changes without dropping the call?

This lesson explores how to dynamically add and remove audio/video tracks from an active WebRTC peer connection. This is crucial for creating interactive and flexible real-time applications.

What is a MediaStreamTrack?

Before managing tracks, let's clarify what they are. A MediaStreamTrack represents a single audio or video component within a MediaStream.

  • Kind: Tracks have a kind property, either 'audio' or 'video'.
  • Enabled: The enabled property (boolean) lets you temporarily pause/unpause a track without removing it.

Sending Media with addTrack()

To start sending a local audio or video track to a remote peer, you use the RTCPeerConnection.addTrack() method.

It takes two arguments:

  1. The MediaStreamTrack you want to send.
  2. The MediaStream the track belongs to (important for grouping related tracks).

This method tells the peer connection to prepare and send this track's data.

Code: Adding a Local Video Track

Let's see how you'd add a local video track to your RTCPeerConnection. This snippet sets up a basic peer connection and adds a camera feed.

async function addLocalVideoTrack() {
  // In a real app, 'pc' would be an already established RTCPeerConnection
  const pc = new RTCPeerConnection();

  try {
    // Get access to the user's camera
    const localStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
    const videoTrack = localStream.getVideoTracks()[0];

    // Add the video track to the peer connection
    const sender = pc.addTrack(videoTrack, localStream);
    console.log('Video track added! RTCRtpSender:', sender);

    // In a full WebRTC app, you'd now create an offer and exchange SDP
    // pc.createOffer().then(offer => pc.setLocalDescription(offer)).then(() => sendOfferToRemote(pc.localDescription));

  } catch (error) {
    console.error('Error adding video track:', error);
  }
}

addLocalVideoTrack();

Understanding RTCRtpSender

When you call pc.addTrack(), it returns an RTCRtpSender object. This object is your handle to manage the sending of that specific track.

  • It allows you to modify parameters related to how the track is sent.
  • It's also required if you later want to remove the track from the peer connection.

Stopping Media with removeTrack()

To stop sending a particular media track, you use the RTCPeerConnection.removeTrack() method.

This method takes one argument: the RTCRtpSender object that was returned when you originally called addTrack() for that track.

Once removed, the track's data will no longer be transmitted over the peer connection.

Code: Implementing removeTrack()

Let's extend our previous example to demonstrate how to remove a track after it has been added. We need to keep track of the RTCRtpSender.

let peerConnection; // Global or accessible RTCPeerConnection instance
let videoSender;    // Global or accessible RTCRtpSender instance
let localVideoTrack; // Global or accessible MediaStreamTrack

async function setupAndAddTrack() {
  peerConnection = new RTCPeerConnection();

  try {
    const localStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
    localVideoTrack = localStream.getVideoTracks()[0];
    videoSender = peerConnection.addTrack(localVideoTrack, localStream);
    console.log('Video track added. Sender:', videoSender);
  } catch (error) {
    console.error('Error during setup or addTrack:', error);
  }
}

function removeLocalVideoTrack() {
  if (peerConnection && videoSender) {
    peerConnection.removeTrack(videoSender);
    localVideoTrack.stop(); // Stops the camera/mic itself
    console.log('Video track removed and stopped!');
  } else {
    console.log('No track to remove or not set up.');
  }
}

// Simulate adding a track, then removing it after 3 seconds
setupAndAddTrack().then(() => {
  setTimeout(removeLocalVideoTrack, 3000);
});

Receiving Remote Track Updates

On the receiving end, how does a peer know that a new track has been added or an existing one removed by the sender?

The RTCPeerConnection.ontrack event listener is fired on the receiving peer when a new MediaStreamTrack is added to the remote description. This is where you would typically attach the incoming track to a video or audio element.

Real-World Track Management

Dynamic track management is essential for many real-time features:

  • Muting/Unmuting: Simply toggle track.enabled = false or true.
  • Camera/Mic Switching: Remove the old track, get a new one from getUserMedia(), and add the new track.
  • Screen Sharing: Get a screen share track (e.g., with getDisplayMedia()) and add it to the peer connection.

Test Your Track Knowledge

RTCPeerConnection allows for dynamic management of media streams. Let's check your understanding of how tracks are handled.

Recap: Dynamic Media Control

In this lesson, you learned how to dynamically manage media tracks within a WebRTC call:

  • addTrack() sends a MediaStreamTrack, returning an RTCRtpSender.
  • removeTrack() stops sending a track by taking its RTCRtpSender.
  • The remote peer listens for the ontrack event to receive new media.
  • You can mute/unmute using track.enabled and switch sources by adding/removing tracks.

Mastering these methods allows for rich, interactive real-time experiences!

Gratis untuk memulai

Belajar Real-Time Streaming Systems (WebRTC + Live Data) dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
48

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menambahkan dan Menghapus Trek Media” gratis?

Ya — teks lengkap “Menambahkan dan Menghapus Trek Media” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Real-Time Streaming Systems (WebRTC + Live Data), upgrade ke CoddyKit PRO. Kursus Real-Time Streaming Systems (WebRTC + Live Data) mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menambahkan dan Menghapus Trek Media”?

Pelajari cara mengelola trek audio dan video dalam `RTCPeerConnection`, sehingga aliran dapat dimanipulasi secara dinamis selama panggilan. Kamu berlatih Real-Time Streaming Systems (WebRTC + Live Data) dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Real-Time Streaming Systems (WebRTC + Live Data)?

Tidak diperlukan pengalaman sebelumnya. Real-Time Streaming Systems (WebRTC + Live Data) di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Menambahkan dan Menghapus Trek Media” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Real-Time Streaming Systems (WebRTC + Live Data) ini?

Ya. Setiap pelajaran Real-Time Streaming Systems (WebRTC + Live Data) menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengakses Perangkat Media Pengguna
  2. Menambahkan dan Menghapus Trek Media
  3. Menampilkan Audio/Video Jarak Jauh
  4. Mengendalikan Kualitas dan Batasan Media
← Kembali ke Real-Time Streaming Systems (WebRTC + Live Data)