고급 사용

공개 대상 타게팅

특정 공개 대상을 라이브 방송 시청에 포함하고 라이브 방송 시청에서 제외합니다.

타겟 대상 생성

노드

시작하기 전에

페이지에서 라이브 방송을 하려면 다음이 필요합니다.

그룹에서 라이브 방송을 하려면 다음이 필요합니다.

예시

POST /id 요청을 보내세요. 이 경우 id는 LiveVideo ID로 지정하고 targeting 필드와 매개변수를 설정합니다.

curl -i -X POST \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?targeting={age_min:17, geo_locations:{countries:["US","CA","MX"]}}
    &access_token=ACCESS_TOKEN"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/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:@"/LIVE_VIDEO_ID/"
           parameters:@{ @"targeting": @"{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID/',
  'POST',
  {"targeting":"{age_min:17, geo_locations:{countries:[\"US\",\"CA\",\"MX\"]}, excluded_zipcodes:{\"key\":\"US:10001\"}}"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/LIVE_VIDEO_ID/',
    array (
      'targeting' => '{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}'
    ),
    '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();

샘플 응답

{
  "targeting": {
    "age_max": 65,
    "age_min": 17,
    "geo_locations": {
      "countries": [
        "US",
        "CA",
        "MX"
      ]
    }
  },
  "id": "LIVE_VIDEO_ID"   
}

타겟 대상 정보 가져오기

노드

시작하기 전에

페이지에서 라이브 방송을 하려면 다음이 필요합니다.

그룹에서 라이브 방송을 하려면 다음이 필요합니다.

  • 그룹 관리자가 요청한 사용자 액세스 토큰

예시

GET /id 요청을 보내세요. 이 경우 id는 LiveVideo ID로 지정하고 targeting 필드를 설정합니다.

GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/LIVE_VIDEO_ID",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "targeting");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID"
           parameters:@{ @"fields": @"targeting",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID',
  'GET',
  {"fields":"targeting"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/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();
curl -i -X GET \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?fields=targeting&access_token=ACCESS_TOKEN"

샘플 응답

{
  "targeting": {
    "age_max": 65,
    "age_min": 17,
    "geo_locations": {
      "countries": [
        "US"
        "CA",
        "MX"
      ]
    }
  },
  "id": "LIVE_VIDEO_ID"       
}

프레임 동기화 라이브 방송

라이브 방송을 시작하기 전에 첫 스트리밍 데이터를 디코딩하고 관련 API 요청을 처리하는 시간이 있으므로 다소 지연이 발생할 수 있습니다. 따라서 방송에 출연하는 사람이 정확히 언제 방송이 시작되었는지 알기 어렵습니다. 이 문제를 해결하려면 LiveVideo 개체가 스트리밍 데이터를 수락하되 스트리밍 데이터 자체에서 라이브 방송 RTMP 메시지가 탐지될 때까지 공개 대상에게 방송되지 않도록 설정합니다. 그러면 방송을 미리 볼 수 있는 사용자라면 누구나 방송을 시청할 수 있으며, 스트리밍 디코더가 공개 대상에게 방송을 송출하는 시점과 공개 대상이 첫 프레임을 보는 시점을 모두 정확하게 제어할 수 있습니다.

프레임 동기화 라이브 방송을 활성화하려면 먼저 평소와 같이 LiveVideo 개체를 만들고 상태를 PREVIEW로 설정합니다. LiveVideo 개체를 만든 후 쿼리하고, 다음 중첩 필드를 포함하여 secure_stream_url 필드를 요청합니다.

secure_stream_url.inband_go_live(require_inband_signal)

이렇게 하면 LiveVideo 개체에서 프레임 동기화 라이브 방송이 활성화되고 API가 새로운 보안 스트림 URL로 응답합니다. 그런 다음 스트리밍을 시작하면 됩니다. LiveVideo 개체를 처음 만들었을 때 전송된 첫 보안 스트림 URL은 무시해도 됩니다.

라이브 방송은 (1) 방송 상태가 LIVE로 설정되고(그래프 API 호출 또는 Live Producer의 사용자 게시 사용), 또한 (2) 인코더가 라이브 방송 RTMP 메시지를 보낸 후에 시작되고 공개 대상에게 표시됩니다.

라이브 방송 RTMP 메시지 구조

다음을 포함하는 AMF0 패킷(유형 0x12):

  • 문자열 onGoLive
  • 단일 키-값 쌍을 포함하는 ECMA 배열(유형 0x08):
    • 키: 문자열(유형 0x02) timestamp
    • 값: 숫자(유형 0x00): 공개적으로 표시할 첫 영상 프레임의 타임스탬프

자세한 내용은 RTMPAMF0 사양을 참조하세요.

샘플 요청

LiveVideo에서 프레임 동기화 라이브 방송을 활성화하기 위한 샘플 요청입니다.

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

샘플 응답

프레임 동기화 라이브 방송을 활성화한 LiveVideo 개체의 보안 스트림 URL입니다.

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

방송하기 대화 상자

2021년 5월 25일부터 방송하기 대화 상자가 사용 중단됩니다. 자세한 내용은 블로그 게시물을 참조하세요.

Facebook에서는 Live API 통합 과정을 최대한 간소화하는 플러그인을 개발했습니다. 이제 Facebook으로 인증하고, 라이브 스트리밍을 미리 보고, 방송을 시작하기 전에 팝업창으로 라이브 스트리밍을 설명할 수 있습니다. 이 대화 상자는 클라이언트 측에서 스트리밍하는 경우에 가장 적합합니다. 백엔드 통합에서는 계속 API를 직접 사용해야 합니다.

요구 사항

다음 코드를 넣어서 POST 응답을 보낼 위치를 결정하는 관리 기능을 사용하여 팝업창을 초기화합니다.

<button id="liveButton">Create Live Stream To Facebook</button>
<script>
document.getElementById('liveButton').onclick = function() {
  FB.ui({
    display: 'popup',
    method: 'live_broadcast',
    phase: 'create',
}, function(response) {
    if (!response.id) {
      alert('dialog canceled');
      return;
    }
    alert('{your-stream-url}:' + response.secure_stream_url);
    FB.ui({
      display: 'popup',
      method: 'live_broadcast',
      phase: 'publish',
      broadcast_data: response,
    }, function(response) {
    alert("video status: \n" + response.status);
    });
  });
};
</script>
매개변수 설명

display

popup, iframe

웹페이지에 대화 상자가 열리는 방식입니다.

phase

create, publish

create 단계의 대화 상자를 사용하면 동영상을 업로드하기 위한 스트리밍 URL을 가져올 수 있습니다. publish 단계의 대화 상자는 미리 보기를 제공하며 방송하기 버튼이 있습니다. required

broadcast_data

API 또는 create 단계에서 반환되는 응답 object입니다.

publish 단계의 경우 이 매개변수는 required입니다.

Create 단계 팝업창에서 라이브 스트리밍할 대상(예: 사용자가 관리하는 임의의 페이지 또는 그룹)을 선택합니다. POST 응답에는 stream_urlsecure_stream_url 필드가 포함됩니다. 두 필드 모두 서버 URL과 스트림 키로 나눌 수 있습니다.

서버 URL은 stream_url의 앞쪽 반입니다. rtmp://rtmp-api.facebook.com:80/rtmp/

스트리밍 키는 stream_url의 뒤쪽 반입니다. 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

응답 필드단계설명

id

create, publish

방송 동영상의 ID입니다.

stream_url

create

라이브 스트리밍을 업로드하는 데 사용되는 스트리밍 서버와 스트리밍 키를 포함한 RTMP URL입니다.

secure_stream_url

create

보안 프로토콜이 포함된 스트리밍 URL인 RTMPS URL입니다.

status

publish

방송 상태를 나타내는 문자열 값입니다.

픽셀 코드에는 stream_url을 사용한 alert 호출이 있습니다. 클라이언트는 stream_url을 사용하여 스트리밍을 시작해야 합니다. 스트리밍이 시작하자마자 publish 단계 팝업창에 방송 미리 보기가 표시됩니다. 이 대화 상자를 사용하면 요청의 공개 범위 매개변수를 조정하지 않고도 공개 범위 설정을 선택하고 라이브 방송의 설명, 제목 및 주제 태그를 설정할 수 있습니다.

참고:publish 팝업창이 오프라인 상태인 경우 방화벽이 RTMP를 차단하지 않고 브라우저의 광고 차단 소프트웨어가 해제되어 있는지 확인하세요.

방송하기를 클릭하면 대화 상자가 닫히고 선택한 위치에 따라 페이지나 그룹에 라이브 스트리밍이 몇 초 이내로 재생됩니다.

메타데이터는 프레임 동기화 시작 시간에 맞추어 라이브 방송의 첫 프레임에 입력됩니다. 인코더에서 카운트다운을 구현하여 퍼블리셔에게 동영상의 정확한 시간을 알려줍니다. Facebook 인터페이스에서 동영상을 시작하고 중지할 수도 있습니다.