البث

لبث فيديو مباشر، عليك أولاً إنشاء كائن LiveVideo. يمثل كائن LiveVideo البث، ويمكنك تعديل خصائص الكائن للتحكم في إعدادات البث. عند الإنشاء، سترجع API معرف الكائن LiveVideo وعنوان URL البث، والذي يمكنك إدخاله في برنامج الترميز واستخدام بيانات البث للكائن LiveVideo.

في 10 يونيو 2024، ستطلق Meta متطلبات جديدة يجب الوفاء بها قبل أن يتم نشر الحساب على فيسبوك. المتطلبات الجديدة هي كما يلي:

البث للمستخدم

للبث في الكائن User، احصل على رمز وصول المستخدم مع الإذن publish_video وأرسل الطلب إلى:

POST /<USER_ID>/live_videos?status=LIVE_NOW

راجع عنصر الربط /live_videos للتعرف على معلمات سلسلة الاستعلام الإضافية التي يمكنك تضمينها لوصف البث، مثل العنوان والوصف.

عند اختبار استدعاء API، يمكنك تضمين المعلمة access_token وتعيينها على رمز الوصول. مع ذلك، عند إجراء استدعاءات آمنة من التطبيق، استخدم فئة رمز الوصول.

عند نجاح العملية، ستنشئ API كائن LiveVideo للمستخدم وسترجع secure_stream_url وid الكائن LiveVideo. سيظهر البث في منشور بالملف الشخصي للمستخدم بمجرد إرسال البيانات إلى عنوان URL الآمن للبث. يمكنك الاستعلام عن الكائن LiveVideo لمراقبة حالة البث ولإنهاء البث.

عينة من الطلب

curl -i -X POST \
 "https://graph.facebook.com/v21.0/<USER_ID>/live_videos
   ?status=LIVE_NOW
   &title=Today%27s%20Live%20Video
   &description=This%20is%20the%20live%20video%20for%20today."

عينة من الاستجابة

{
  "id": "1953020644813104",      //<LIVE_VIDEO_ID>
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url":"rtmps://rtmp-api.facebook..."
}

البث في صفحة

لبث فيديو بث مباشر في Page، احصل على رمز وصول الصفحة الخاص بمسؤول الصفحة مع الإذنين pages_read_engagement وpages_manage_posts، ثم أرسل طلبًا إلى:

POST /<PAGE_ID>/live_videos?status=LIVE_NOW

راجع عنصر الربط /live_videos للتعرف على معلمات سلسلة الاستعلام الإضافية التي يمكنك تضمينها لوصف البث، مثل العنوان والوصف.

عند اختبار استدعاء API، يمكنك تضمين المعلمة access_token وتعيينها على رمز الوصول. مع ذلك، عند إجراء استدعاءات آمنة من التطبيق، استخدم فئة رمز الوصول.

عند نجاح العملية، ستنشئ API كائن LiveVideo للصفحة وسترجع secure_stream_url وid الكائن LiveVideo. سيظهر البث في منشور بالصفحة بمجرد إرسال البيانات إلى عنوان URL الآمن للبث. يمكنك الاستعلام عن الكائن LiveVideo لمراقبة حالة البث ولإنهاء البث.

عينة من الطلب

curl -i -X POST \
  "https://graph.facebook.com/v21.0/<PAGE_ID>/live_videos
    ?status=LIVE_NOW
    &title=Today%27s%20Page%20Live%20Video
    &description=This%20is%20the%20live%20video%20for%20the%20Page%20for%20today"

عينة من الاستجابة

{
  "id": "1953020644813108",     //<LIVE_VIDEO_ID>
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url":"rtmps://rtmp-api.facebook..."
}

الحصول على بيانات البث

يمكنك قراءة كائن LiveVideo للحصول على عناوين URL لمعاينة البث والبيانات المتعلقة بجودة البث، مثل معدلات البت ومعدلات الإطارات. يتم تحديث بيانات جودة البث كل ثانيتين، لذلك يمكنك تقييد الاستعلامات بحيث لا تتجاوز استعلامًا واحدًا كل ثانيتين. سيتم اكتشاف مهلة البث والإبلاغ عنها بعد 4 ثوانٍ من عدم تلقي البيانات.

لقراءة كائن LiveVideo، احصل على رمز وصول الصفحة أو المستخدم المناسب مع الإذن publish_video، ثم أرسل استعلامًا إلى:

GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>

استخدم المعلمة {fields} لتحديد حقول الكائن LiveVideo التي تريد إرجاعها. على سبيل المثال، فيما يلي طلب للحصول على ingest_streams في الكائن LiveVideo الذي يتضمن بيانات حول جودة البث:

عينة من الطلب

curl -i -X GET \
  "https://graph.facebook.com/v21.0/<LIVE_VIDEO_ID>?fields=ingest_streams"

عينة من الاستجابة

{
  "ingest_streams": [
    {
      "stream_id": "0",
      "stream_url": "rtmp://rtmp-api.facebook...",
      "secure_stream_url": "rtmps://rtmp-api.facebook...",
      "is_master": true,
      "stream_health": {
        "video_bitrate": 4024116,
        "video_framerate": 60,
        "video_gop_size": 2000,
        "video_height": 720,
        "video_width": 1280,
        "audio_bitrate": 128745.4921875
      },
      "id": "1914910145231512"  // <INGEST_STREAM_ID>
    }
  ],
  "id": "<LIVE_VIDEO_ID>" 
}

خصائص الاستجابة

اسم الحقلالوصف
audio_bitrate

وحدات البت لكل ثانية في بث الصوت الوارد.

is_master

تظهر القيمة true إذا تم الاستعلام عن معرف فيديو البث المباشر وهي تمثل قيمة الفيديو الذي يتم عرضه على الجمهور.

secure_stream_url

عنوان URL الآمن لاستيعاب RTMPS لدى معرف فيديو البث المباشر الذي يتم الاستعلام عنه.

stream_url

عنوان URL لاستيعاب RTMP لدى معرف فيديو لدى البث المباشر الذي يتم الاستعلام عنه.

video_bitrate

وحدات البت لكل ثانية في بث الفيديو الوارد.

video_framerate

معدل الإطارات لكل ثانية في بث الفيديو الوارد.

video_gop_size

حجم GOP (مجموعة من الصور) بالمللي ثانية.

video_height

ارتفاع إطار الفيديو الوارد بالبيكسل.

video_width

عرض إطار الفيديو الوارد بالبيكسل.

إنهاء البث

لإنهاء البث، قم بإيقاف بث بيانات فيديو البث المباشر من برنامج الترميز لديك إلى عنوان URL للبث أو أرسل طلبًا إلى:

POST /<LIVE_VIDEO_ID>?end_live_video=true

يؤدي ذلك إلى تعيين حالة الكائن LiveVideo على VOD، وحفظه كفيديو حسب الطلب (VOD) بحيث يمكن عرضه لاحقًا.

عند نجاح العملية، سترجع API معرف الكائن LiveVideo.

عينة من الطلب

curl -i -X POST \
  "https://graph.facebook.com/v21.0/<LIVE_VIDEO_ID>?end_live_video=true"

عينة من الاستجابة

{
  "id": "10213570560993813"  //<LIVE_VIDEO_ID>
}

يمكنك إجراء عملية تشغيل GET بمعرف LiveVideo لتأكيد أنه تم تعيين حالته على VOD:

GET /<LIVE_VIDEO_ID>?fields=status

عينة من الاستجابة

{
  "status": "VOD",  // Broadcast ended, saved as VOD
  "id": "10213570560993813"    //<LIVE_VIDEO_ID>
}

حذف البث

لحذف عملية بث تم إنهاؤها وحفظها كفيديو حسب الطلب (VOD)، أرسل طلبًا إلى:

DELETE /<LIVE_VIDEO_ID>

عينة من الطلب

curl -i -X DELETE \
 "https://graph.facebook.com/v21.0/<LIVE_VIDEO_ID>"

عينة من الاستجابة

{
  success: true
}

البث المباشر دقيق الإطارات

يمكن أن يكون هناك تأخير بسيط قبل البث المباشر بينما نقوم بفك تشفير بيانات البث الأولية ومعالجة أي طلبات API مرتبطة. يمكن أن يجعل ذلك من الصعب على أصحاب المواهب الموجودين ضمن البث معرفة وقت بدء البث بالضبط. لتجنب هذه المشكلة، يمكن تعيين كائنات LiveVideo لقبول بيانات البث ولكن لن يتم البث المباشر للجماهير حتى يتم اكتشاف رسالة RTMP للبث المباشر ضمن بيانات البث نفسها. هذا يسمح لأي شخص قادر على معاينة البث بعرضه، بينما يتم السماح لبرنامج تشفير البث بالتحكم بدقة في كل من وقت بدء البث المباشر للجمهور وأول إطار يتم عرضه على الجمهور.

لتمكين البث المباشر دقيق الإطارات، أولاً يمكنك إنشاء كائن LiveVideo كما تفعل عادةً وقم بتعيين الحالة على PREVIEW. بمجرد إنشاؤه، يمكنك الاستعلام عن الكائن LiveVideo وطلب الحقل secure_stream_url مع الحقول المتداخلة التالية:

secure_stream_url.inband_go_live(require_inband_signal)

هذا سيعمل على تمكين البث المباشر دقيق الإطارات في الكائن LiveVideo وستستجيب API بعنوان URL آمن جديد للبث والذي يمكنك حينها البث عليه. يمكنك تجاهل عنوان URL الآمن للبث الأولي الذي تم إرساله إليك عند إنشاء الكائن LiveVideo لأول مرة.

سيظهر البث المباشر للجمهور بعد (1) تعيين حالة البث على LIVE (عبر استدعاء Graph API أو نشر المستخدم من Live Producer) و(2) يرسل برنامج التشفير رسالة RTMP البث المباشر.

بنية رسالة RTMP البث المباشر

حزمة AMF0 (النوع 0x12) تحتوي على:

  • السلسلة onGoLive
  • مصفوفة ECMA (نوع 0x08) تحتوي على زوج واحد للمفتاح والقيمة:
    • المفتاح: سلسلة (نوع 0x02) timestamp
    • القيمة: رقم (نوع 0x00): الطابع الزمني لأول إطار فيديو سيظهر للعامة

لمزيد من المعلومات، راجع مواصفات RTMP وAMF0.

عينة من الطلب

عينة من طلب تمكين البث المباشر دقيق الإطارات في LiveVideo.

curl -i -X GET \
   "https://graph.facebook.com/v21.0/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."

عينة من الاستجابة

عنوان URL آمن للبث لكائن LiveVideo مع تمكين البث المباشر دقيق الإطارات.

{
  "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...",
  "id": "LIVE_VIDEO_ID"
}

الحصول على بيانات رمز الخطأ

للحصول على بيانات رمز الخطأ المرتبطة بالبث، أرسل طلبًا إلى:

GET /<LIVE_VIDEO_ID>?fields=errors

ستستجيب API من خلال error code وtype وmessage وtimestamp.

عينة من الاستجابة

curl -i -X GET \
 "https://graph.facebook.com/v21.0/<LIVE_VIDEO_ID>?fields=errors"

عينة من الاستجابة

{
  "errors": {
    "data": [
      {
        "error_code": 1969004,
        "error_type": "stream",
        "error_message": "Video signal lost",
        "creation_time": "2018-12-05T23:58:52+0000"
      },
      {
        "error_code": 1969004,
        "error_type": "stream",
        "error_message": "Video signal lost",
        "creation_time": "2018-12-05T23:58:52+0000"
      },
      {
        "error_code": 0,
        "error_type": "info",
        "error_message": "Live Service received the video signal",
        "creation_time": "2018-12-05T23:58:02+0000"
      },
      {
        "error_code": 0,
        "error_type": "info",
        "error_message": "Live Service received the video signal",
        "creation_time": "2018-12-05T23:58:02+0000"
      }
    ]
  },
  "id": "{your-live-video-id}"
}

رموز أخطاء API فيديو البث المباشر الشائعة

error_subcodeملخص الخطأالوصف
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION

انتهاك حقوق نشر البث المباشر

تم إيقاف فيديو البث المباشر لديك نظرًا لأنه قد يحتوي على محتوى صوتي أو مرئي ينتمي إلى صفحة أخرى.

VIDEO__CREATE_FAILED

مشكلة في التحميل

حدثت مشكلة ولم يتم تحميل الفيديو. يُرجى إعادة المحاولة.

LIVE_VIDEO__DELETE_FAILED

لم يتم حذف فيديو البث المباشر

حدثت مشكلة ولم نتمكّن من حذف فيديو البث المباشر. يُرجى إعادة المحاولة.

LIVE_VIDEO__EDIT_API_NOT_ALLOWED

غير مسموح بالتعديل عبر API الفيديو أثناء البث المباشر

غير مسموح بتعديل فيديو البث المباشر باستخدام واجهة API تعديل الفيديو. استخدم معرف فيديو البث المباشر.

LIVE_VIDEO__LIVE_STREAM_ERROR

البث العام

حدث خطأ أثناء البث

LIVE_VIDEO__NOT_EXIST

فيديو البث المباشر غير موجود

لم يعد فيديو البث المباشر الذي تحاول الوصول إليه موجودًا في النظام بعد الآن.

LIVE_VIDEO__PRIVACY_REQUIRED

إعداد الخصوصية مطلوب

تحتاج إلى إعداد الخصوصية قبل بدء البث المباشر.

رموز أخطاء الأذونات

CodeSubcodeMessageTypeMitigation messaging

200

1363120

Permissions error

OAuthException

You’re not eligible to go live

Your profile needs to be at least 60 days old before you can go live on Facebook. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904

200

1363144

Permissions error

OAuthException

You’re not eligible to go live

You need at least 100 followers before you can go live from your profile. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904