Posted:
[この記事は ソフトウェアエンジニアの Steven Robertson(最近視ているのは "St. Lucia - Before The Dive." )による YouTube Engineer and Developers Blog の記事 "VP9: Faster, better, buffer-free YouTube videos" を元に、山口が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

ますます多くの人が、さらに高画質な動画を、より多くの画面で視聴するようになっているため、使用する帯域幅を増やさずに高解像度を提供できる動画フォーマットが必要になっています。そのため、私たちは YouTube 動画を VP9 でエンコードするようになりました。VP9 はオープンソースのコーデックで、他の一般的なコーデックが使用する帯域幅の半分で、ハイビジョンに加えて 4K (2160p)画質も再生できます。

VP9 は現在広く使われている中で最も効率のよい映像圧縮コーデックです。昨年 1 年間だけでも、YouTube ユーザーが再生した VP9 動画は 250 億時間を超えており、そのうち数十億時間分の動画は、VP9 による帯域幅効率の向上がなければ HD 画質で再生できなかったでしょう。VP9 の再生に対応する端末も増えているため、この技術を簡単に紹介したいと思います。

VP9 の仕組み

動画の情報量は膨大です。カメラセンサーが撮影に使うフォーマットと同じフォーマットで動画を保存するとしたら、そのファイルはとてつもない大きさになります。4K RAW 動画は最大 18,000 Mbps になるでしょう。現在の動画圧縮技術では、撮影されたシーンに含まれる特徴をコード化し、その特徴の動きと変化を追跡することによって、カメラセンサーではなく人間が見るように動画を捉えます。この圧縮はカメラセンサーによる録画に比べて数百倍効率がよく、おかげでビデオストリーミングが可能になりました。

VP9 はそれまでのコーデックと基本原理は同じですが、動画再生の品質をバイト単位で高めるために、WebM チームがさまざまな改良を施して完成させました。たとえば、VP9 のエンコーダーではよりくっきりした画像の特徴が優先して処理され、VP9 コーデックでどのような画像でも鮮明でブロックノイズなく、連続再生できるように非対称変換が用いられています。

Janelle Monaé を通信速度 600Kbps で VP9 と従来の H.264 変換で視聴した場合の質の違いを次の画像で比べてみてください。


高品質な動画視聴を実現

この新しいフォーマットは、すぐに視聴できる高品質でバッファ不要の動画という目標に、すべての人を一段階近づけます。つまり、従来は YouTube でバッファなく最大 480p までの動画しか見ることができなかったインターネット接続環境でも、VP9 のおかげで滑らかな 720p の動画が見られるようになりました。

帯域幅に制限があったり、データ使用量による従量課金プランを使ったりしている人にとっても VP9 はメリットがあります。ビットレートを約半分に削減することで、再バッファしたりかける費用を増やしたりすることなく、360p の画質を視聴できるユーザーの数が劇的に増加します。

4K 動画の世界へ

(本稿の著者を含め)常によりよい画質を求める人にとって、急成長しつつある 4K 動画への世界を開く鍵が VP9 です。実際、VP9 は動画サイズが大きくなると、これまでのコーデックよりもさらに効率がよくなるため、すでに多くの YouTube 視聴者が 4K コンテンツを途切れずにストリーミングしており、その数はますます増えています。YouTube にアップロードされた 4K 動画は昨年 1 年間で 3 倍になり、VP9 のおかげで将来を見据えたストリーミングの改善を計画できるようになっています。検索フィルタを使うと 4K 動画を探すことができます。また、このおすすめプレイリストもご確認ください。

VP9 を利用できる端末

Google パートナーの各種端末メーカーのおかげで、現在では Chrome ブラウザ、Android 端末(サムスン Galaxy S6 など)、テレビやゲーム機(ソニー、LG、シャープ)などで VP9 のデコーディングがサポートされています。2015 年以降、業界全体で 20 を超えるパートナー各社が VP9 に対応する製品を発売する予定です。

自身の VP9 コンテンツを制作する詳細については、FFMpeg encoding guideAdobe Adobe Premier WebM プラグイン をご確認ください。

Posted by Yoshifumi Yamaguchi - Developer Relations Team

Posted:
[この記事は Developer Programs Engineer の Kalyan Reddy による Google Apps Developer Blog の記事 "New Advanced services in Apps Script" を元に、北村が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Apps Script には、Gmail や Google ドライブなどの主なプロダクト向けのビルトインサービスが含まれています。そして最近、アドバンス Google サービスとしてデベロッパーから要望され続けてきたその他の API を追加しています。4 月 6 日に次の 7 つのアドバンスサービスを追加しました。
Apps Script の他のアドバンスサービスと同様に、使用前にサービスを有効にする必要があります。サービスを有効にすると、他の組み込み Apps Script サービスと同じように簡単に使うことができます。エディターはオートコンプリート機能を備えており、認証フローが自動的に処理されます。

Apps Activity のアドバンスサービスを使用して、Google ドライブにある特定のファイルを操作したユーザーのリストを取得する方法を表すサンプルを次に示します。
function getUsersActivity() {
  var fileId = 'YOUR_FILE_ID_HERE';
  var pageToken;
  var users = {};
  do {
    var result = AppsActivity.Activities.list({
      'drive.fileId': fileId,
      'source': 'drive.google.com',
      'pageToken': pageToken
    });
    var activities = result.activities;
    for (var i = 0; i < activities.length; i++) {
      var events = activities[i].singleEvents;
      for (var j = 0; j < events.length; j++) {
        var event = events[j];
        users[event.user.name] = true;
      }
    }
    pageToken = result.nextPageToken;
  } while (pageToken);
  Logger.log(Object.keys(users));
}
上記の関数では、AppsActivity.Activities.list() メソッドを用いて drive.fileIdsource といった必須パラメーターを送り、ページトークンを使ってアクティビティの全リストを取得しています。このメソッドで利用できるパラメーターの全リストについては、Apps Activity API の参照資料をご確認ください。

Posted by Eiji Kitamura - Developer Relations Team

Posted:
[この記事は Games Developer Advocate の Shanee Nishry による Android Developers Blog の記事 "Game Performance: Layout Qualifiers" を元に、萩倉が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

今日は OpenGL Shading Language (GLSL)を利用してゲームのパフォーマンスを最適化し、ワークフローを簡素化するベスト プラク ティスについてお伝えします。Layout Qualifiers は特にコードの確定性を高め、作業者の負荷を減らしてパフォーマンスを高めます。

簡単な頂点シェーダーに変更を加えてみましょう。

位置座標とテクスチャ座標を取得し、頂点の位置を変換し、フラグメント シェーダーにデータを渡す、基本的な頂点シェーダーの例を次に示します。
attribute vec4 vertexPosition;
attribute vec2 vertexUV;

uniform mat4 matWorldViewProjection;

varying vec2 outTexCoord;
void main()
{
  outTexCoord = vertexUV;
  gl_Position = matWorldViewProjection * vertexPosition;
}

頂点属性インデックス

画面にメッシュを描画するには、頂点バッファを作成し、頂点データ(ここでは位置座標、テクスチャ座標など)を登録する必要があります。

サンプル シェーダーで頂点データを次のように記述します。
struct Vertex
{
  Vector4 Position;
  Vector2 TexCoords;
};
これに従い、頂点シェーダーの属性を次のように定義します。
attribute vec4 vertexPosition;
attribute vec2  vertexUV;
glGetAttribLocation へのコールによって指定された名前の属性の処理が行われ、頂点データがシェーダー属性と関連づけられます。すると属性フォーマットが glVertexAttribPointer へのコールとともに記述されます。
GLint handleVertexPos = glGetAttribLocation( myShaderProgram, "vertexPosition" );
glVertexAttribPointer( handleVertexPos, 4, GL_FLOAT, GL_FALSE, 0, 0 );
GLint handleVertexUV = glGetAttribLocation( myShaderProgram, "vertexUV" );
glVertexAttribPointer( handleVertexUV, 2, GL_FLOAT, GL_FALSE, 0, 0 );
しかし、vertexPosition 属性をもつ複数のシェーダーがある場合、各シェーダーの glGetAttribLocation を呼び出すのはパフォーマンスを無駄にし、ゲームの読み込み時間が長くなります。

Layout Qualifiers を利用すると、頂点シェーダー属性の宣言を次のように変更できます。
layout(location = 0) in vec4 vertexPosition;
layout(location = 1) in vec2 vertexUV;
またそのためには、使用するシェーダーが GL ES 3.1 に対応していることをシェーダー コンパイラーに伝える必要があります。

以下のバージョン宣言を追加します。
#version 300 es
例示のシェーダーがどのようになるかを見てみましょう。変更点を太字で示します。
#version 300 es

layout(location = 0) in vec4 vertexPosition;
layout(location = 1) in vec2 vertexUV;

uniform mat4 matWorldViewProjection;
out vec2 outTexCoord;
void main()
{
  outTexCoord = vertexUV;
  gl_Position = matWorldViewProjection * vertexPosition;
}
OutTexCoord が varying 変数から out 変数に変わっていることもご確認ください。Varying キーワードはバージョン 300 es から動作が保証されなくなったため、シェーダーを機能させるには変更が必要です。

頂点属性の修飾子と #version 300 es は OpenGL ES 3.0 以降でサポートされています。デスクトップ版は OpenGL 3.3 でサポートされ、#version 330 が使用されています。

ここで位置属性が常に 0 で、テクスチャ座標が 1 になるとわかったら、glGetAttribLocationを使わずに次のようにシェーダー
フォーマットをバインドできます。
const int ATTRIB_POS = 0;
const int ATTRIB_UV   = 1;

glVertexAttribPointer( ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, 0, 0 );
glVertexAttribPointer( ATTRIB_UV, 2, GL_FLOAT, GL_FALSE, 0, 0 );
この簡単な変更でパイプラインを明確にし、コードをシンプルにして、起動の際の負荷を削減できます。

Android でのパフォーマンスの詳細については、Android Performance Patterns の動画シリーズをご覧ください。

Posted by Takeshi Hagikura - Developer Relations Team

Posted:
[この記事は Google Play Games team の Ben Frenkel による Android Developers Blog の記事 "Power Great Gaming with New Analytics from Play Games" を元に、荒木が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

先日のゲーム デベロッパー カンファレンス(GDC)で、Google は Play Games Player Analytics を発表しました。ゲームビジネスを管理し、ゲーム内のプレイヤーの行動を把握するために役立つ新しい無料レポートです。

Player Analytics はゲームをサービスとして運営するための鍵となるコンポーネントで、モバイルゲーム ビジネスを成功に導く上でますます欠かせないものになっています。成功している大規模デベロッパーをよく観察すると、次の 3 点で特に優れていることが理解できます。
  • 収益目標に向けたビジネスの管理
  • 展開しているビジネスで人気の高いところを特定し、最大限の効果を生むようなゲームのアップデートに継続して集中
  • ゲームにおけるプレイヤーの進行や消費の状況、ゲームをやめるタイミングなどについてアナリティクスを用いて把握

「プレイヤーの関わりと収益データが同時に分析され、専任スタッフのいない小規模のチームでは得られない質のデータを開発者に提供してくれます。Google Play Games Player Analytics の進化にともない、小規模な開発者がデータを根拠に自信をもってゲームに変更を加えられるようになり、それが実際の収益改善にもなります」

Kevin Pazirandeh
Zombie Highway 2 (ゾンビハイウェイ 2)の開発者
Player Analytics を用いることで、Google Play の開発者のエコシステム全体にこうした機能を提供したいと思います。スムーズで使いやすい機能を提供することで、開発者のみなさんがすばらしいゲームを創造するための貴重な時間を生み出すことができればと考えています。Zombie Highway 2 や Bombsquad の開発者をはじめとする小規模スタジオでは、Player Analytics がビジネスにおよぼすメリットと効果についてすでに気付きはじめています。

加えて、Google Play ゲームサービスと統合することで、さらに労力を費やすことなくこのアナリティクス機能を手に入れることができます。また、ほんの少し手間をかければ、Google Play ゲームサービスのイベントと統合してさらに別のレポートを使って効果を高めることもできます。ゲーム内の経済でバランスをとるために役立つ Sources and Sinks レポートなどが使用できます。

すでに Google Play ゲームサービスに統合しているゲームがあれば、すぐにGoogle Play デベロッパー コンソールで新しいレポートを確認してみてください。そうでない場合も、ゲームにほんの数行コードを追加する手間と同じくらい簡単に、Player Analytics を有効にしてGoogle Play ゲームサービスと統合できます。

収益目標に向けたビジネスの管理

日々の目標を選択し、Player Analytics における収益目標を設定します

Player Analytics では毎日のアプリ内購入による収益目標を選択し、下図のような目標と現状に関するレポートを使って目標に対する達成度を評価でき、ゲームのビジネスとしての健全性を評価するために役立てることができます。

詳細を見る

Business Drivers レポートのベンチマークを使用して人気の高い分野を特定

自分のゲームのパフォーマンスを他のゲームと比較してみたいと思ったことはありませんか。Player Analytics を使うと、同じカテゴリーの同種のゲームとあなたのゲームを比較して、あなたのゲームの状況を確認できます。

赤でハイライトされた部分はベンチマークを下回っていることを示します。矢印は評価指標が上昇したか下降したかを示します。 アイコンが表示されているセルをクリックすると、変化の背景についての詳細が表示されます。

詳細を見る

新しいユーザー コホートでプレイヤーの定着率を確認

Retention レポートでは、ゲームをインストールしてから 7 日間プレイを続けていたプレイヤーの割合を確認できます。

詳細を見る

Player Progression レポートでプレイヤーがどこで時間を費やし、苦労し、ゲームをやめているかを確認

Player Progression ファンネルは、プレイヤーのアチーブメントの数を測定することで、プレイヤーがどこで苦労し、どこでゲームからはなれたかを特定し、ゲームの内容を調整して最終的には定着率を高めるために役立てることができます。アチーブメントを追加すればするほど、レポートによる追跡が正確になります。

詳細を見る

Sources and Sinks レポートでゲーム内経済を管理

Sources and Sinks レポートは、プレイヤーがリソースを購入(獲得)する速度と使用する速度の関係を示すことで、ゲーム内経済でバランスをとるために役立てることができます。
たとえば、BombSquad を個人で開発した Eric Froemling は Sources and Sinks レポートを利用して、プレイヤーがチケットを購入する場面と使用する場面のバランスをとりました。
Player Analytics に関する Eric の経験の詳細については、Eric が最近投稿したブログで詳しく確認できます。

Sources and Sinks レポートを有効にするには、Google Play ゲームサービスのイベントを作成して統合する必要があります。イベントでプレミアム通貨の増加(獲得した金貨など)とプレミアム通貨の減少(アプリ内でのアイテム購入に使った金貨など)を追跡します。


Posted by Yuichi Araki - Developer Relations Team

Posted:
[この記事は YouTube for Developers チーム、Ibrahim Ulukaya による YouTube Engineering and Developers Blog の記事 "Bye-bye, YouTube Data API v2" を元に、山口が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

2015/05/15 更新: 本日よりYouTube Data API v2のビデオフィードサポートビデオしか返さないようになりました。

更新: コンテンツの報告開発者向け動画検索の API のローンチにともない、 Data API v3 はただちに閉鎖予定の Data API v2 からの移行予定のすべての機能のサポートが完了します。


コメント字幕RSS プッシュ通知などの最新バージョンを含め、間もなく使用できなくなる Data API v2 から移行が予定されたほぼすべての機能が Data API v3 で使用できます。コンテンツの報告機能のみがまだ移行されていませんが、数日中に適用される予定です。新しい API では、YouTube の最新バージョンから多くの機能が移行されており、ユーザーがあらゆる画面上で最適な形で YouTube を楽しめるようになります。(訳注:翻訳時現在では YouTube API v2 の使用はできなくなっており、また更新にあるようにコンテンツの報告の機能は実装されました。)

振り返ると、2014 年 3 月に、Data API v2 が 2015 年 4 月 20 日に終了し、その後すぐに使用できなくなる旨を公表しました。移行をサポートするため、2014 年 9 月に移行ガイド提供し、v3 機能の更新情報について定期的にお伝えしてきました。


サービス終了プラン

Data API v2 をまだご使用の場合、今日からユーザーのビデオ フィード上部にビデオを表示し、今回の新規リリースでどのような影響があるかについて告知をはじめました。これ以外については、アプリは普段と変わらず機能します。
5 月のはじめには、Data API v2 動画に対して呼び出しを行うと、4 月 20 日に実装された警告動画のみが表示されるようになります。v2 API を使用しているアプリでは、警告動画以外は表示できなくなります。影響を受けるデバイスについては、youtube.com/devicesupport をご覧ください。

5 月下旬には、v2 API に対して、コメントと字幕を除く呼び出しを行うと、HTTP ステータスコード 410 Gone が表示されるようになります。gdata.youtube.com の代わりに eol.gdata.youtube.com でアプリケーションを指定して、このステータスコード表示に対するアプリケーションの動作をテストできます。すみやかにアプリを移行する必要がありますが、使用できなくなることを回避するため、2015 年 7 月末まで Data API v2 で機能し続ける予定です。


移行方法

Data API v3 で使用するため特定の機能をアップデートする方法についての最新の手順については、良くある質問や移行ガイドをご覧ください。移行ガイドでは、Data API v2 で廃止され、Data API v3 では実装されない機能の一覧を確認できます。新たに移行されるコメント、字幕、コンテンツ報告などの機能について、最新の手順も記載されています。

Posted:
[この記事は SYN、SYN-ACK、ACK (Alyssa Wilk、Ryan Hamilton、Ian Swett) による Chromium Blog の記事 "A QUIC update on Google’s experimental transport" を元に、北村が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google では昨年、最新のインターネットに対する UDP ベースのトランスポート プロトコル、QUIC を公開しました。 それから 四半期、QUIC を使用した Google サービスへのトラフィックを徐々に増やし、規模を拡大しながら QUIC のパフォーマンスを分析してきました。現在までのところ結果は良好で、QUIC の低遅延接続確立、優れた輻輳制御や切断時の接続回復といった機能によって、TCP よりも優れたパフォーマンスを示し続けています。

ウェブ検索などの待ち時間に影響を受けるサービスにとって、ほぼ同時に送受信接続を確立できることは最大のメリットです。これまでの標準では、ウェブ ブラウジングのセキュアな通信は TCP + TLS を使用して行うものでした。この形式では、セキュリティを確保するため、ブラウザが実際にウェブページを要求するまでにサーバーと 2 ~ 3 回の送受信を行う必要がありました。QUIC ではあらかじめクライアントから所定のサーバーと通信を行うことで送受信の回数を減らし、ウェブページ読み込みの迅速化を実現しています。データによると、実に 75% もの接続が QUIC のゼロ・ラウンドトリップ機能によって恩恵を受けることができると示されています。接続が事前に確立される Google 検索のような効率化されたサイトですら、QUIC によってページの読み込み時間が 3% ほど向上することが示されています。
QUIC ではさらに、輻輳制御と切断回復機能の向上という多大な利点があります。パケットの再送信時に、パケット シーケンス番号が再利用されることはありません。これによって不明瞭なパケット受信が発生せず、再通信タイムアウトを回避できます。結果として、接続状況が良好でない状況において QUIC は TCP よりも優れた接続を行うことができます。最も遅い 1% の接続状況においても、Google 検索ページの読み込みを大幅に削減できます。 こうしたメリットは、Youtube などの動画サービスではより顕著になります。QUIC 接続での動画視聴の際に、再バッファ時間が 30% 削減されるという報告もなされており、視聴時間が短縮されることで、繰り返し、より多くの動画を視聴できるようになっています。

現在、Chrome から Google サーバーへのおよそ半数のリクエストが QUIC で行われており、今後も QUIC のトラフィックを増やしていく方針です。最終的には QUIC を、Chrome とモバイルアプリの双方で、Google のクライアントから Google のサーバーへの通信規格のデフォルトにする予定です。インターネット標準として IETF に QUIC を正式に提案する予定ですが、その前にワイヤーフォーマットを変更したり、リファレンス実装を SPDY - QUIC から HTTP2 - QUIC に更新したりするなど、いくつかの解決すべき点があります。今後数か月で、応答確認時のオーバーヘッドを低減しサーバー側での拡張性を高め、前方誤り訂正や輻輳制御の向上、マルチパス接続のサポートの追加などに取り組む予定です。

状況を確認したり実際に試すには、コードこちらのページをご確認ください。また、proto-quic@chromium.orgにもご参加ください。一歩ずつ、インターネットを改良し続けます。

Posted by Eiji Kitamura - Developer Relations Team

Posted:
[この記事は、 Google Cloud Platform Japan Blog とのクロスポストです。]


2015 年 6 月 18 日(木) 東京六本木、アカデミーヒルズにおいて、Google Cloud Platform のグローバル イベント、Next を開催することとなりました。

Next は、Google Cloud Platform にフォーカスし、Google のテクノロジーやサービスの最新情報と活用方法、そしてトレーニングを提供するイベントです。

午前中の基調講演では、Google Cloud Platform 事業責任者が来日し Google のクラウド最新情報をご紹介します。午後からはデベロッパー向けセッションと IT 担当者向けのセッションに別れ、コンテナ技術、リアルタイム モバイル開発、データ分析や運用など様々なテーマのプレゼンテーションをお届けします。

さらに "Hands-on Lab" として、実際に Google Cloud Platform に触れ、その場で Google スタッフに質問できるブースもご用意。

デベロッパーや IT 担当者の皆様、Google のクラウド テクノロジーがどう今のサービスやツールに活かせるのかを知りたい方、ぜひご参加ください。基調講演はライブ配信も行います。

概要
【日時】6月18日(木)11:00~17:30 (10:00 受付開始)
【会場】六本木アカデミーヒルズ
    東京都港区六本木6-10-1 六本木ヒルズ森タワー49F
【参加費】無料

【参加登録】詳細、お申し込みはこちら

皆さまのご来場をお待ちしております!

Posted by Kazunori Sato - Developer Relations Team