2016-02-01 1 views
1

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

{"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 должен быть один параметр, а затем файл должен был быть другим, как так:

$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)); 
0

Линия:

'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

Спасибо за ваш ответ. Я все равно получаю ту же ошибку, хотя – geoffs3310

+0

Я не могу найти их документацию по API, поэтому не знаю, как действовать. Строка данных, закодированная JSON, фактически сделает поле загрузки неработающим (я только заметил, что после того, как я разместил свой ответ). Означает ли их API, что вы предоставите URL-адрес видео, которое они потом загружают? – drew010

+0

Это URL-адрес API-документа http://docs.brightcove.com/en/video-cloud/media/references/reference.html#Video_Write – geoffs3310

 Смежные вопросы

  • Нет связанных вопросов^_^