Günümüzde, insanlar arasında uzaktan iletişim ve etkileşim büyük önem taşımaktadır. Video sohbet uygulamaları, kullanıcıların birbirleriyle canlı görüntülü iletişim kurmasını sağlayan güçlü araçlardır. Bu makalede, kendi video sohbet scriptinizi nasıl oluşturabileceğinizi adım adım anlatacağız. İşte başlamanıza yardımcı olacak kılavuz ve bazı kod örnekleri:
WebRTC (Web Real-Time Communication), tarayıcılar arasında gerçek zamanlı iletişim sağlayan bir web teknolojisidir. Video sohbet scriptimizi oluşturmak için WebRTC'yi kullanacağız. WebRTC'yi kullanabilmek için öncelikle tarayıcının desteklediği bir JavaScript kütüphanesi olan adapter.js
'i dahil etmemiz gerekiyor. Bu kütüphaneyi projemize eklemek için aşağıdaki kodu HTML sayfamızın <head>
bölümüne ekleyin:
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
adapter.js
, tarayıcının farklı özelliklerini denetleyerek WebRTC'yi tüm tarayıcılarda kullanılabilir hale getirir.
Video sohbet scriptimiz için basit bir kullanıcı arayüzü oluşturacağız. Bu arayüz, kullanıcıların video sohbetine katılabileceği ve iletişim kurabileceği bir alan sağlayacaktır. İşte basit bir HTML ve CSS yapısı ile kullanıcı arayüzünün temel bir örneği:
<!DOCTYPE html>
<html>
<head>
<title>Video Sohbet Scripti</title>
<style>
#localVideo, #remoteVideo {
width: 400px;
height: 300px;
}
</style>
</head>
<body>
<video id="localVideo" autoplay></video>
<video id="remoteVideo" autoplay></video>
<button id="startButton">Video Sohbetine Katıl</button>
<button id="endButton">Video Sohbetinden Ayrıl</button>
<script src="script.js"></script>
</body>
</html>
Yukarıdaki HTML yapısında, <video>
elementleri, kullanıcıların kendi video akışını (localVideo
) ve karşıdaki kullanıcının video akışını (remoteVideo
) görebileceği alanları temsil eder. script.js
dosyasını HTML sayfasının sonunda dahil ederek JavaScript kodunu bu dosyaya yerleştireceğiz.
Video sohbet scriptimizi oluşturmak için WebRTC'yi kullanacağız. Bu adımda JavaScript kullanarak WebRTC ile video sohbetini başlatacağız. İşte script.js
dosyasına ekleyeceğimiz örnek bir kod:
// Gerekli değişkenleri tanımlama
let localStream;
let remoteStream;
let localVideo = document.getElementById('localVideo');
let remoteVideo = document.getElementById('remoteVideo');
let startButton = document.getElementById('startButton');
let endButton = document.getElementById('endButton');
// Start butonuna tıklanınca video sohbetini başlatma
startButton.addEventListener('click', startVideoChat);
// Video sohbetini başlatan fonksiyon
function startVideoChat() {
// Video ve ses aygıtlarını al
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => {
// Local video akışını görüntüle
localVideo.srcObject = stream;
localStream = stream;
// Peer bağlantısını oluştur
createPeerConnection();
// Remote video akışını al
remoteStream = new MediaStream();
remoteVideo.srcObject = remoteStream;
// Local video akışını peer'a ekle
localStream.getTracks().forEach(track => {
peerConnection.addTrack(track, localStream);
});
// ICE kandidatlarını paylaş
peerConnection.onicecandidate = handleICECandidate;
// Remote video akışını al
peerConnection.ontrack = handleTrack;
// Video sohbetini başlatan sinyal gönderme
sendSignal('startVideoChat', {});
})
.catch(error => {
console.error('Video sohbeti başlatılamadı: ', error);
});
}
// Peer bağlantısını oluşturma
function createPeerConnection() {
// Peer bağlantısını oluştur ve yapılandır
peerConnection = new RTCPeerConnection();
peerConnection.onnegotiationneeded = handleNegotiationNeeded;
}
// Negosiyon gerektiğinde işlemleri gerçekleştirme
function handleNegotiationNeeded() {
// Peer bağlantısı için SDP (Session Description Protocol) oluştur
peerConnection.createOffer()
.then(offer => peerConnection.setLocalDescription(offer))
.then(() => {
// SDP'yi al ve sinyal gönder
sendSignal('offer', peerConnection.localDescription);
})
.catch(error => {
console.error('Negosiyon gerektiren işlem başarısız: ', error);
});
}
// ICE kandidatlarını paylaşma
function handleICECandidate(event) {
if (event.candidate) {
sendSignal('iceCandidate', event.candidate);
}
}
// Remote video akışını ekleme
function handleTrack(event) {
remoteStream.addTrack(event.track);
}
// Sinyal gönderme
function sendSignal(type, data) {
// Sinyali sunucuya gönderme işlemleri
// ...
}
// Video sohbetini sonlandırma
endButton.addEventListener('click', endVideoChat);
// Video sohbetini sonlandırma
function endVideoChat() {
// Local video akışını durdur
localStream.getTracks().forEach(track => {
track.stop();
});
// Remote video akışını temizle
remoteStream.getTracks().forEach(track => {
track.stop();
});
// Peer bağlantısını kapat
peerConnection.close();
// Video sohbetini sonlandıran sinyal gönderme
sendSignal('endVideoChat', {});
// Video akışlarını temizle
localVideo.srcObject = null;
remoteVideo.srcObject = null;
}
// Sinyal alma ve işleme
function receiveSignal(signal) {
// Sinyal türüne göre işlem yapma
switch (signal.type) {
case 'offer':
handleOfferSignal(signal.data);
break;
case 'answer':
handleAnswerSignal(signal.data);
break;
case 'iceCandidate':
handleICECandidateSignal(signal.data);
break;
case 'endVideoChat':
handleEndVideoChatSignal();
break;
default:
console.warn('Bilinmeyen sinyal türü: ', signal.type);
break;
}
}
// Offer sinyalini işleme
function handleOfferSignal(offer) {
createPeerConnection();
// Remote peer'a SDP'yi ayarla
peerConnection.setRemoteDescription(new RTCSessionDescription(offer))
.then(() => {
// Answer SDP oluştur ve local peer'a ayarla
return peerConnection.createAnswer();
})
.then(answer => {
return peerConnection.setLocalDescription(answer);
})
.then(() => {
// SDP'yi al ve sinyal gönder
sendSignal('answer', peerConnection.localDescription);
})
.catch(error => {
console.error('Offer sinyali işlenemedi: ', error);
});
}
// Answer sinyalini işleme
function handleAnswerSignal(answer) {
// Remote peer'a SDP'yi ayarla
peerConnection.setRemoteDescription(new RTCSessionDescription(answer))
.catch(error => {
console.error('Answer sinyali işlenemedi: ', error);
});
}
// ICE kandidatı sinyalini işleme
function handleICECandidateSignal(candidate) {
// ICE kandidatını ekle
peerConnection.addIceCandidate(new RTCIceCandidate(candidate))
.catch(error => {
console.error('ICE kandidatı işlenemedi: ', error);
});
}
// Video sohbeti sonlandırma sinyalini işleme
function handleEndVideoChatSignal() {
endVideoChat();
}
Yukarıdaki JavaScript kodunda, startButton
ve endButton
öğelerine tıklama olaylarını dinleyerek video sohbetini başlatma ve sonlandırma işlemlerini gerçekleştiriyoruz.
startVideoChat()
fonksiyonunda, navigator.mediaDevices.getUserMedia()
kullanarak kullanıcının video ve ses aygıtlarını alıyoruz. Ardından, localVideo
elementine kullanıcının kendi video akışını atıyoruz ve localStream
değişkenine kaydediyoruz.
// Video sohbetini başlatan sinyal gönderme
sendSignal('startVideoChat', {});
Video sohbetini başlatmak için createPeerConnection()
fonksiyonunu çağırarak peer bağlantısını oluşturuyoruz. Ardından, remoteVideo
elementine karşıdaki kullanıcının video akışını göstereceğimiz remoteStream
değişkenini oluşturuyoruz.
Daha sonra, localStream
içindeki video ve ses akışlarını peer bağlantısına ekliyoruz:
// Local video akışını peer'a ekle
localStream.getTracks().forEach(track => {
peerConnection.addTrack(track, localStream);
});
ICE kandidatlarını paylaşmak için peerConnection.onicecandidate
olayını dinliyoruz ve handleICECandidate()
işlevini çağırıyoruz. Remote video akışını almak için peerConnection.ontrack
olayını dinliyoruz ve handleTrack()
işlevini çağırıyoruz.
Son olarak, sendSignal()
işlevini kullanarak video sohbetinin başlatıldığına dair bir sinyal gönderiyoruz.
Video sohbetini sonlandırmak için ise endVideoChat()
işlevini kullanıyoruz. Bu işlevde, localStream
ve remoteStream
içindeki tüm akışları durduruyor, peer bağlantısını kapatıyor ve video akışlarını temizliyoruz. Ayrıca, video sohbetinin sonlandırıldığına dair bir sinyal gönderiyoruz.
Yukarıdaki kod parçacığı, basit bir video sohbet scriptinin temel işlevlerini içerir. Bununla birlikte, bu örnek kodu kendi proje gereksinimlerinize göre özelleştirebilir ve sunucu tarafı işlemleri, sinyal iletişimi ve diğer detayları ekleyebilirsiniz.
Umarım bu makale, video sohbet scripti oluşturma konusunda size yardımcı olur. Başarılar dilerim!
Profesyonel ve her yönü ile kontrol edilebilir gelişmiş çok özellikli ajans yazılımıdır. İşte öne çıkan özellikler.