Как загрузить видео в Brightcove через API с помощью PHP и Curl

Я пытаюсь загрузить видео в Brightcove, используя create_video метод из их API. Все их примеры показывают, как сделать это из изображения, которое было отправлено из формы. Мне нужно сделать это с изображениями, которые уже находятся на сервере, хотя. Я думаю, что я довольно близко, но я продолжаю получать следующую ошибку:

{"error": {"name":"RequiredParameterError","message":"create_video requires a filestream or remote asset references","code":303}, "result": null, "id": null}1

Вот мой код:

$data = array(
'method' => "create_video",
'params' => array(
'video' => array(
'name' => $video->filename,
'referenceId' => $video->id,
'shortDescription' => 'Sample video'
),
"token" => $this->config->item('brightcove_write_token'),
"encode_to" => "MP4",
"create_multiple_renditions" => "True",
),
'filename' => $video->filename,
'file' => FCPATH.'assets/uploads/submitted/'.$video->filename
);
$data_string = json_encode($data);

$url = 'http://api.brightcove.com/services/post';
$fields = array(
'json' => $data_string
);

//url-ify the data for the POST
$fields_string='';
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

1

Решение

В конце концов отсортировано, json должен был быть одним параметром, а затем file — другим, вот так:

$data = array(
'method' => "create_video",
'params' => array(
'video' => array(
'name' => $video->filename,
'shortDescription' => 'Sample video'
),
"token" => $this->config->item('brightcove_write_token'),
"encode_to" => "MP4",
"create_multiple_renditions" => "True"),
);
$data_string = json_encode($data);

$url = 'http://api.brightcove.com/services/post';
$fields = array(
'json' => $data_string,
'file' => new CURLFile(FCPATH.'assets/uploads/submitted/'.$video->filename)
);

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//execute post
$result = json_decode(curl_exec($ch));
1

Другие решения

Линия:

'file' => FCPATH.'assets/uploads/submitted/'.$video->filename

результаты в размещении file поле со значением, равным полному пути к имени вашего видеофайла.

Чтобы заставить cURL опубликовать его как фактическую загрузку файла, добавьте к пути префикс @ вот так:

'file' => '@' . FCPATH.'assets/uploads/submitted/'.$video->filename

Если вы используете PHP 5.5 или выше, вы должны использовать CURLFile объект для поля загрузки:

'file' => new CURLFile(FCPATH.'assets/uploads/submitted/'.$video->filename)
0