문서가 업데이트되었습니다.
한국어로 번역이 아직 완료되지 않았습니다.
영어 업데이트됨: 5월 21일
한국어 업데이트됨: 2022. 12. 28.

Support for Live Video API for Facebook

FAQ

스트리밍 소프트웨어, 또는 RTMP 인코딩 소프트웨어는 RTMP 스트리밍 URL과 키를 가져와 Facebook으로 전송합니다. Facebook에서는 스트리밍 소프트웨어를 제공하지 않습니다. 대부분 라이브 스트리밍은 OBS(Open Broadcasting Software) 또는 Player.me를 사용할 수 있으며, 그 두 가지 모두 무료 버전을 제공합니다.

Live API는 바로 사용할 수 있습니다. 그러나 여러 개의 카메라와 그래픽으로 완전한 프로덕션 품질의 스트리밍을 생성하려면 앱 검수에 따라 1~2주 이상이 소요될 수 있습니다.

라이브 방송을 시작한 시점과 Facebook에 영상이 표시되는 시점에는 약 4~5초의 지연이 있습니다. 테스트(또는 공개) 페이지에서 영상이 재생되는 것을 보면 게시되었는지 알 수 있습니다.

If you are having issues with your live streams, please refer to our guides to make sure that you are using our API correctly. We also recommend reviewing our video specifications to ensure that your settings are best suited for a quality live stream. If you believe you have run into a bug, you can send it directly to our Bug Tool and an engineer will get back to you.

Yes you can! The second stream will likely get fewer inferred notifications than the first. Please refer to our Best Practices documentation for more information on how notifications work.

반드시 그렇지는 않습니다. 서로 다른 두 개(또는 그 이상)의 페이지에 스트리밍하고자 할 경우, Wowza나 Streamshark와 같이 이런 기능을 지원하는 인코더와 API가 있습니다. 하나의 인코더에서 다른 여러 페이지로 스트리밍할 수는 있지만 한 페이지로 스트리밍한 다음, 다른 페이지로 공유해 댓글, 반응, 시청자 수를 통합하는 것이 좋습니다.

Our default aspect ratio is 16x9, though we infer the aspect ratio from the stream. For complete specifications, see our reference.

라이브 방송 API를 통해 embeddable 매개변수를 사용하여 라이브 방송을 임베드할 수 있습니다.

POST /{live_video_id} 요청을 보내고 embeddable 매개변수를 true로 설정하세요. 라이브 방송을 생성할 때 필요한 것과 동일한 권한이 있는 페이지 액세스 토큰 또는 사용자 액세스 토큰을 사용하세요.

curl -i -X POST \
 "https://graph.facebook.com/{your-live-video-id}
   ?embeddable=true&access_token={your-access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{your-live-video-id}",
  new JSONObject("{}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{your-live-video-id}"
           parameters:@{ @"embeddable": @"true",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{your-live-video-id}',
  'POST',
  {"embeddable":"true"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{your-live-video-id}',
    array (
      'embeddable' => 'true'
    ),
    '{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

임베드된 HTML을 가져오려면 GET /{live_video_id}?fields=embed_html 요청을 보내세요. 라이브 방송을 생성할 때 필요한 것과 동일한 권한이 있는 페이지 액세스 토큰 또는 사용자 액세스 토큰을 사용하세요.

curl -i -X GET \
 "https://graph.facebook.com/{your-live_video_id}
   ?fields=embed_html
   &access_token={your-access-token}"
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/{your-live_video_id}",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "embed_html");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{your-live_video_id}"
           parameters:@{ @"fields": @"embed_html",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{your-live_video_id}',
  'GET',
  {"fields":"embed_html"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/{your-live_video_id}',
    '{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

샘플 응답

{ "embed_html": "<iframe src=\"https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fyourpage%2Fvideos%2F{your-page-id}%2F&width=0\" width=\"0\" height=\"0\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\"></iframe>", "id": "{your-live-video-id}" } 

아니요, 이는 정상 동작입니다. 현재는 모바일 웹에서 라이브 방송 시청을 지원하지 않으며, 동영상이 VOD(Videos On Demand) 상태여야 볼 수 있습니다. 그러나 다른 사이트에 임베드된 라이브 방송을 모바일 웹에서 보려고 하면 방송을 시청할 Facebook 앱으로 리디렉션됩니다.

이런 현상이 일어날 만한 이유는 몇 가지가 있습니다. 가장 일반적인 이유의 몇 가지 예시는 다음과 같습니다.

  1. 라이브 방송 백그라운드에 음악이 재생되고 있으면 저작권 위반으로 동영상이 중단될 수 있습니다. 이런 일은 라이브 방송 중이나 그 이후에 VOD 재생에서 발생할 수 있습니다.
  2. 사용자, 또는 사용자 페이지의 다른 저자가 라이브 방송을 삭제했을 수 있습니다. 라이브 방송이 수동으로 삭제된 경우에는 복원할 수 없습니다.
  3. 동영상이 IP 위반으로 자동 플래그 되었을 수 있습니다. 이런 문제가 발생하면 Facebook에서 동영상을 다시 제출하기 위한 링크가 포함된 이메일을 발송하여 동영상 삭제를 검토하고 Facebook 정책팀에서 검토할 수 있게 합니다.

라이브 방송 종료 신호를 보낸 뒤에도 방송이 실링이나 처리를 시작하지 않을 경우에 이런 현상이 발생합니다. end_live_video 매개변수를 포함해 POST 요청을 보냈는지 확인하세요. 이런 현상이 다시 발생하면 동영상 ID를 포함하여 버그 도구에 버그를 신고하세요.

Facebook이 오디오가 왜곡된 상태로 동영상 스트리밍을 수신하거나 프레임을 수신했지만 아직 방송에 맞게 다시 인코딩하지 않은 상태에서 오디오 왜곡이 발생할 수 있습니다. 이런 유형의 오류가 발생할 만한 원인으로는 사용한 비트 속도가 방송 엔드포인트와 Facebook 서버 간의 연결에서 감당할 수 있는 것보다 더 높은 경우가 있습니다. 위와 같은 현상이 발생하거나 패킷 손실이 있으면 동영상 또는 오디오 트랙의 일부가 올바르게 수신되지 않아 오디오 왜곡을 일으킬 수 있습니다.

라이브 방송을 제한된 대역폭으로 클라이언트에게 전달하거나 클라이언트에 방송을 라이브로 시청할 대역폭이 없을 경우 오디오/영상 싱크 문제가 발생할 수 있습니다. 또한, Facebook 서버에서 수신한 스트리밍의 싱크가 맞지 않으면 라이브 방송도 싱크가 맞지 않습니다. 레코딩 및 인코딩 하드웨어로 오디오와 동영상의 싱크가 맞지 않을 만한 잠재적인 위치를 확인하세요.

라이브 방송 API는 오디오가 필요합니다. 동영상만 스트리밍하려고 시도하면 스트리밍이 종료됩니다.

인코더 장애나 네트워크 연결이 불안정해서 라이브 피드가 중단될 수 있습니다. 이러한 경우가 발생하면 2~3분 내로 라이브 게시물에 생성한 원래 스트리밍 URL로 다시 연결해야 합니다. 그렇지 않으면 새 스트리밍 키와 URL을 생성해 라이브 스트리밍을 계속해야 합니다.

Yes, you can geo-gate (restrict who can see your video depending on the viewer's location). See Audience Targeting to learn how.

Yes, videos taken down for copyright violation can be restored. You should receive a notification that gives you the option to restore the video. However, if you do not take this action when you receive the notification, the video can no longer be restored.

아니요, 안타깝게도 현재는 라이브 방송을 홍보할 수 없습니다.

현재는 청각장애인용 자막을 생성하기 위한 엔드포인트가 없습니다. 그러나 라이브 방송이 끝난 후에 청각장애인용 자막을 추가하거나 서버로 라이브 방송을 스트리밍할 때 CEA-608 청각장애인용 자막 표준을 사용하여 추가할 수 있습니다.

종료된 라이브 방송(VOD 상태)에 캡션을 추가하려면 "제 페이지의 동영상에 캡션을 추가하는 방법은 무엇인가요?"라는 도움말 주제를 참조하세요. CEA-608 표준을 사용하여 캡션을 추가하려면 청각장애인용 캡션 가이드를 참조하세요.

타사 광고를 라이브 스트리밍에 포함하는 것은 Facebook의 라이브 방송 정책에 어긋납니다. 예를 들어 범퍼, 프리롤, 미드롤 또는 포스트롤을 포함하지 마세요.

We encourage all live broadcasts to exclusively contain live content so as to preserve the integrity of the viewer's experience. However, there are unique cases in which cutting to a pre-recorded clip makes sense, similar to how a news show might show previously recorded content on live TV.

Yes, refer to our Crossposting guide and How do I crosspost another Page's video? Help Center topic to learn how. Comments and reactions are shown only in the original Page.

라이브 지도에 표시되려면 POST /{live_video_id} 요청에서 place 매개변수를 사용하여 동영상의 위치를 설정해야 합니다.

영구 키를 재설정하려면 www.facebook.com/live/create로 이동해서 라이브 스트리밍 생성을 클릭하고, 영구 스트리밍 키 사용 확인란을 선택한 다음, 재설정 버튼을 클릭합니다.

Reporting Bugs

If you believe you may have found a bug in the Live API, please file a bug report in our bug tool and an engineer will take a look at it shortly. You can also search for existing bugs by API error codes, SDK methods, and more.

Report a Bug