为live event设置contentDetails时出错--Youtube Live API v3

时间:2014-02-08 20:01:46

标签: api post youtube youtube-api youtube-livestreaming-api

我一直在使用php成功创建yt直播活动。由于我尝试禁用嵌入,因此收到以下错误:

["Error calling POST https:\/\/www.googleapis.com\/youtube\/v3\/liveBroadcasts?part=snippet%2Cstatus: (400) contentDetails"]

代码如下:

                            $client = new Google_Client();
                            $client->setClientId($OAUTH2_CLIENT_ID);
                            $client->setClientSecret($OAUTH2_CLIENT_SECRET);


                            $client->refreshToken($tokens[0]['google_oauth_refresh_token']);


                            // Define an object that will be used to make all API requests.
                            $youtube = new Google_Service_YouTube($client);



                            // Check to ensure that the access token was successfully acquired.
                            if ($client->getAccessToken()) {    

                                            // die();


                                // Create an object for the liveBroadcast resource's snippet. Specify values
                                // for the snippet's title, scheduled start time, and scheduled end time.
                                $broadcastSnippet = new Google_Service_YouTube_LiveBroadcastSnippet();
                                $broadcastSnippet->setTitle($_POST['title']);
                                $broadcastSnippet->setDescription($_POST['description']);
                                $broadcastSnippet->setScheduledStartTime(date('c', strtotime($_POST['start_date']))); //'2034-01-30T00:00:00.000Z');
                                $broadcastSnippet->setScheduledEndTime(date('c', strtotime($_POST['start_time']))); // '2034-01-31T00:00:00.000Z');

                                $contentDetails = new Google_Service_YouTube_LiveBroadcastContentDetails();
                                $contentDetails->setEnableEmbed(false);
                                // debug($contentDetails);

                                // Create an object for the liveBroadcast resource's status, and set the
                                // broadcast's status to "private".
                                $status = new Google_Service_YouTube_LiveBroadcastStatus();
                                // $status->setPrivacyStatus('public');
                                $status->setPrivacyStatus('private');
                                // $status->setPrivacyStatus('unlisted');

                                // Create the API request that inserts the liveBroadcast resource.
                                $broadcastInsert = new Google_Service_YouTube_LiveBroadcast();
                                $broadcastInsert->setContentDetails($contentDetails);
                                $broadcastInsert->setSnippet($broadcastSnippet);
                                $broadcastInsert->setStatus($status);
                                $broadcastInsert->setKind('youtube#liveBroadcast');

                                // Execute the request and return an object that contains information
                                // about the new broadcast.
                                $broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status', $broadcastInsert, array());

                                // Create an object for the liveStream resource's snippet. Specify a value
                                // for the snippet's title.
                                $streamSnippet = new Google_Service_YouTube_LiveStreamSnippet();
                                $streamSnippet->setTitle('Transcoder - '.$_POST['title']);

                                // Create an object for content distribution network details for the live
                                // stream and specify the stream's format and ingestion type.
                                $cdn = new Google_Service_YouTube_CdnSettings();
                                $cdn->setFormat("720p");
                                $cdn->setIngestionType('rtmp');

                                // Create the API request that inserts the liveStream resource.
                                $streamInsert = new Google_Service_YouTube_LiveStream();
                                $streamInsert->setSnippet($streamSnippet);
                                $streamInsert->setCdn($cdn);
                                $streamInsert->setKind('youtube#liveStream');

                                // Execute the request and return an object that contains information
                                // about the new stream.
                                $streamsResponse = $youtube->liveStreams->insert('snippet,cdn',
                                    $streamInsert, array());

                                // debug($streamsResponse);

                                // Bind the broadcast to the live stream.
                                $bindBroadcastResponse = $youtube->liveBroadcasts->bind(
                                    $broadcastsResponse['id'],'id,contentDetails',
                                    array(
                                        'streamId' => $streamsResponse['id'],
                                    ));

1 个答案:

答案 0 :(得分:2)

在这一行:

$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status', $broadcastInsert, array());

应该是:

$broadcastsResponse = $youtube->liveBroadcasts->insert('snippet,status,contentDetails', $broadcastInsert, array());

您正在设置contentDetails的嵌入属性,但不包括在请求中。 如果您阅读了错误,那就是抱怨。