概要 製品一覧 サポート Blog

ビデオ編集 SDK を使用して断片化された MP4 HLS ストリーム (M3U8) を編集する方法

image

 

Olga Krovyakova著 - 2023 年 10 月 2 日に修正、2019 年 4 月 1 日に作成

新しくリリースされたバージョン 4.2 では、Solveig Multimedia のビデオ編集 SDK はサポートされる形式を拡張しました。
現在のバージョンは通常、オンラインベースのストリーム形式に重点を置いています。

ビデオ編集 SDK v.4.2 は次の形式をサポートしています。

  • 断片化された MP4 HLS ストリーム
  • HTTP でホストされる MP4 ファイル
  • YouTube オンラインビデオ

この記事では、断片化された MP4 HLS ストリームのサポートのデモを紹介します。

ビデオ編集 SDK を無料でお試しください

断片化された MP4 HLS ストリームのサポート

ビデオ編集 SDK v.4.2 は、断片化された MP4 HLS ストリームの次の機能をサポートしています。

再生。

断片化された MP4 HLS M3U8 ストリームを簡単に開き、ローカル ファイルと同じように操作できます。ファイル内を移動したり、再生したりできます。ストリームのプレビューに必要な部分のみが PC にダウンロードされます。

断片化された MP4 HLS ストリームをプレビューするには、次のグラフを作成できます。

断片化された MP4 HLS ストリームをプレビューするグラフ

グラフには、ソース フィルターとして SolveigMM HLS Source が含まれ、ビデオ デコーダー フィルターとして Elecard AVC Video Decoder が含まれています。どちらのフィルターも SDK に同梱されています。

SMM Trim C++ サンプル アプリケーションを使用して、断片化された MP4 HLS ストリームの再生とトリミングのサポートをテストします。
次のビデオは、Video Editing SDK v.4.2 を使用して断片化された MP4 HLS ストリームで何ができるかを示しています。

button

編集。

ビデオ編集 SDK は、断片化された MP4 HLS ストリームをトリミングできるようになりました。ビデオ編集エンジンが担当する主要なコンポーネントです。必要なことは、ビデオ編集エンジンを構成し、現在のタスクを説明する XTL を指定して、それを実行して完了を待つことです。

ビデオ編集エンジンは COM コンポーネントであり、   ITrimmerObjControl を使用し、次のように作成します。

hr = ::CoCreateInstance( CLSID_TrimmerObjControl, NULL, CLSCTX_INPROC, IID_ITrimmerObjControl, (void**)&m_pITrimmerObjControl );

編集エンジンを設定するには、   IModuleConfig  インターフェース:

hr = m_pITrimmerObjControl->QueryInterface(IID_IModuleConfig, (void **)&m_pModuleCfgEditObj);

取得したインターフェイスを使用して、トリミング タスクを含む XTL 文字列を設定し、オプションで操作の進行状況を追跡するコールバックを指定する必要があります。

バリアント var1 = {0}、var2 = {0};

var1.vt = VT_BSTR;
var1.bstrVal = ...; //XTL形式のタスク文字列
hr = m_pModuleCfgEditObj->SetValue( &SMAT_XTLString, &var1 );

var2.vt = VT_BYREF|VT_UI1;
var2.pbVal = (BYTE*) &m_xCTrimmerObjControlCB; //コールバッククラスへのポインタ
hr = m_pModuleCfgEditObj->SetValue( &SMAT_Callback, &var2 );

VARIANT var_res = {0};
hr = m_pModuleCfgEditObj->CommitChanges(&var_res);

トリミングプロセスを開始するには、   ITrimmerObjControl::Start()  方法:

hr = m_pITrimmerObjControl->Start();

また、トリミング プロセス中に、編集エンジンに進行状況の値を要求できます。

バリアント変数 = {0};
hr = m_pModuleCfgEditObj->GetValue( &SMAT_Progress, &var );

処理が完了すると、編集エンジンは  ITrimmerObjControlCB::OnStop()  コールバックから。

以下に、トリミング タスクを含む XTL スティングの例を示します。

<タイムライン バージョン="2">
<タイムライン>
<グループ出力="C:\hls\output.m3u8">
<track video="1" audio="1" text="1" flags="">
<クリップ src="http://smarteditingonline.solveigmm.com/files/test_multibitrate.m3u8"
start="160413589" stop="229542097" timeFormat="100ns_units">
<クリップ src="http://smarteditingonline.solveigmm.com/files/test_multibitrate.m3u8"
start="469719350" stop="572525849" timeFormat="100ns_units">
</トラック>
</グループ>
</タイムライン>
</タイムライン>

この XTL のソース ファイルは、断片化された MP4 HLS ファイルであり、   http://smarteditingonline.solveigmm.com 。 2 つの間隔 (「クリップ」タグで表される) がソース ファイルから出力ファイルに保存されます。

  • 160413589 ~ 229542097 単位 (または 16.041 ~ 22.954 秒) および
  • 469719350 ~ 572525849 単位 (または 46.971 ~ 57.252 秒)

ソース ファイルに複数のストリームが含まれている場合 (たとえば、異なるビットレート値の場合)、ソース構造が再作成されます。
テスト ファイル http://smarteditingonline.solveigmm.com/files/test_multibitrate.m3u8 には、異なるビットレート値を持つ 2 つの異なるストリームが含まれています (下の図を参照)。

image

トリミング後、出力フォルダー (C:\hls) には、両方のストリームを含む 2 つのサブフォルダーと、ストリーム構成の説明を含む M3U8 プレイリスト ファイル (output.m3u8) が含まれます。次の図は、トリミングされた HLS の構造を示しています。

image

出力される M3U8 ファイルの構造は次のとおりです。

#EXTM3U

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1007161,BANDWIDTH=1275068,VIDEO-RANGE=SDR,CODECS="mp4a.40.2, avc1.42c01f",RESOLUTION=1280x720,FRAME-RATE=24.000,クローズドキャプション=なし
500K/prog_index.m3u8

#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1564155,BANDWIDTH=2042932,VIDEO-RANGE=SDR,CODECS="mp4a.40.2, avc1.42c01f",RESOLUTION=1280x720,FRAME-RATE=24.000,クローズドキャプション=なし
1000K/prog_index.m3u8

トリミングされたファイルは、次のリンクから見つけることができます。
http://smarteditingonline.solveigmm.com/sdkdemo/hls/output.m3u8

ビデオ編集エンジンを構成して実行してトリミング操作を実行する方法の詳細については、SMM Trim C++ サンプル アプリケーションのソース コードを参照してください。

ビデオ編集 SDK を無料でお試しください

よくある質問

断片化された MP4 HLS ストリーム (M3U8) とは何ですか?

断片化 MP4 HLS ストリームは、断片化 MP4 ファイルと M3U8 プレイリストを利用してインターネット上でビデオ コンテンツを配信する、一般的なビデオ ストリーミング形式です。 HLS は、ビデオをより小さなセグメントに分割し、適応ストリーミング機能を提供することで、スムーズな再生と、幅広いデバイスやプラットフォームにわたる互換性を保証します。

では、なぜ MP4 ファイルを断片化する必要があるのでしょうか? HEVC/H.265 または AVC/H.264 を使用する場合は、Apple の HLS オーサリング仕様にあるビデオ エンコード標準に従って使用する必要があります。断片化された MP4 ファイルは、HLS の代替となる MPEG-DASH とも互換性があるため、同じファイルを利用できます。唯一の違いはマニフェスト ファイル (プレイリスト) です。これにより、エンコードとストレージの要件が減り、出費が節約されます。

断片化された MP4 HLS ストリームを従来のビデオ編集ソフトウェアで編集できますか?

断片化された MP4 HLS ストリームを従来のビデオ編集ソフトウェアで編集することは、フォーマットのセグメント化された性質により困難な場合があります。従来のソフトウェアは、個々のセグメントではなく完全なビデオ ファイルを処理するように設計されています。 HLS ストリームを編集するには、従来の編集ソフトウェアにインポートする前に、専用のツールを使用して単一のビデオ ファイルに変換することをお勧めします。この変換ステップにより、元のストリームに関連付けられたアダプティブ ストリーミング機能とメタデータが失われる可能性があります。

要約すると、従来のビデオ編集ソフトウェアで断片化された MP4 HLS ストリームを編集するには、通常、編集前にセグメントを完全なビデオ ファイルに変換する必要があります。このプロセスにより互換性が簡素化されますが、特定の HLS 固有の機能が失われる可能性があります。

断片化された HLS MP4 ストリームに対して、トリミング以外の編集機能は利用できますか?

Video Editing SDK v.4.2 では、断片化された MP4 HLS ストリームで次の機能を利用できます。
  • 再生。断片化された MP4 HLS M3U8 ストリームは、ローカル ファイルと同じくらい簡単にアクセスして操作できます。ファイルは再生および閲覧できます。コンピュータは、プレビューの再生に必要なストリームのセクションのみをダウンロードします。
  • 編集中。断片化された MP4 HLS ストリームは、ビデオ編集ソフトウェア開発キットを使用して編集できます。システムの中核となるのはビデオ編集エンジンです。ビデオ編集エンジンをセットアップし、現在のタスクを説明する XTL を提供した後、プログラムを開始して終了するのを待ちます。

トリミング用にビデオ編集エンジンをセットアップして実行する方法については、SMM Trim C++ サンプル アプリケーションのソース コードを参照してください。

SDK ではどのようなプラットフォームがサポートされていますか?

ビデオ編集 SDK は、Windows、Linux、macOS、Android プラットフォームで利用できます。

断片化された MP4 HLS ストリーム内のキャプションまたは字幕を処理するための特定のガイドラインはありますか?

断片化された MP4 HLS ストリームでキャプションまたは字幕を処理する場合は、サポートされているキャプション形式 (WebVTT や TTML など) を使用し、ビデオ セグメントとの位置合わせを確保し、別個のキャプション メディア プレイリストを含め、バリアント ストリーム間での同期を考慮し、徹底的に行うことが重要です。表示とアクセシビリティをテストします。

断片化された MP4 HLS ストリームに広告を挿入したり収益化することはできますか?

はい、断片化された MP4 HLS ストリームに広告を挿入して収益化することは可能です。 HLS は、広告の挿入と収益化のためのさまざまな方法をサポートしています。最も一般的なアプローチは、ストリーム内で広告を挿入する場所を示す広告マーカーを使用することです。広告の挿入はサーバー側またはクライアント側で実行できます。

著者について

image Olga Krovyakova は、2010 年から Solveig Multimedia のテクニカル サポート マネージャーを務めています。

彼女は、ビデオ スプリッター、HyperCam、WMP トリマー プラグイン、AVI Trimmer+、TriMP4 などの会社製品に関する多くのテキストおよびビデオ ガイドラインの著者です。

彼女は毎日プログラムを使って作業しているため、プログラムがどのように機能するかをよく知っています。 ご質問がある場合は、 support@solveigmm.com経由で Olga までお問い合わせください。彼女は喜んでお手伝いします!