AppleはJPEG、JSON、およびを使用してビデオをエンコードします



unlock_001.jpgファイルのフラグメント



AppleはWebテクノロジーの開発に豊富な経験を持っていますが、今ではとんでもない状況にあります。 iPhoneのデザインイノベーションの説明が記載されたページにアクセスすると、奇妙なことがわかります。iPhoneのロック解除アニメーションを含むビデオは、いくつかの異常なJPEGファイルを使用してエンコードされています。



疑問が生じます。これはどのように機能するのでしょうか? 標準の<video>タグを使用できるのに、なぜこのようなトリックに頼るのでしょうか。



説明は簡単です。 iPhoneでは、<video>タグは全画面モードでのみ機能するため、Appleはこのタグを使用してページにビデオを挿入することはできません。 さらに、AppleはH.264ビデオのみを使用しており、すべてのブラウザーがそれをサポートしているわけではありません。これは、プロモーションページとしては受け入れられません。



Apple は、アニメーションの各フレームにJPEGを作成することでこの問題を解決していました。その結果、2秒のアニメーションが5 MBを占有していました。 これで最適化が完了しました。サイズがわずか1 MBのiPhone 5アニメーションは、5つのファイルで構成されています。



www.apple.com/iphone/design/images/unlock/unlock_manifest.json

www.apple.com/iphone/design/images/unlock/unlock_keyframe.jpg

www.apple.com/iphone/design/images/unlock/unlock_001.jpg

www.apple.com/iphone/design/images/unlock/unlock_002.jpg

www.apple.com/iphone/design/images/unlock/unlock_endframe.jpg



操作アルゴリズムはac_flow.jsファイルに記述されており、トラフィックを節約するために画像の一部のみが更新されるという事実に基づいています。 unlock_001.jpg



およびunlock_002.jpg



は、これらの更新されたイメージフラグメントが含まれていunlock_002.jpg



unlock_manifest.json



ファイルには、パーツを配置するための座標が含まれています。 個々のフラグメントのJPEGアーティファクトが画像全体を損なうのを防ぐために、AppleはJPEGコーデックと同様に8x8ピクセルブロックを使用します。 上記のファイルunlock_001.jpg



およびunlock_002.jpg



は、実際には、8x8ブロックの連続ストリームとして使用されます。 ストリームの処理手順はbase64形式で個別に示されており、デコードする必要があります。







各命令は5バイトで構成され、最初の3バイトはキャンバス内のターゲットの座標を示し、最後の2バイトはそこに配置するブロック数を示します。 たとえば、 AAxAC



命令は、2つのブロック(AC)を取得して位置49(AAx)に配置する必要があることを意味します。



ビデオを組み立てるためのこのようなアルゴリズムでは、ブロックを再利用する方法はありませんが、マニフェスト自体は非常に簡潔です。



dbloom経由



All Articles