4

最新バージョンのGoogleクライアントAPI(v3、最新のチェックアウトソース)を介して大きな動画をYouTubeにアップロードしようとしています

私はそれをビデオに投稿していますが、それを機能させる唯一の方法は、ビデオ全体を文字列に読み取り、データパラメーターを介して渡すことです。

私は確かに巨大なファイルをメモリに読み込みたくありませんが、APIはこれを行う他の方法を提供していないようです。dataパラメータとして文字列を期待しているようです。以下は、私がビデオを投稿するために使用しているコードです。

$snippet = new Google_VideoSnippet();
$snippet->setTitle("Test title2");
$snippet->setDescription("Test descrition");
$snippet->setTags(array("tag1", "tag2"));
$snippet->setCategoryId("22");

$status = new Google_VideoStatus();
$status->privacyStatus = "private";

$video = new Google_Video();
$video->setSnippet($snippet);
$video->setStatus($status);

$videoData = file_get_contents($pathToMyFile);
$youtubeService->videos->insert("status,snippet", $video, array("data" => $videoData, "mimeType" => "video/mp4"));

データをチャンクで投稿したり、ファイル全体がメモリに読み込まれないように何らかの方法でデータをストリーミングしたりする方法はありますか?

4

1 に答える 1

4

このユースケースは以前はサポートされていなかったようです。Google API PHP クライアントの最新バージョンで動作するサンプルを次に示します ( https://code.google.com/p/google-api-php-client/source/checkoutから)。

if ($client->getAccessToken()) {
  $videoPath = "path/to/foo.mp4";
  $snippet = new Google_VideoSnippet();
  $snippet->setTitle("Test title2");
  $snippet->setDescription("Test descrition");
  $snippet->setTags(array("tag1", "tag2"));
  $snippet->setCategoryId("22");

  $status = new Google_VideoStatus();
  $status->privacyStatus = "private";

  $video = new Google_Video();
  $video->setSnippet($snippet);
  $video->setStatus($status);

  $chunkSizeBytes = 1 * 1024 * 1024;
  $media = new Google_MediaFileUpload('video/mp4', null, true, $chunkSizeBytes);
  $media->setFileSize(filesize($videoPath));

  $result = $youtube->videos->insert("status,snippet", $video,
      array('mediaUpload' => $media));

  $status = false;
  $handle = fopen($videoPath, "rb");
  while (!$status && !feof($handle)) {
    $chunk = fread($handle, $chunkSizeBytes);
    $uploadStatus = $media->nextChunk($result, $chunk);
  }

  fclose($handle);
}
于 2013-01-27T20:43:56.287 に答える