This example covers uploading & posting a video to a user's timeline with the Facebook SDK for PHP.
Before you upload, check out the video publishing options & requirements for the specific video endpoint you want to publish to.
$fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.2', ]); $data = [ 'title' => 'My Foo Video', 'description' => 'This video is full of foo and bar action.', 'source' => $fb->videoToUpload('/path/to/foo_bar.mp4'), ]; try { $response = $fb->post('/me/videos', $data, 'user-access-token'); } catch(Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); var_dump($graphNode); echo 'Video ID: ' . $graphNode['id'];
In SDK V5.1, we introduced chunked upload to improve the success rate for large video file uploading. There are two ways to get this functionality:
All in One call
$fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.3', ]); $data = [ 'title' => 'My Foo Video', 'description' => 'This video is full of foo and bar action.', ]; $path = '/path/to/foo_bar.mp4'; try { $response = $fb->uploadVideo('me', $path, $data, 'access-token'); } catch(Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); var_dump($graphNode); echo 'Video ID: ' . $graphNode['id'];
Chunking by self
$accessToken = $accessToken ?: $this->defaultAccessToken; $uploader = new FacebookResumableUploader($this->app, $this->client, $accessToken, 'v2.4'); $endpoint = '/'.$target.'/videos'; $file = $this->videoToUpload('/path/to/foo_bar.mp4'); $chunk = $uploader->start($endpoint, $file); do { // use existing implementation maxTriesTransfer or use your own code here $chunk = $this->maxTriesTransfer($uploader, $endpoint, $chunk, $maxTransferTries); } while (!$chunk->isLastChunk()); return [ 'video_id' => $chunk->getVideoId(), 'success' => $uploader->finish($endpoint, $chunk->getUploadSessionId(), $metadata), ];