Add local view and recording
This commit is contained in:
@@ -56,6 +56,12 @@ button:disabled {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.local-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.video-container {
|
.video-container {
|
||||||
width: 640px;
|
width: 640px;
|
||||||
height: 360px;
|
height: 360px;
|
||||||
|
|||||||
@@ -2,16 +2,16 @@ import {
|
|||||||
RTVIClientAudio,
|
RTVIClientAudio,
|
||||||
RTVIClientVideo,
|
RTVIClientVideo,
|
||||||
useRTVIClientTransportState,
|
useRTVIClientTransportState,
|
||||||
} from '@pipecat-ai/client-react';
|
} from "@pipecat-ai/client-react";
|
||||||
import { RTVIProvider } from './providers/RTVIProvider';
|
import { RTVIProvider } from "./providers/RTVIProvider";
|
||||||
import { ConnectButton } from './components/ConnectButton';
|
import { ConnectButton } from "./components/ConnectButton";
|
||||||
import { StatusDisplay } from './components/StatusDisplay';
|
import { StatusDisplay } from "./components/StatusDisplay";
|
||||||
import { DebugDisplay } from './components/DebugDisplay';
|
import { DebugDisplay } from "./components/DebugDisplay";
|
||||||
import './App.css';
|
import "./App.css";
|
||||||
|
|
||||||
function BotVideo() {
|
function BotVideo() {
|
||||||
const transportState = useRTVIClientTransportState();
|
const transportState = useRTVIClientTransportState();
|
||||||
const isConnected = transportState !== 'disconnected';
|
const isConnected = transportState !== "disconnected";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="bot-container">
|
<div className="bot-container">
|
||||||
@@ -22,6 +22,19 @@ function BotVideo() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function LocalVideo() {
|
||||||
|
const transportState = useRTVIClientTransportState();
|
||||||
|
const isConnected = transportState !== "disconnected";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="local-container">
|
||||||
|
<div className="video-container">
|
||||||
|
{isConnected && <RTVIClientVideo participant="local" fit="cover" />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function AppContent() {
|
function AppContent() {
|
||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
@@ -32,6 +45,7 @@ function AppContent() {
|
|||||||
|
|
||||||
<div className="main-content">
|
<div className="main-content">
|
||||||
<BotVideo />
|
<BotVideo />
|
||||||
|
<LocalVideo />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DebugDisplay />
|
<DebugDisplay />
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
import { type PropsWithChildren } from 'react';
|
import { type PropsWithChildren } from "react";
|
||||||
import { RTVIClient } from '@pipecat-ai/client-js';
|
import { RTVIClient } from "@pipecat-ai/client-js";
|
||||||
import { DailyTransport } from '@pipecat-ai/daily-transport';
|
import { DailyTransport } from "@pipecat-ai/daily-transport";
|
||||||
import { RTVIClientProvider } from '@pipecat-ai/client-react';
|
import { RTVIClientProvider } from "@pipecat-ai/client-react";
|
||||||
|
|
||||||
const transport = new DailyTransport();
|
const transport = new DailyTransport();
|
||||||
|
|
||||||
const client = new RTVIClient({
|
const client = new RTVIClient({
|
||||||
transport,
|
transport,
|
||||||
params: {
|
params: {
|
||||||
baseUrl: 'http://localhost:7860',
|
baseUrl: "http://localhost:7860",
|
||||||
endpoints: {
|
endpoints: {
|
||||||
connect: '/connect',
|
connect: "/connect",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
enableMic: true,
|
enableMic: true,
|
||||||
enableCam: false,
|
enableCam: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
export function RTVIProvider({ children }: PropsWithChildren) {
|
export function RTVIProvider({ children }: PropsWithChildren) {
|
||||||
|
|||||||
Reference in New Issue
Block a user