فيديوهاتيالتوثيق

دليل: تضمين مشغّل في تطبيق Next.js 15

ثبّت @videohati/react، وأنشئ جلسة تشغيل على الخادم، وارسم المشغّل داخل مكوّن عميل — مع دعم الاتجاه من اليمين إلى اليسار.

يضمّن هذا الدليل مشغّل فيديوهاتي داخل مشروع Next.js 15 بموجِّه App Router. تُنشأ الجلسة على الخادم باستخدام حزمة Node؛ ولا يرى المتصفح سوى sessionToken قصير العمر.

قبل أن تبدأ

تحتاج إلى:

  • تطبيق Next.js 15 يستخدم موجِّه App Router.
  • مفتاح واجهة برمجية للمشروع في الوضع التجريبي (vh_test_...) على الخادم.
  • فيديو اكتمل ترميزه. راجع ارفع أول فيديو لك وشغّله.

1. ثبّت الحزم

تَرسم حزمة React المشغّل؛ وتُنشئ حزمة Node الجلسة على الخادم.

npm install @videohati/react @videohati/node

2. أنشئ جلسة التشغيل على الخادم

داخل مكوّن خادم (أو معالِج مسار / إجراء خادم)، أنشئ جلسة بحزمة Node. أبقِ مفتاح الواجهة البرمجية على الخادم.

// app/watch/[videoId]/page.tsx
import { Videohati } from "@videohati/node";
import { Watch } from "./watch";

export default async function WatchPage({
  params,
}: {
  params: Promise<{ videoId: string }>;
}) {
  const { videoId } = await params;
  const videohati = new Videohati({ apiKey: process.env.VIDEOHATI_API_KEY });

  const session = await videohati.playback.createSession({
    videoId,
    viewerDisplayText: "[email protected]",
  });

  return (
    <Watch
      videoId={videoId}
      projectId={process.env.VIDEOHATI_PROJECT_ID!}
      sessionToken={session.sessionToken}
    />
  );
}

يجب تشغيل playback.createSession() على الخادم. تمرير مفتاح vh_live_ أو vh_test_ إلى مكوّن عميل يكشفه داخل حزمة المتصفح.

3. ارسم المشغّل داخل مكوّن عميل

<VideohatiPlayer /> مكوّن عميل. مرّر videoId وprojectId وsessionToken المُنشأ على الخادم.

// app/watch/[videoId]/watch.tsx
"use client";

import { VideohatiPlayer } from "@videohati/react";

export function Watch({
  videoId,
  projectId,
  sessionToken,
}: {
  videoId: string;
  projectId: string;
  sessionToken: string;
}) {
  return (
    <VideohatiPlayer
      videoId={videoId}
      projectId={projectId}
      sessionToken={sessionToken}
      lang="ar"
      autoplay="muted"
      onStateChange={(state) => console.log("player state:", state)}
      onError={(error) => console.error(error.code, error.message)}
      style={{ width: "100%", maxWidth: 960 }}
    />
  );
}

يتولّى المشغّل تشغيل HLS ونبض الجلسة والعلامة المائية بنفسه — فلا تستدعي نقاط وصول التشغيل مجددًا من المتصفح.

4. الاتجاه من اليمين إلى اليسار والعربية

اضبط lang="ar" لرسم واجهة المشغّل بالعربية وباتجاه من اليمين إلى اليسار. يعكس المشغّل عناصر تحكّمه بنفسه؛ وكل ما عليك هو التأكّد من صحة اتجاه الصفحة المحيطة:

<VideohatiPlayer
  videoId={videoId}
  projectId={projectId}
  sessionToken={sessionToken}
  lang="ar"
/>

في تخطيط Next.js متعدّد اللغات، اضبط dir="rtl" على <html> (أو على حاوية المشغّل) للُّغة العربية كي تنعكس الصفحة المحيطة بالمشغّل أيضًا.

5. اختياري: ضبط رابط أساسي مشترك

إذا كنت تشير إلى واجهة تجريبية، فغلّف جزء الشجرة الذي يستخدم خطّافات React بـ VideohatiProvider:

"use client";

import { VideohatiProvider } from "@videohati/react";

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <VideohatiProvider baseUrl="https://api.staging.videohati.com">
      {children}
    </VideohatiProvider>
  );
}

وللرفع من جانب المتصفح بجلسة لوحة التحكم، يقود الخطّاف useVideohatiUpload تدفّق الرفع المُجزّأ نفسه داخل المتصفح.