Add local view and recording

This commit is contained in:
James Hush
2025-04-01 19:26:41 +08:00
parent 7fdf996f0e
commit ac7e38719d
3 changed files with 34 additions and 14 deletions

View File

@@ -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;

View File

@@ -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 />

View File

@@ -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) {