ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
HLSにおけるメディアのギャップレスな遷移
エピソード、曲、シーン、個々のリソース間をシームレスに遷移するストリーミングメディアコンテンツを作成する方法を紹介します。ギャップレスHLS再生では、複数のコンテンツを瞬時につなぎ合わせて、カスタマイズされたワークアウトの作成、インタラクティブなコンテンツのデザイン、説得力のあるストーリーの展開などが可能です。音楽のストリーミング、イベントの録画、録画済みのビデオに忠実な連続性を提供し、App内で魅力的な視聴体験を提供する方法を紹介します。
リソース
関連ビデオ
WWDC21
-
ダウンロード
♪ (HLSにおけるメディアの ギャップレスな遷移) こんにちは このセッションは HLSでメディアをギャップレスに 再生する方法についてです 私はAppleの ストリーミングメディアチーム のサイモンです AVQueuePlayerを 活用していますか? またはご自分のAppで HLSアイテムの「次に観る」 といったシームレスな再生を ご自分の顧客に 提供したいですか? メディアをプロデューサーが 望んだ通りに 連続再生させたいですか? そして私たちはメディアを もっと長く楽しむ経験を提供し お客様をサポート できるでしょうか? もしそうならこのセッションは 皆様にぴったりです HLSアイテムをギャップレスに 再生する方法を学べます 今回のテーマはこちらです この新機能で提供可能な 魅力的な メディア体験について いくつか見ていきます メディアオーサリング 必要条件の詳細を説明し 成功事例のハイライトと共に プレイリストの例をご紹介し 最後にデモを確認します AVQueuePlayerで HLSのAVPlayerItems間で 遷移を行うことには ストレートなメリットがあります 今まで 再生には 若干不快な部分がありました 音声や視覚的要素 がぶちぶち切れたり 不確定なバッファリング エラーが発生したりなどです アイテムをギャップレスに 再生するようにすると Appが顧客とコンテンツの間に 提供するつながりを 維持することができます 「ダイヤルを触るな」 という言葉を思い出すでしょうか 1つのエピソードの終わりから もう1つの初めまで シームレスに再生される エピソード風メディアを 作ることができます ギャップレス再生は 私たちがずっと楽しんできた シームレスでトラックからトラック へのアルバム体験の 再現を可能にします これにより ライブではどうであったかや 制作者の意図を より正確に再現します 切れ目や中断のない 体験を提供できます リニアなプログラム再生も 良いのですが 視聴者をあるタスクや シーンに誘導し 次へと滑らかに誘導する 動的でインタラクティブな 体験も提供できます 例えばワークアウトと 他の教育メディアの間に 遷移があるとします 今回可能になったギャップレス 再生では オーディオビジュアルシーケンス の場面を 連続性を正確に保ちながら プログラム的につなげられます つまり ワークアウトに 繰り返しや クールダウンを自然に 加えられます これを全て HTTPでのアダプティブ ビットレートメディア ストリーミングの利点を享受しつつ 実現できるのです もちろん私たちも 活用しています! Apple Musicの新機能は HLS経由でコンテンツを配信し 曲と曲をギャップレスに 配信できるようにしています この機能を皆様や 皆様の顧客に提供できて とても嬉しいです ではHLSコンテンツで 同じアイテム再生に 作用するために統合が必要な オーサリング必要条件を 詳しく見ていきましょう HLSマニフェストで 連続アイテム間で オーディオ形式の連続性を 実現するバリアント を提供することで ギャップレス再生が 可能になります コンテンツでは 次のオーディオメディア特性 に一致するバリアントの 提供が必要です FairPlay Streamingや Streamタグのコーデック属性 が指定する オーディオコーデック そしてMediaタグの Channels属性が指定する チャネルカウントを 使用することです オーディオレンディション を異なるサンプルレートや ビット深度で 提供する場合 ギャップレス再生が 阻害されるかもしれません マッチの提供や 連続性の維持をする というアドバイスはこうした 特性にも当てはまります つまり ギャップレス再生を行うには 連続でキューに 追加される 各バリアントに相当するオーディオ メディアを提供しましょう 最後に メディアをオーサリングする際には CMAF(共通メディア アプリケーションフォーマット) オーサリングガイダンスに 従ってください このMPEG規格では プライミングの存在と 残りのフレーム を知らせるための 編集リストを使うことを 特に推奨されています ここで単純な 例を見てみましょう 2つの候補アイテムの マスターバリアント プレイリストを検証します このHLSマニフェストで 4つのオーディオビジュアル バリアントを挙げました 720pバリアントペアと 1080pバリアントのペアです 各ペアには High-Efficiency Advanced Audio Codec HE_AAC をエンコードしたバリアントと AAC Low Complexityまたは AAC_LCのものを挙げています この例では 再生状態で HE_AACとペアの720p動画の 選択がサポートされているとします 再生が終わりに近づくと AVQuePlayerが少なくとも最初は 連続するアイテムの中で 似たようにエンコードされた バリアントを選択します これは今度は ネットワーク状態で より高品質な層が サポートされていても同じです ギャップレス再生中は よどみなく再生することが 高品質を選ぶことより 優先されています 再生が進むと アダプティブビットレート 発見的問題解決法 が評価され その状態が続くと プレイヤーがより高品質なものへと シームレスに切り替えます 素晴らしい! さて 2つ目のアイテムに HE_AACを施さなかったとします その場合 AVQueuePlayerは オーディオ連続性を 維持できず 維持できませんが 再生状態から 最も適切な初期 バリアントを 自由に選択できます ギャップレス再生対応の コンテンツを オーサリングしたとしましょう その場合 AVQueuePlayerの 使い方を 思い出さなければなりません ここには短い コードスニペットがあります 2つのAVPlayerItemを作成し 順番に再生の前に キューに入れます アイテムが2つの異なる URLからソースしていますね AVQueuePlayer 作成後 「InsertAfter」メソッドを 使って キュープレイヤーに 目的のシーケンスを通知します 後は「play」 をメッセージするだけです
ここでお伝えしたい 上級テクニックを使うと 単一アセットを 使えるようになります このアセットからは 複数のAVPlayItemsを 例示化できます 異なるインポイントと アウトポイントの定義は 各AVPlayerItemで AVQueuePlayerで キューに加える前に行えます AVPlayerItem seekToTimeメソッドでは インポイントを forwardPlaybackEndTimeでは アウトポイントを定義できます このコンセプトを イラスト化してみました アイテム1 2 3 は全て同じ AVAssetからソースされ 同じ3つのシーンを 構成しています 異なるインポイントで それぞれをseekToTimeで キューに入れアウトポイントは forwardPlaybackEndTimeで 定義したという点で これらは別物と言えます これでこの3つの さもないと同一のアイテムを AVQueuePlayerにエンキューし カスタマイズの 動的なシーケンスが 得られました では実際のギャップレス再生を デモで 視聴してみましょう このデモでは3つの ワークアウト動画ストリームを インタラクティブに つなぎ合わせています それぞれでAVKitコントロールを 残しておいたので 別々のストリームリソースで あると分かるでしょう まずは3つを全てシームレスに 再生したものをお見せし その後シーケンスを インタラクティブに編集します ご自分のソフトウェアで 同じものを配信 またはプログラム的に 並び変えたとイメージしてください
ウォームアップを始めよう ♪ ヒルズランの 準備はいいかい? ♪ 良し!終わったら クールダウンだ
♪ 見ているだけで 汗をかきそうです 「終わり」画面までスキップし ヒルズランは さぼりたくなりました サンフランシスコには 沢山ありますからね エクササイズセットの順番を編集 してスキップ可能にしましょう ヒルズをトップに 持って来ます ウォームアップ後に クールダウンへと すぐにギャップレスに 移れるようになりました ウォームアップを選択して 始めると 今は2番目のポジションにあり 最初のワークアウトになっています
ウォームアップを始めよう ♪ 良し!終わったら クールダウンだ
♪
このセッションで学んだ 主なポイントを まとめましょう HLSでギャップレス再生を 実現するには 一致するオーディオ フォーマットのある変数を 各アイテムに提供 しなければなりません また アイテムをシーケンスで キューに入れるだけで AVQueuePlayerに ギャップレス再生を 簡単に実行させられることも 学びました これについては バリアント検索用の新APIを 紹介する関連セッションがあります ソフトウェアやサービスで アイテムのオーディオフォーマット 一致がうまくいかない時に 役立つでしょう このセッションや 他のWWDC セッションをお楽しみ いただければと思います ご視聴ありがとうございました ♪
-
-
6:12 - create two items, enqueue in order and play gaplessly
// create two items, enqueue in order, // and play gaplessly let item1 = AVPlayerItem(url: url1) let item2 = AVPlayerItem(url: url2) let player = AVQueuePlayer() player.insert(item1, after: nil) player.insert(item2, after: item1) player.play()
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。