দূরবর্তী স্ট্রীম দিয়ে শুরু করা হচ্ছে

একবার একটি RTCPeerConnection একটি দূরবর্তী পিয়ারের সাথে সংযুক্ত হলে, তাদের মধ্যে অডিও এবং ভিডিও স্ট্রিম করা সম্ভব। এটি সেই বিন্দু যেখানে আমরা getUserMedia() থেকে RTCPeerConnection এর সাথে প্রাপ্ত স্ট্রীমটিকে সংযুক্ত করি। একটি মিডিয়া স্ট্রীমে অন্তত একটি মিডিয়া ট্র্যাক থাকে, এবং আমরা যখন রিমোট পিয়ারে মিডিয়া ট্রান্সমিট করতে চাই তখন এগুলি আলাদাভাবে RTCPeerConnection এ যোগ করা হয়।

const localStream = await getUserMedia({video: true, audio: true});
const peerConnection = new RTCPeerConnection(iceConfig);
localStream.getTracks().forEach(track => {
    peerConnection.addTrack(track, localStream);
});

রিমোট পিয়ারের সাথে সংযুক্ত হওয়ার আগে RTCPeerConnection এ ট্র্যাকগুলি যোগ করা যেতে পারে, তাই সংযোগটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করে যত তাড়াতাড়ি সম্ভব এই সেটআপটি সম্পাদন করা বোধগম্য।

দূরবর্তী ট্র্যাক যোগ করা হচ্ছে

অন্য পিয়ার দ্বারা যোগ করা দূরবর্তী ট্র্যাকগুলি পেতে, আমরা track ইভেন্টের জন্য স্থানীয় RTCPeerConnection এ একজন শ্রোতাকে রেজিস্টার করি। RTCTrackEventMediaStream অবজেক্টের একটি অ্যারে রয়েছে যেগুলিতে পিয়ারের সংশ্লিষ্ট স্থানীয় স্ট্রিমগুলির মতো একই MediaStream.id মান রয়েছে৷ আমাদের উদাহরণে, প্রতিটি ট্র্যাক শুধুমাত্র একটি একক প্রবাহের সাথে যুক্ত।

উল্লেখ্য যে MediaStream আইডি পিয়ার কানেকশনের উভয় পাশে মিলে গেলেও MediaStreamTrack আইডিগুলির ক্ষেত্রে এটি সাধারণত সত্য নয়৷

const remoteVideo = document.querySelector('#remoteVideo');

peerConnection.addEventListener('track', async (event) => {
    const [remoteStream] = event.streams;
    remoteVideo.srcObject = remoteStream;
});
,

একবার একটি RTCPeerConnection একটি দূরবর্তী পিয়ারের সাথে সংযুক্ত হলে, তাদের মধ্যে অডিও এবং ভিডিও স্ট্রিম করা সম্ভব। এটি সেই বিন্দু যেখানে আমরা getUserMedia() থেকে RTCPeerConnection এর সাথে প্রাপ্ত স্ট্রীমটিকে সংযুক্ত করি। একটি মিডিয়া স্ট্রীমে অন্তত একটি মিডিয়া ট্র্যাক থাকে, এবং আমরা যখন রিমোট পিয়ারে মিডিয়া ট্রান্সমিট করতে চাই তখন এগুলি আলাদাভাবে RTCPeerConnection এ যোগ করা হয়।

const localStream = await getUserMedia({video: true, audio: true});
const peerConnection = new RTCPeerConnection(iceConfig);
localStream.getTracks().forEach(track => {
    peerConnection.addTrack(track, localStream);
});

রিমোট পিয়ারের সাথে সংযুক্ত হওয়ার আগে RTCPeerConnection এ ট্র্যাকগুলি যোগ করা যেতে পারে, তাই সংযোগটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করে যত তাড়াতাড়ি সম্ভব এই সেটআপটি সম্পাদন করা বোধগম্য।

দূরবর্তী ট্র্যাক যোগ করা হচ্ছে

অন্য পিয়ার দ্বারা যোগ করা দূরবর্তী ট্র্যাকগুলি পেতে, আমরা track ইভেন্টের জন্য স্থানীয় RTCPeerConnection এ একজন শ্রোতাকে রেজিস্টার করি। RTCTrackEventMediaStream অবজেক্টের একটি অ্যারে রয়েছে যেগুলিতে পিয়ারের সংশ্লিষ্ট স্থানীয় স্ট্রিমগুলির মতো একই MediaStream.id মান রয়েছে৷ আমাদের উদাহরণে, প্রতিটি ট্র্যাক শুধুমাত্র একটি একক প্রবাহের সাথে যুক্ত।

উল্লেখ্য যে MediaStream আইডি পিয়ার কানেকশনের উভয় পাশে মিলে গেলেও MediaStreamTrack আইডিগুলির ক্ষেত্রে এটি সাধারণত সত্য নয়৷

const remoteVideo = document.querySelector('#remoteVideo');

peerConnection.addEventListener('track', async (event) => {
    const [remoteStream] = event.streams;
    remoteVideo.srcObject = remoteStream;
});