loneProgrammer

ストリーミング配信 と M3U8ファイル について解説

youtubeの様な動画配信プラットフォームを作成したいプログラマーやエンジニアの方は必見!!

この記事では、現代のデジタルメディア配信の要となるM3U8ファイルとストリーミング技術について詳しく解説いたします。

YouTubeに代表される動画配信プラットフォームの仕組みを理解し、さらには自らそのようなサービスを構築したいと考える方々にとって、これらの知識は不可欠と言えるでしょう。

分かりやすい解説を心がけますので、ぜひ最後までお付き合いください。

ストリーミングとは

ストリーミングは、インターネットを通じて動画や音楽を配信する方式です。

特徴は、全データのダウンロードを待たずに、受信しながら同時に再生できる点です。主に「オンデマンド型」と「ライブ型」の2種類があります。オンデマンド型は、YouTubeのように事前にアップロードされたコンテンツをユーザーが好きな時に視聴できます。

一方、ライブ型は生配信のようにリアルタイムで配信されます。この技術により、ユーザーはスムーズに、そして柔軟にオンラインコンテンツを楽しむことができます。

  • ストリーミング
  • 基本解説
  • ストリーミングとは、インターネットを介した動画配信や音楽配信に用いられる配信方式の一種。
  • データをダウンロードしきってからではなく、徐々にデータを受信しながら同時に随時再生していく。
  • 「オンデマンド型」と「ライブ型」の2種類がある。
  • 「オンデマンド型」と「ライブ型」
    • オンデマンド型
    • あらかじめサーバーにアップロードされている動画ファイルを、ユーザーの好きなタイミングで自由に試聴できる配信方式。
    • 例:youtube
    • ライブ型
    • リアルタイム配信
    • 例:生配信

M3U8ファイルとは

M3U8は、Apple社が開発したストリーミング配信向けの動画フォーマットです。

元の動画を短い「セグメント」に分割し、連続して配信することでスムーズな再生を実現します。この方式はHLS(HTTP Live Streaming)と呼ばれます。

M3U8ファイル(.m3u8)自体はテキストファイルで、分割された動画セグメント(.ts)のリストを含みます。

通常、セグメントは10秒間隔で区切られます。また、異なるビットレートのセグメントを用意することで、ネットワーク状況に応じて最適な品質を自動選択できる柔軟性も備えています。

  • M3U8ファイル
  • 解説
  • Apple社が開発した、ストリーミング配信に特化した動画のフォーマット。
  • 拡張子は、「.m3u8」
  • 元となる動画ファイルを、セグメントと呼ばれる短な動画ファイルに分割し、それらのセグメントを連続して配信することで、ストリーミング再生を実現。ちなみに、この様な方式HLS(HTTP Live Streaming)という。
  • 分割されたセグメントファイルの拡張子は「.ts」で、通常は、10秒間隔で区切られる。
  • 60秒の.mp4動画を、.m3u8に変換した場合、

    6つの.tsファイルと

    1つの.m3u8ファイルが生成される

    ちなみに、.tsファイルは動画ファイルだが、.m3u8ファイルはテキストファイル。

  • .mp4動画を.m3u8に変換する際、異なるビットレート値の複数パターンのセグメントファイルに分けて、生成することも可能。

    そうした場合、ネットワークの状況に基づいて、自動的に最適なビットレートを選択&切り替えを実行することもできる。

MP4をM3U8に変換した場合の具体例

  • MP4をM3U8に変換した場合の具体例
  • 25秒の「xyz.mp4」を「.m3u8:に変換
  • この場合、3つの.tsファイルと,1つの.m3u8ファイルが生成される。
  • 拡張子が「.ts」でTypeScriptファイルと同じで紛らわしいですが、ここで生成された.tsファイルは、動画ファイルで、通常の動画ファイル同様に再生できます。
  • .m3u8ファイルは、.tsファイルの再生順序,動画ファイルのサイズやビットレート情報 などが記載されたファイル。テキストエディタで確認可能。
  • table

    生成された.m3u8の中身 生成された.tsのファイル群
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:10
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-PLAYLIST-TYPE:VOD
    #EXTINF:10,
    xyz_00001.ts
    #EXTINF:10,
    xyz_00002.ts
    #EXTINF:5,
    xyz_00003.ts
    #EXT-X-ENDLIST
    xyz_00001.ts  ←(10秒)
    xyz_00002.ts  ←(10秒)
    xyz_00003.ts  ←(5秒)
  • 25秒のxyz.mp4動画を、
    highとlowの2クオリティーに分けて.m3u8に変換
  • highクオリティーの.tsファイルが3つ、

    lowクオリティーの.tsファイルが3つ、

    highクオリティーの.tsファイル情報が記載された.m3u8ファイルが1つ

    lowクオリティーの.tsファイル情報が記載された.m3u8ファイルが1つ

    high,lowそれぞれの.m3u8ファイルの情報が記載された.m3u8ファイルが1つ

    これらの計6つのファイルが生成される。

  • table

    xyz_high.m3u8 Highクオリティーの.tsファイル群
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:10
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-PLAYLIST-TYPE:VOD
    #EXTINF:10,
    xyz_high_00001.ts
    #EXTINF:10,
    xyz_high_00002.ts
    #EXTINF:5,
    xyz_high_00003.ts
    #EXT-X-ENDLIST
    xyz_high_00001.ts
    xyz_high_00002.ts
    xyz_high_00003.ts
    xyz_low.m3u8 Lowクオリティーの.tsファイル群
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:10
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-PLAYLIST-TYPE:VOD
    #EXTINF:10,
    xyz_ low _00001.ts
    #EXTINF:10,
    xyz_ low _00002.ts
    #EXTINF:5,
    xyz_ low _00003.ts
    #EXT-X-ENDLIST
    xyz_low_00001.ts
    xyz_low_00002.ts
    xyz_low_00003.ts
    xyz_master.m3u8には、xyz_high.m3u8とxyz_low.m3u8のクオリティーの異なるm3u8ファイルの情報が記載されている。

    ブラウザから再生する際は、xyz_master.m3u8のpathを指定するのみでOK。

    そうすることで、ネットワークの状況に基づいて最適なビットレートが選択され、自動的にビットレートの切り替えが実行される。

最後に

ストリーミング配信とM3U8ファイルについての解説をお読みいただき、ありがとうございます。これらのトピックは、現代のデジタルメディア配信において非常に重要な役割を果たしています。

より深く学びたい方には、関連するYouTube動画講義をご用意しています。この講義では、AWS S3、Lambda、MediaConvertを組み合わせて、MP4形式の動画をM3U8形式に変換し、Next.jsを使ってHLS(HTTP Live Streaming)配信を行う方法を詳しく解説しています。

実践的な知識を得たい方、あるいは視覚的に学習したい方にとって、この動画講義は非常に有益な資料となるでしょう。クラウドサービスと最新のウェブ技術を活用した、効率的かつスケーラブルな動画配信システムの構築方法を学ぶことができます。

興味をお持ちの方は、ぜひ動画をご覧ください。技術の詳細や実装のヒントを得られるだけでなく、実際の開発現場で役立つスキルを習得する機会となるはずです。

追加の情報や詳細な説明が必要な場合は、お気軽にお申し付けください。

↓ お勧め記事 ↓