Cree una aplicación de chat de video con Laravel 7 y Vue.js
Cree una aplicación de chat de video con Laravel 7 y Vue.js (basada en WebRTC)
Hoy voy a hablar sobre cómo crear una aplicación de chat de video simple con Laravel 7 usando Vue.js.
Cómo implementar el chat de vídeo
vamos a utilizar WebRTC (Web Real-Time Communication), que es un proyecto gratuito de código abierto que proporciona navegadores web y aplicaciones móviles con comunicación en tiempo real (RTC).
Visión general
Paso 0: instalar y configurar Laravel
Paso 1: instalar paquetes npm
Paso 2: crear una cuenta Pusher
Paso 3: crear páginas
Paso 4: probar
Paso 0: instalar la interfaz de usuario de Laravel y los paquetes Vue
Instalar Laravel
laravel nuevo laravel-video-chatAhora que se ha instalado Laravel, estamos listos para instalar el andamiaje frontal de Vue.js. Para instalar, ejecute lo siguiente:
cd laravel-video-chatel compositor requiere laravel/uiphp artesano interfaz de usuario vue --auth
Seguido por:
npm instalar && npm ejecutar devPor último,
servicio artesanal phpAhora puede acceder a http://127.0.0.1:8000 para ver la página predeterminada de Laravel.
Nota: WebRTC solo se puede usar desde orígenes seguros (HTTPS o localhost). Por lo tanto, si no es localhost, use HTTPS para que funcione.
Paso 1: instalar los paquetes necesarios
En su terminal, instale 'simple-peer' y 'pusher-js' ejecutando el siguiente comando:
npm instalar simple-peer --save-dev
npm instalar pusher-js --save-devLuego, agreguemos la biblioteca PHP para interactuar con Pusher como un requisito de nuestro proyecto usando Composer.
el compositor requiere pusher/pusher-php-serverPaso 2: crear una cuenta de empujador
Vaya al sitio web de Pusher y regístrese para obtener una cuenta.
Una vez que se crea la cuenta, haga clic en el botón "Crear aplicación" en su tablero.

Rellene el formulario de registro con los siguientes datos.
❶ Escribe 'laravel-video-chat'
❷ Selecciona donde prefieras.
❸ Seleccione Vue.js.
❹ Seleccione Laravel.

Una vez que se realiza el registro, vaya a la pestaña "Claves de la aplicación" y vea las credenciales.

Actualice su archivo .env con las credenciales anteriores.
.envPULSADOR _APP_ ID=******
PULSADOR _APP_ CLAVE=********************
PULSADOR _APP_ SECRETO=************ ********
PULSADOR _APP_ CLUSTER=ap3
Por último, los eventos del cliente deben estar habilitados.
Vaya a la pestaña "Configuración de la aplicación" , marque " Habilitar eventos de cliente" y haga clic en " actualizar ".

Eso es todo para la configuración de Pusher.
Paso 3: crear páginas
Ahora es el momento de escribir código.
Definir ruta
Defina las rutas en sus rutas/web.php de la siguiente manera
// web.phpRuta::grupo(['middleware' => 'autorización'], función(){ Ruta::get('video_chat', 'VideoChatController@index'); Ruta::post('auth/video_chat', 'VideoChatController@auth');});
Crear controlador
Para comenzar, ejecute el comando artesanal en su terminal para crear un nuevo controlador.
php crafty make:controlador VideoChatControllerEste comando crea un nuevo archivo para nosotros en app/Http/Controllers/VideoChatController.php.
Abra el controlador recién creado y modifique el contenido como se muestra a continuación.
// VideoChatController.php<?phpespacio de nombres App\Http\Controllers;utilice Illuminate\Http\Request;
usar empujador\empujador;class VideoChatController extiende el controlador
{
índice de función pública (Solicitud $ solicitud) { $usuario = $solicitud->usuario();
$otros = \Aplicación\Usuario::where('id', '!=', $usuario->id)->pluck('nombre', 'id');
return view('video_chat.index')->with([
'usuario' => recopilar($solicitud->usuario()->only(['id', 'nombre'])),
'otros' => $ otros
]); }
public function auth(Solicitud $solicitud) {
$usuario = $solicitud->usuario();
$socket_id = $solicitud->socket_id;
$nombre_canal = $solicitud->nombre_canal;
$pusher = new Pusher(
config('broadcasting.connections.pusher.key'),
config('broadcasting.connections.pusher.secret'),
config('broadcasting.connections.pusher.app_id'),
[
'cluster' = > config('broadcasting.connections.pusher.options.cluster'),
'encrypted' => true
]
);
respuesta de retorno (
$puser->presence_auth($channel_name,
); }
}
Crear front-end
Vamos a crear un nuevo componente de Vue, VideoChat.vue , en la carpeta resources/js/components que albergará la lógica de nuestra sala de chat de video.
Después de que se haya creado el componente, agregue el siguiente código
// VideoChat.ver<template>
<div class="container">
<h1 class="text-center">Laravel Video Chat</h1>
</div>
</template>
<script></script>
Luego, abra resources/js/app.js y agregue la siguiente línea de código debajo de ExampleComponent para definir globalmente nuestro nuevo componente:
// aplicación.jsVue.component('video-chat', require('./components/VideoChat.vue').default);
Por último, necesitaremos crear resources/views/video_chat/index.blade.php para mostrar nuestro componente.
// índice.blade.php@extends('diseños.aplicación')@section('contenido')<video-chat :user="{{ $user }}" :others="{{ $others }}" pusher-key="{{ config('broadcasting.connections.pusher.key') }}" pusher- cluster="{{ config('broadcasting.connections.pusher.options.cluster') }}"></video-chat>@endsection
Editar componente de vista
Editemos el componente Vue.
Actualice VideoChat.vue de la siguiente manera
VideoChat.vue<template>
<div class="container">
<h1 class="text-center">Laravel Video Chat</h1>
<div class="video-container" ref="video-container">
<video class=" video-aquí" ref="video-aquí" reproducción automática></video>
<video class="video-allí" ref="video-allí" reproducción automática></video>
<div class="text-right" v- for="(name,userId) in others" :key="userId">
<button @click="startVideoChat(userId)" v-text="`Hable con ${name}`"/>
</div>
< /div>
</div>
</plantilla><script>importar Pusher desde 'pusher-js';
importar Peer desde 'simple-peer';export default {
props: ['user', 'others', 'pusherKey', 'pusherCluster'],
data() {
return {
channel: null,
stream: null,
peers: {}
}
},
mounted() {
this. configurarVideoChat();
},
métodos: {
startVideoChat(userId) {
this.getPeer(userId, true);
},
getPeer(ID de usuario, iniciador) { if(this.peers[userId] === indefinido) {
let peer = new Peer({ initiator
,
stream: this.stream,
trickle: false
});
peer.on('señal', (datos) => {
this.channel.trigger(`client-signal-${userId}`, {
userId: this.user.id,
data: data
});
})
.on ('stream', (stream) => {
const videoThere = this.$refs['video-there'];
videoThere.srcObject = stream;
})
.on('close', () => {
const peer = this .peers[userId];
if(peer!== indefinido) {
peer.destroy();
}
eliminar this.peers[userId];
}); this.peers[userId] = compañero;
}
devuelve this.peers[userId];
}, async setupVideoChat() {
// Para mostrar los errores del empujador
// Pusher.logToConsole = true; const stream = espera navigator.mediaDevices.getUserMedia({video: verdadero, audio: verdadero});
const videoHere = this.$refs['video-here'];
videoHere.srcObject = corriente;
este.flujo = flujo; empujador constante = this.getPusherInstance();
this.channel = pusher.subscribe('presence-video-chat');
this.channel.bind(`client-signal-${this.user.id}`, (signal) =>
{
const peer = this.getPeer(signal.userId, false);
peer.signal(signal.data);
});
}, getPusherInstance() {
devuelve nuevo Pusher(this.pusherKey, {
authEndpoint: '/auth/video_chat',
cluster: this.pusherCluster,
auth: {
headers: {
'X-CSRF-Token': document.head.querySelector('meta [nombre="csrf-token"]').content
}
}
});
}
}
};
</script><estilo>
.video-container {
ancho: 500px;
altura: 380px;
margen: 8px automático;
borde: 3px sólido #000;
posición: relativa;
sombra de caja: 1px 1px 1px #9e9e9e;
}.video-aquí {
ancho: 130px;
posición: absoluta;
izquierda: 10px;
abajo: 16px;
borde: 1px sólido #000;
borde-radio: 2px;
índice z: 2;
}.video-allí {
ancho: 100%;
altura: 100%;
índice z: 1;
}.text-right {
text-align: right;
}
</estilo>
Permítanme explicar algunas partes principales del código dentro de la función setupVideoChat .
1, acceda a los dispositivos mediante navigator.mediaDevices.getUserMedia.
2, Llame a getPusherInstance para instanciar la instancia de Pusher. Estamos pasando 'X-CSRF-Token' en los encabezados para autenticar.
3. Vincule el canal client-signal-${this.user.id} para recibir un evento para usted.
4. Dentro de la función getPeer , cree una nueva conexión entre pares de WebRTC y establezca los métodos básicos como señal , transmisión y cierre .
La señal se activa cuando el par desea enviar datos de señalización al par remoto. S tream recibe un flujo de video remoto, que se puede mostrar en una etiqueta de video.
Close se llama, no hace falta decirlo, cuando la conexión entre pares se ha cerrado.
Paso 4 —Prueba
En caso de que no lo haya hecho por un tiempo, deberá volver a compilar el código para que Vue detecte los cambios que hemos realizado. Ejecute npm run dev, asegúrese de que está ejecutando php artisan serveen una terminal separada y actualice su navegador.
Cree 2 usuarios e inicie sesión en diferentes navegadores y cargue http://127.0.0.1:8000/video_chat. Debe configurar una base de datos para registrar usuarios si aún no lo ha hecho.
Luego, haga clic en el botón "Hablar con <nombre de usuario>" y debería ver al usuario remoto.

Eso es todo. Espero que este tutorial te ayude.
Referencia:
Tutorial de Laravel Web RTC en japonés , Tutorial de Laravel Web RTC en React .
Comentarios
Publicar un comentario