= ({
whipUrl,
showSettingsButton = true,
children,
}) => {
const ctx = useStreamCrafterContext();
const t = useStudioTranslate();
const canAddSource = ctx.state !== "destroyed" && ctx.state !== "error";
const hasCamera = ctx.sources.some((s) => s.type === "camera");
const canStream = ctx.isCapturing && !ctx.isStreaming && whipUrl !== undefined;
const handleStartCamera = useCallback(async () => {
try {
await ctx.startCamera();
} catch (err) {
console.error("Failed to start camera:", err);
}
}, [ctx]);
const handleStartScreenShare = useCallback(async () => {
try {
await ctx.startScreenShare({ audio: true });
} catch (err) {
console.error("Failed to start screen share:", err);
}
}, [ctx]);
const handleGoLive = useCallback(async () => {
try {
await ctx.startStreaming();
} catch (err) {
console.error("Failed to start streaming:", err);
}
}, [ctx]);
const handleStop = useCallback(async () => {
await ctx.stopStreaming();
}, [ctx]);
if (children) {
return {children}
;
}
return (
{showSettingsButton && }
{!ctx.isStreaming ? (
) : (
)}
);
};