<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shige Fukushima</title>
    <description>The latest articles on DEV Community by Shige Fukushima (@shigeyf).</description>
    <link>https://dev.to/shigeyf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F422490%2Fa6cb755b-0e63-43ef-954d-54d46e733630.jpeg</url>
      <title>DEV Community: Shige Fukushima</title>
      <link>https://dev.to/shigeyf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shigeyf"/>
    <language>en</language>
    <item>
      <title>Lenovo TrackPoint Keyboard のチルトスタンドが折れた</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Fri, 28 Apr 2023 16:51:46 +0000</pubDate>
      <link>https://dev.to/shigeyf/trouble-lenovo-trackpoint-keyboard-580j</link>
      <guid>https://dev.to/shigeyf/trouble-lenovo-trackpoint-keyboard-580j</guid>
      <description>&lt;h2&gt;
  
  
  キーボードのチルトスタンド (高さ調整用の脚) が折れた
&lt;/h2&gt;

&lt;p&gt;現在、デスクトップ PC 用に &lt;a href="https://support.lenovo.com/jp/ja/accessories/acc500164-thinkpad-trackpoint-keyboard-ii-overview-and-service-parts"&gt;Lenovo TrackPoint Keyboard II&lt;/a&gt; を使っています。&lt;/p&gt;

&lt;p&gt;購入してから約3年になりますが、結構使い勝手がよくお気に入りのキーボードです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lenovo ThinkPad 特有のトラックポイントがついている (キーボード・マウスが1接続で利用できる)&lt;/li&gt;
&lt;li&gt;USB接続と BlueTooth 接続の両方に対応&lt;/li&gt;
&lt;li&gt;電池不要で UCB-C で充電が可能&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;トラックポイントはキーボードのホームポジションから手を動かさずにマウス操作ができるので、&lt;br&gt;
開発者向きと言えるのではないかと思います。&lt;/p&gt;

&lt;p&gt;そのキーボードですが、先日使っていると、高さ調整用の脚 (チルトスタンド) が折れた！&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yws6Rjnc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/_miscs/trouble-lenovo-trackpoint-keyboard/./broken-keyboard-tiltstand.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yws6Rjnc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/_miscs/trouble-lenovo-trackpoint-keyboard/./broken-keyboard-tiltstand.jpg" alt="壊れたチルトスタンド" width="600" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  他のユーザーも同様の状況に遭遇している
&lt;/h2&gt;

&lt;p&gt;インターネットを検索すると、ちらほらと同様の事例が。&lt;br&gt;
こちらが遭遇したのは破損事例7と同じような状況で、キーボードにくっついたままの状態で脚が折れている状態でした。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huck.hatenablog.jp/entry/2020/06/18/224855"&gt;破損事例1 - 2020/06/18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pado.tea-nifty.com/top/2020/06/post-23614c.html"&gt;破損事例2 - 2020/06/24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://review.kakaku.com/review/K0001260509/ReviewCD=1347015/"&gt;破損事例3 - 2020/07/12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.hayashikun.com/entry/2021/01/20/110157"&gt;破損事例4 - 2021/01/20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://totonote.com/2021/06/13/lenovo-thinkpad-trackpoint-keyboard-ii/"&gt;破損事例5 - 2021/06/13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/thinkpad/comments/gvyo74/how_to_get_a_replacement_foot_for_lenovo_thinkpad/"&gt;破損事例6 - 2020年&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/thinkpad/comments/hn4g2j/trackpoint_keyboard_ii_feet_cracks_easily/"&gt;破損事例7 - 2020年&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;事例の中にはサポート修理や部品販売は行っていないとの情報もあり、&lt;br&gt;
このキーボードを使い続けたいので、どうやって直すかが悩みどころでした。&lt;/p&gt;

&lt;h2&gt;
  
  
  3Dプリンターでプリントアウトしたチルトスタンド
&lt;/h2&gt;

&lt;p&gt;壊れた部品をプラリペアで修理するという選択肢もありますが、また壊れそうということでやめました。&lt;/p&gt;

&lt;p&gt;レノボの正規部品の販売を確認してみるという選択肢もありましたが、部品販売があっても、&lt;br&gt;
結局また壊れてしまうかもしれない部品を使うのも考えものだったので、他の選択肢を検討してみることにしました。&lt;/p&gt;

&lt;p&gt;皆さんの記事を見ていると、3D プリンターでプリントアウトしたチルトスタンドを使っている事例もあり、&lt;br&gt;
こちらの方が正規品よりも丈夫との情報もあり、試してみる価値あり、との判断をしました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.thingiverse.com/"&gt;Thingiverse&lt;/a&gt; という人気サイトで、&lt;br&gt;
3D　プリンターでプリントアウトができる TrackPoint Keyboard のチルトスタンドが公開されていました。&lt;br&gt;
3D プリンターを持っている方は試してみるとよいでしょう。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.thingiverse.com/thing:3495256"&gt;3Dプリンター ファイル1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thingiverse.com/thing:5243423"&gt;3Dプリンター ファイル2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thingiverse.com/thing:5318698"&gt;3Dプリンター ファイル3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これを機に 3D プリンターの購入も考えましたが、販売品もあるとのことで、販売品を探しました。&lt;br&gt;
上記のファイルを印刷したものが eBay や Etsy で出品されていました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ebay.co.uk/itm/Lenovo-THINKPAD-Trackpoint-Keyboard-II-Keyboard-Spare-Replacement-Leg-Stall-Foot-/313139136090"&gt;出品 #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.etsy.com/listing/842440798/lenovo-thinkpad-trackpoint-keyboard-ii?ga_order=most_relevant&amp;amp;ga_search_type=all&amp;amp;ga_view_type=gallery&amp;amp;ga_search_query=TrackPoint+Keyboard&amp;amp;ref=sc_gallery-1-1&amp;amp;plkey=e4877faf81048810312687aa0c9699cc05e93ccc%3A842440798"&gt;出品 #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.etsy.com/listing/1142915352/torakkupointokbdo-yongno-zupeaku-1255-kt?ga_order=most_relevant&amp;amp;ga_search_type=all&amp;amp;ga_view_type=gallery&amp;amp;ga_search_query=TrackPoint+Keyboard+II&amp;amp;ref=sr_gallery-1-2&amp;amp;organic_search_click=1"&gt;出品 #3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;他にも、メルカリやラクマでも同様の 3D プリンター品が出品されていました。&lt;/p&gt;

&lt;p&gt;左右ペアでだいたい 500～1000 円程度で出品されているようです。&lt;/p&gt;

&lt;h2&gt;
  
  
  出品されているものを買ってみた
&lt;/h2&gt;

&lt;p&gt;早速、出品されている3Dプリンター品を買ってみて、壊れたものの代わりに取り付けてみました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wmtXP9Hy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/_miscs/trouble-lenovo-trackpoint-keyboard/./keyboard-tiltstand-3dprinter.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wmtXP9Hy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/_miscs/trouble-lenovo-trackpoint-keyboard/./keyboard-tiltstand-3dprinter.jpg" alt="3Dプリンター品を取り付けてみた" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;届いた品は、&lt;br&gt;
ピッタリとはまるものではなかったですが、ニッパーとヤスリで少し形を整えてとりつけてみるとピッタリをはまりました。&lt;/p&gt;

&lt;p&gt;正規品はゴム素材のソックスで滑り止めが付いているので少し心配はありましたが、&lt;br&gt;
しばらく利用してみて、あまり気にならない感じです。&lt;/p&gt;

&lt;p&gt;これでキーボードのチルトスタンドも元に戻り、&lt;br&gt;
気に入ったキーボードを使い続けることができそうです。&lt;/p&gt;

</description>
      <category>lenovo</category>
      <category>trackpointkeyboard</category>
      <category>破損</category>
      <category>ハードウェア</category>
    </item>
    <item>
      <title>Hyper-V ホストのネットワークパフォーマンスの改善</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Thu, 27 Apr 2023 17:38:10 +0000</pubDate>
      <link>https://dev.to/shigeyf/improve-network-performance-in-hyper-v-host-10ff</link>
      <guid>https://dev.to/shigeyf/improve-network-performance-in-hyper-v-host-10ff</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;Windows 11 で Hyper-V を有効にした際に、仮想マシンをホストコンピューターが接続しているローカルネットワークに直接接続したい場合があります。例えば、複数の物理コンピューターがある場合に、ある物理コンピューターにホストした仮想マシンと物理コンピューターとの間で同じローカルネットワークのセグメントで直接通信させたい場合です。&lt;/p&gt;

&lt;p&gt;Hyper-V の仮想スイッチマネージャーから [&lt;strong&gt;外部&lt;/strong&gt;] ネットワークを作成すると、&lt;br&gt;
物理ネットワークインターフェース (WiFi または イーサネット) にブリッジネットワークが構成されます。&lt;br&gt;
仮想マシンの仮想 NIC を作成した [&lt;strong&gt;外部&lt;/strong&gt;] ネットワークに接続することで、仮想マシンをローカルネットワークに接続することができるようになります。&lt;/p&gt;

&lt;p&gt;この際、Hyper-V ホストにも仮想 NIC が作成され、同じ [&lt;strong&gt;外部&lt;/strong&gt;] の仮想スイッチに接続されるよう構成されますが、&lt;br&gt;
Hyper-V ホストからの外部ネットワークへのアップロードのネットワーク速度が極端に低下する場合があります。&lt;/p&gt;

&lt;p&gt;この記事では、ネットワークパフォーマンスを改善する方法を紹介します。&lt;/p&gt;

&lt;h2&gt;
  
  
  どのようなパフォーマンスの問題があったのか？
&lt;/h2&gt;

&lt;p&gt;Hyper-V ホストに [&lt;strong&gt;外部&lt;/strong&gt;] ネットワークの仮想スイッチを作成した後、&lt;br&gt;
アップロードのネットワーク通信が極端に遅い、という現象が発生しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.microsoft.com/store/detail/network-speed-test/9WZDNCRFHX52?hl=ja-jp&amp;amp;gl=jp"&gt;Network Speet Test&lt;/a&gt; という無料の Windows ストアアプリをインストールして試したところ、以下のような結果でした。&lt;/p&gt;

&lt;p&gt;ダウンロード (下り) は約 120 Mbps の速度が出ているのですが、アップロード (上り) はたった 0.5Mbps 程度しか出ないという状況です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3A1rSXBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./slow-network-speed-tests-in-hyper-v-host.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3A1rSXBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./slow-network-speed-tests-in-hyper-v-host.jpg" alt="ネットワークの速度のテスト-遅い結果" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;明らかにおかしいと思われる様子なので、調べてみました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hyper-V を有効にする前に測定したネットワーク速度や同じ LAN に接続した他のデバイスからの測定結果とも異なりました。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ネットワーク アーキテクチャの理解
&lt;/h2&gt;

&lt;p&gt;具体的な問題解決方法の前に、Hyper-V ホストに [&lt;strong&gt;外部&lt;/strong&gt;] ネットワークの仮想スイッチを作成すると、どのようなネットワーク構成になるのか？&lt;/p&gt;

&lt;p&gt;ネットワーク構成は以下のような図になります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wum-e34Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./hyper-v-network-architecture.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wum-e34Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./hyper-v-network-architecture.jpg" alt="ネットワークアーキテクチャ" width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hyper-V ホスト OS からのネットワーク パケットは、仮想 NIC とネットワーク ブリッジの両方を経由して、物理 NIC から外部へ送受信されます。&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;コントロール パネル&lt;/strong&gt;] -&amp;gt; [&lt;strong&gt;ネットワークとインターネット&lt;/strong&gt;] -&amp;gt; [&lt;strong&gt;ネットワークと共有センター&lt;/strong&gt;] -&amp;gt; 左サイドのメニューの [&lt;strong&gt;アダプター設定の変更&lt;/strong&gt;] をクリックすると、ネットワークインターフェースの一覧が表示されます。&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;vEthernet ([仮想スイッチの名前])&lt;/strong&gt;" という名前のネットワーク接続の項目 (デバイス名が "&lt;strong&gt;Hyper-V Ethernet Adapter #[X]&lt;/strong&gt;") が、ホスト OS に接続された仮想 NIC になります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注: [X] には連番の数字が割り当てられます&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;また、ネットワークブリッジは、"Microsoft Network Adapter Multiplexor Driver" というデバイス名のネットワーク接続の項目が表示されています。&lt;/p&gt;

&lt;p&gt;Hyper-V ホスト OS から外部への接続は、この2つのネットワークを経由して行われることになります。&lt;/p&gt;

&lt;h2&gt;
  
  
  問題の解決方法: LSO の無効化
&lt;/h2&gt;

&lt;p&gt;様々な問題の原因が考えられますが、仮想ネットワークアダプター (ソフトウェア) でハードウェアの最適化機能があやしいのではないかと考え、アップロード (ネットワーク送信) に関するハードウェア最適化機能に目を付けます。&lt;/p&gt;

&lt;p&gt;ネットワークのハードウェア最適化機能は、マイクロソフトのドキュメントによい記事 (「&lt;a href="https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/hpn/hpn-hardware-only-features"&gt;ハードウェアのみ (Hardware-Only) の機能とテクノロジ&lt;/a&gt;」 があります。こちらを参考ください。&lt;/p&gt;

&lt;p&gt;以下の機能があやしそうです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Large Send Offload (LSO)&lt;/p&gt;

&lt;p&gt;LSO を使用すると、アプリケーションは大量のデータ ブロックを NIC に渡すことができ、NIC はデータをネットワークの最大転送単位 (MTU) 内に収まるパケットに分割します。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ということで、デバイスマネージャーで仮想 NIC とネットワークブリッジのデバイス名のプロパティを確認します。[&lt;strong&gt;高度な設定&lt;/strong&gt;] または [&lt;strong&gt;Advanced&lt;/strong&gt;] タブを確認すると、詳細な機能のパラメーターが確認できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sSR-jw9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./network_device_properties_lso_enabled.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sSR-jw9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./network_device_properties_lso_enabled.jpg" alt="ネットワークプロパティ-LSO有効" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以下の Large Send Offload (LSO) 関連のパラメーターが、どちらのデバイスでも IPv4/IPv6 の両方で &lt;strong&gt;有効 (Enabled)&lt;/strong&gt; となっていました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large Send Offload Version 2 (IPv4)&lt;/li&gt;
&lt;li&gt;Large Send Offload Version 2 (IPv6)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これを &lt;strong&gt;無効 (Disabled)&lt;/strong&gt; に変更します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iUnEEs9L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./network_device_properties_lso_disabled.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iUnEEs9L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./network_device_properties_lso_disabled.jpg" alt="ネットワークプロパティ-LSO無効" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LSO 無効化後のネットワーク速度の確認
&lt;/h2&gt;

&lt;p&gt;LSOv2 の設定変更後、再度、&lt;a href="https://apps.microsoft.com/store/detail/network-speed-test/9WZDNCRFHX52?hl=ja-jp&amp;amp;gl=jp"&gt;Network Speet Test&lt;/a&gt; でネットワーク速度を測定してみます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HXLf0C8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./good-network-speed-tests-in-hyper-v-host.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HXLf0C8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://shigeyf.dev/posts/improve-network-performance-in-hyper-v-host/./good-network-speed-tests-in-hyper-v-host.jpg" alt="ネットワークの速度のテスト-問題解決後の結果" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;測定の結果、アップロード (上り) の速度が約 30 Mbps と改善されました。&lt;br&gt;
この結果は、以前に測定した結果と大きな差異もなく、設定変更により正しく改善されたように見えます。&lt;/p&gt;

&lt;p&gt;インターネットで検索して得られた&lt;a href="https://superuser.com/questions/1371759/creating-an-external-virtual-switch-on-hyper-v-causes-host-to-experience-very-sl/1375670#1375670"&gt;同じような現象の事例に対するアドバイス&lt;/a&gt; とも同じ結果になっています。&lt;/p&gt;

&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;この記事では、Hyper-V 導入後に実際に遭遇したネットワークのパフォーマンス問題と解決策を紹介しました。&lt;/p&gt;

&lt;p&gt;もし今回のような問題が発生した場合、ダウンロードの問題かアップロードの問題かを識別すること、Hyper-V を有効にした場合と無効にした場合の比較、仮説に基づく設定変更の前後の比較など、問題の切り分けを行うことが重要です。&lt;/p&gt;

&lt;p&gt;問題の原因らしい箇所を想定を見つけて、他に同じような現象になっている事例がないかもインターネットで確認してみると、より確証が得られるかもしれません。&lt;/p&gt;

</description>
      <category>windows</category>
      <category>hyperv</category>
      <category>network</category>
      <category>performance</category>
    </item>
    <item>
      <title>Ubuntu VM のセキュアブートの有効化</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Mon, 24 Apr 2023 14:29:13 +0000</pubDate>
      <link>https://dev.to/shigeyf/enable-secure-boot-in-ubuntu-vm-5720</link>
      <guid>https://dev.to/shigeyf/enable-secure-boot-in-ubuntu-vm-5720</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、&lt;a href="https://shigeyf.dev/posts/enable-secure-boot-in-ubuntu-vm/../migrate-ubuntu-vm-from-vmware-to-hyper-v/"&gt;記事: Ubuntu VM の移行 (VMware から Hyper-V へ)&lt;/a&gt;&lt;br&gt;
で説明した以下の移行手順の ステップ 4 について説明します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換&lt;/li&gt;
&lt;li&gt;新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)&lt;/li&gt;
&lt;li&gt;open-vm-tools のアンインストール&lt;/li&gt;
&lt;li&gt;(オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換&lt;/li&gt;
&lt;li&gt;(オプション) &lt;strong&gt;Secure Boot の有効化&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Hyper-V 統合サービスのインストール&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  セキュアブートの有効化
&lt;/h2&gt;

&lt;p&gt;第 2 世代 Hyper-V 仮想マシンの Ubuntu Linux でセキュアブートを有効にするには、&lt;br&gt;
セキュアブートに対応したカーネルと Grub ブートローダーをインストールする必要があります。&lt;/p&gt;

&lt;p&gt;EFIブート対応済みの仮想マシンで起動して、以下の手順を実行します。&lt;/p&gt;
&lt;h3&gt;
  
  
  1) Grub EFI パッケージの取得
&lt;/h3&gt;

&lt;p&gt;以下のコマンドを実行し、Grub EFI パッケージをネットワーク経由でダウンロードしインストールします。&lt;/p&gt;

&lt;p&gt;VMware 仮想マシンから移行した場合、ネットワーク接続が可能となるように構成変更するのを忘れないでください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;grub-efi-amd64 grub-efi-amd64-signed shim-signed &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Grub EFI のインストール
&lt;/h3&gt;

&lt;p&gt;&lt;del&gt;以下のコマンドを実行し、起動ディスクに Grub EFI をインストールします。&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[更新:2023/03/25]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grub EFI パッケージのインストーラーにより、&lt;br&gt;
自動的に Grub ブートローダーの更新が実行されるため、以下のコマンドの実行は不要です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;grub-install &lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x86_64-efi &lt;span class="nt"&gt;--uefi-secure-boot&lt;/span&gt; /dev/sda
&lt;span class="nb"&gt;sudo &lt;/span&gt;grub-install &lt;span class="nt"&gt;--recheck&lt;/span&gt; &lt;span class="nt"&gt;--uefi-secure-boot&lt;/span&gt; /dev/sda
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-grub2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) セキュアブートの有効化
&lt;/h3&gt;

&lt;p&gt;セキュアブート対応の Grub EFI ブートローダーのインストールが完了したら、&lt;br&gt;
ライブサーバーをシャットダウンして、仮想マシンの設定を変更します。&lt;/p&gt;

&lt;p&gt;仮想マシンの設定から、&lt;strong&gt;[セキュリティ]&lt;/strong&gt; -&amp;gt; &lt;strong&gt;[セキュアブートを有効にする]&lt;/strong&gt;　のチェックボックスを有効にし、&lt;br&gt;
テンプレートに &lt;strong&gt;[Microsoft UEFI 証明機関]&lt;/strong&gt; を選択します。&lt;/p&gt;

&lt;p&gt;また、仮想マシンの設定の&lt;strong&gt;[ファームウェア]&lt;/strong&gt;の項目で&lt;br&gt;
&lt;code&gt;grubx64.efi&lt;/code&gt; の代わりに &lt;code&gt;shimx64.efi&lt;/code&gt; ファイルがブートローダーとして設定されていることを確認します。&lt;/p&gt;
&lt;h3&gt;
  
  
  正常に起動しない場合
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;bad shim signature&lt;/code&gt; というメッセージが表示される場合、kernel が最新でないケースが考えられます。&lt;/p&gt;

&lt;p&gt;以下のコマンドを実行して、kernel を含む更新を最新の状態にアップグレードすると正常に起動するでしょう。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  セキュアブートが有効になっているかどうかの確認方法
&lt;/h2&gt;

&lt;p&gt;以下のコマンドを実行して、セキュアブートが有効になっているかどうかを確認できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dmesg | &lt;span class="nb"&gt;grep &lt;/span&gt;secureboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Secure boot enabled" というログが表示されていれば、セキュアブートが有効になっています。&lt;/p&gt;

&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;この記事では、第 2 世代の Hyper-V 仮想マシンで Ubuntu Linux のセキュアブートを有効にする方法を説明しました。&lt;/p&gt;

&lt;p&gt;Ubuntu Linux 上のサービスでセキュアブートを有効にすると、署名のないドライバーなどを使うことができなくなります。&lt;br&gt;
セキュアな環境を構築できる一方で、セキュリティの考慮がないドライバーなどの利用の際に思わぬ問題に遭遇する場合もあります。&lt;br&gt;
その際には、セキュアブートを無効にして動作を確認することで、問題の切り分けができます。&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>efi</category>
      <category>grub</category>
      <category>secureboot</category>
    </item>
    <item>
      <title>Ubuntu Linux 起動ディスクを BIOS ブートから EFI ブートへ変換</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Mon, 24 Apr 2023 14:28:51 +0000</pubDate>
      <link>https://dev.to/shigeyf/convert-ubuntu-disk-from-bios-to-efi-1o6h</link>
      <guid>https://dev.to/shigeyf/convert-ubuntu-disk-from-bios-to-efi-1o6h</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、&lt;a href="https://shigeyf.dev/posts/convert-ubuntu-disk-from-bios-to-efi/../migrate-ubuntu-vm-from-vmware-to-hyper-v/"&gt;記事: Ubuntu VM の移行 (VMware から Hyper-V へ)&lt;/a&gt;&lt;br&gt;
で説明した以下の移行手順の ステップ 4 について説明します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換&lt;/li&gt;
&lt;li&gt;新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)&lt;/li&gt;
&lt;li&gt;open-vm-tools のアンインストール&lt;/li&gt;
&lt;li&gt;(オプション) &lt;strong&gt;第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;(オプション) Secure Boot の有効化&lt;/li&gt;
&lt;li&gt;Hyper-V 統合サービスのインストール&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Ubuntu Linux 起動ディスクを BIOS ブートから EFI ブートへ変換
&lt;/h2&gt;

&lt;p&gt;第 2 世代 Hyper-V 仮想マシンで Ubuntu Linux を起動するには、&lt;br&gt;
Ubuntu Linux の起動ディスクを BIOS ブートから EFI ブートへ変更する必要があります。&lt;/p&gt;

&lt;p&gt;起動ディスクを EFI ブートに変更するには、Ubuntu インストーラー メディア (ライブサーバー) を使って以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;新しい第2世代 Hyper-V 仮想マシンを作成する&lt;/li&gt;
&lt;li&gt;パーティションのサイズの縮小&lt;/li&gt;
&lt;li&gt;
EFI パーティションの作成 (EFI パーティションはディスクの最後尾に準備)&lt;/li&gt;
&lt;li&gt;Grub EFI のインストール&lt;/li&gt;
&lt;li&gt;/etc/fstab の編集&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;インストーラーメディアは&lt;a href="https://ubuntu.com/download/server"&gt;こちらのサイト&lt;/a&gt;からダウンロードします&lt;/p&gt;
&lt;h3&gt;
  
  
  ステップ 1: 新しい第 2 世代 Hyper-V 仮想マシンの作成
&lt;/h3&gt;

&lt;p&gt;この移行作業は EFI ブート対応の仮想マシンで実行する必要があるため、第 2 世代 Hyper-V の新しい仮想マシンを作成する。&lt;br&gt;
仮想マシンを作成したら、仮想マシンの設定から、&lt;strong&gt;[セキュリティ]&lt;/strong&gt; -&amp;gt; &lt;strong&gt;[セキュアブートを有効にする]&lt;/strong&gt;　のチェックボックスを外します。&lt;/p&gt;

&lt;p&gt;仮想マシンの設定の &lt;strong&gt;[SCSI コントローラー]&lt;/strong&gt; から &lt;strong&gt;[DVD Drive]&lt;/strong&gt; を追加し、&lt;br&gt;
ダウンロード済みの Ubuntu Server インストーラーメディアをイメージファイルに設定します。&lt;/p&gt;

&lt;p&gt;また、仮想マシンの設定の &lt;strong&gt;[ファームウェア]&lt;/strong&gt; では、&lt;strong&gt;[DVD Drive]&lt;/strong&gt; からの起動を優先するよう、&lt;br&gt;
一番上のエントリとなるように設定します。&lt;/p&gt;

&lt;p&gt;インストーラーが起動したら、右上に表示された &lt;strong&gt;[ Help ]&lt;/strong&gt; を選択し、&lt;strong&gt;Enter shell&lt;/strong&gt; を選択して、&lt;br&gt;
シェルコンソールを起動します。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ライブサーバーは外部から SSH でリモートアクセスすることも可能です。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[ Help ]&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Help on SSH access&lt;/strong&gt; でリモートアクセスのためのユーザー名とパスワードを確認することができます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  ステップ 2: パーティションのサイズの縮小
&lt;/h3&gt;

&lt;p&gt;EFI パーティションを確保するために、パーティションのサイズを縮小します。&lt;/p&gt;

&lt;p&gt;EFI パーティションは 2 GB の容量を確保することを目標とします。&lt;/p&gt;
&lt;h4&gt;
  
  
  ステップ 2-1: パーティションの確認
&lt;/h4&gt;

&lt;p&gt;まず、最初に、現在のパーティションと使用状況を以下のコマンドで確認します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk /dev/sda &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pvs &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; vgs &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; lvs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果は以下の通りです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  32G  0 disk
|-sda1                      8:1    0   1M  0 part
|-sda2                      8:2    0   2G  0 part
`-sda3                      8:3    0  30G  0 part
  `-ubuntu--vg-ubuntu--lv 253:0    0  15G  0 lvm

  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  &amp;lt;30.00g 15.00g

  VG        #PV #LV #SN Attr   VSize   VFree
  ubuntu-vg   1   1   0 wz--n- &amp;lt;30.00g 15.00g

  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-a----- &amp;lt;15.00g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パーティション名&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;th&gt;サイズ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sda1&lt;/td&gt;
&lt;td&gt;BIOS ブート用のパーティション&lt;/td&gt;
&lt;td&gt;1 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sda2&lt;/td&gt;
&lt;td&gt;/boot (ブートローダー用) パーティション&lt;/td&gt;
&lt;td&gt;2 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sda3&lt;/td&gt;
&lt;td&gt;システム (root) パーティションを含む論理ボリュームを格納したパーティション&lt;/td&gt;
&lt;td&gt;30 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ubuntu--vg-ubuntu--lv&lt;/td&gt;
&lt;td&gt;論理ボリューム&lt;/td&gt;
&lt;td&gt;15 GB 使用中&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;物理ボリュームのボリュームグループ (&lt;code&gt;ubuntu-vg&lt;/code&gt;) は、パーティションサイズ全体に割り当てられていて、&lt;br&gt;
ボリュームグループ内の論理ボリューム (&lt;code&gt;ubuntu-lv&lt;/code&gt;) は現在 15 GB 使用中です。&lt;/p&gt;

&lt;p&gt;この例では、ボリュームグループに空きがあるため、論理ボリュームのサイズを変更する必要はありません。&lt;/p&gt;
&lt;h4&gt;
  
  
  ステップ 2-2: 論理ボリュームのサイズを縮小する
&lt;/h4&gt;

&lt;p&gt;ここで取り上げた例では、論理ボリュームのサイズの変更をする必要はありませんが、&lt;br&gt;
論理ボリュームのサイズを変更する方法を説明します。&lt;/p&gt;
&lt;h5&gt;
  
  
  1) 空き容量の確認
&lt;/h5&gt;

&lt;p&gt;まず、論理ボリューム内の空き容量を確認するために、以下のコマンドを実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt
&lt;span class="nb"&gt;df&lt;/span&gt; /mnt
umount /mnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;15 GB 中の 42% 使用中となっており、論理ボリュームのサイズを縮小することができます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Filesystem                        1K-blocks    Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  15371208 6115404   8453196  42% /mnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  2) ファイルシステムのエラーチェック
&lt;/h5&gt;

&lt;p&gt;論理ボリュームのサイズを縮小する前に、ファイルシステムのエラーチェックを行います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;e2fsck &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; /dev/mapper/ubuntu--vg-ubuntu--lv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  3) ファイルシステムのサイズの縮小
&lt;/h5&gt;

&lt;p&gt;次に、ファイルシステムのサイズを縮小します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;resize2fs &lt;span class="nt"&gt;-p&lt;/span&gt; /dev/mapper/ubuntu--vg-ubuntu--lv 13G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  4) 論理ボリュームのサイズの縮小
&lt;/h5&gt;

&lt;p&gt;最後に、論理ボリュームのサイズを縮小するために、以下のコマンドを実行します。&lt;br&gt;
この例では、2 GB のサイズを縮小 (&lt;code&gt;13GB&lt;/code&gt;) します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lvresize &lt;span class="nt"&gt;-L&lt;/span&gt; 13G /dev/ubuntu-vg/ubuntu-lv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; lvs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果は以下の通りとなり、15 GB から 2 GB 縮小し、13 GB となりました。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  WARNING: Reducing active logical volume to &amp;lt;13.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce ubuntu-vg/ubuntu-lv? [y/n]: y
  Size of logical volume ubuntu-vg/ubuntu-lv changed from &amp;lt;15.00 GiB (3839 extents) to &amp;lt;13.00 GiB (3327 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.

  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-a----- &amp;lt;13.00g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;再度、ファイルシステムのチェックを行い、問題がないか確認します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;e2fsck &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; /dev/mapper/ubuntu--vg-ubuntu--lv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ステップ 2-3: 物理ボリュームのサイズを縮小する
&lt;/h4&gt;

&lt;p&gt;以下のコマンドを実行して、物理ボリュームの使用状況を再度確認します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pvs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果は以下の通りで、17 GB の空き状況となっています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  &amp;lt;30.00g 17.00g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;次に、物理ボリュームのサイズを縮小するために、以下のコマンドを実行します。&lt;br&gt;
この例では、元の 30 GB のサイズを 28 GB に縮小します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pvresize &lt;span class="nt"&gt;--setphysicalvolumesize&lt;/span&gt; 28g /dev/sda3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/dev/sda3: Requested size 28.00 GiB is less than real size &amp;lt;30.00 GiB. Proceed?  [y/n]: y
  WARNING: /dev/sda3: Pretending size is 58720256 not 62908416 sectors.
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;pvs&lt;/code&gt; コマンドの出力結果は以下の通りとなり、28 GB のサイズへ変更されました。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  &amp;lt;28.00g 15.00g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ステップ 2-4: パーティション テーブルの変更
&lt;/h4&gt;

&lt;p&gt;LVM の物理ボリューム・論理ボリュームを変更操作では、パーティションの情報は変更されないため、&lt;br&gt;
以下のコマンドの実行結果の通り、パーティションは依然として 30 GB のサイズのままとなっています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk /dev/sda3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                    MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda3                      8:3    0  30G  0 part
`-ubuntu--vg-ubuntu--lv 253:0    0  13G  0 lvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;fdisk /dev/sda&lt;/code&gt; とコマンドを実行して、パーティションテーブルを書き換えます。&lt;br&gt;
&lt;code&gt;fdisk&lt;/code&gt; はインタラクティブ操作のツールとなっていて、コマンドは以下の通りです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;'p' コマンド: パーティション テーブルの表示&lt;/li&gt;
&lt;li&gt;'d' コマンド: パーティション テーブルの削除&lt;/li&gt;
&lt;li&gt;'n' コマンド: パーティション テーブルの作成&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;コマンド実行の様子は以下の通りで、既存のパーティション テーブルの削除、新しいパーティション テーブルの操作により、&lt;br&gt;
パーティションのテーブルの書き換えを行います。ただし、パーティションに含まれるシグネチャ情報を削除しないように注意してください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): p   &amp;lt;== 'p' を入力する

Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9DB29DC2-4F7D-4E2A-B917-31BE798E6613

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  4198399  4194304   2G Linux filesystem
/dev/sda3  4198400 67106815 62908416  30G Linux filesystem

Command (m for help): d   &amp;lt;== 'd' を入力する
Partition number (1-3, default 3): 3   &amp;lt;== '3' を入力する

Partition 3 has been deleted.

Command (m for help): n   &amp;lt;== 'n' を入力する
Partition number (3-128, default 3): 3   &amp;lt;== '3' を入力する
First sector (4198400-67108830, default 4198400):   &amp;lt;== ENTER を入力する
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-67108830, default 67108830): +28G   &amp;lt;== '+28G' を入力する

Created a new partition 3 of type 'Linux filesystem' and of size 28 GiB.
Partition #3 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: N   &amp;lt;== 'N' を入力する

Command (m for help): p   &amp;lt;== 'p' を入力する

Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9DB29DC2-4F7D-4E2A-B917-31BE798E6613

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  4198399  4194304   2G Linux filesystem
/dev/sda3  4198400 62918655 58720256  28G Linux filesystem

Command (m for help): w   &amp;lt;== パーティションを確認し、問題なければ 'w' を入力して、パーティションテーブル情報をディスクに書き込む
The partition table has been altered.
Syncing disks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;物理ボリュームに問題がないか、以下のコマンドを実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pvdisplay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果は以下の通りです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               &amp;lt;28.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              7167
  Free PE               3840
  Allocated PE          3327
  PV UUID               50Kkwj-1v59-d5IX-GNUS-Goph-v6fo-5p7CKU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ステップ 3: EFI パーティションの作成
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1) EFI パーティション テーブルの作成
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;fdisk&lt;/code&gt; コマンドを使って、EFI パーティションを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): p   &amp;lt;== 'p' を入力する

Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9DB29DC2-4F7D-4E2A-B917-31BE798E6613

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  4198399  4194304   2G Linux filesystem
/dev/sda3  4198400 62918655 58720256  28G Linux filesystem

Command (m for help): n   &amp;lt;== 'n' を入力する
Partition number (4-128, default 4): 4   &amp;lt;== '4' を入力する
First sector (62918656-67108830, default 62918656):   &amp;lt;== ENTER を入力する
Last sector, +/-sectors or +/-size{K,M,G,T,P} (62918656-67108830, default 67108830):   &amp;lt;== ENTER を入力する

Created a new partition 4 of type 'Linux filesystem' and of size 2 GiB.

Command (m for help): t   &amp;lt;== 't' を入力する
Partition number (1-4, default 4): 4   &amp;lt;== '4' を入力する
Partition type or alias (type L to list all): 1   &amp;lt;== '1' を入力する

Changed type of partition 'Linux filesystem' to 'EFI System'.

Command (m for help): w   &amp;lt;== 'w' を入力する
The partition table has been altered.
Syncing disks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2) EFI パーティションのフォーマット
&lt;/h4&gt;

&lt;p&gt;まず、以下のコマンドでパーティション情報を確認します。&lt;/p&gt;

&lt;p&gt;EFI パーティションは &lt;code&gt;/dev/sda4&lt;/code&gt; となります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk /dev/sda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの実行結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  32G  0 disk
|-sda1                      8:1    0   1M  0 part
|-sda2                      8:2    0   2G  0 part
|-sda3                      8:3    0  28G  0 part
| `-ubuntu--vg-ubuntu--lv 253:0    0  13G  0 lvm
`-sda4                      8:4    0   2G  0 part
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドを実行して、&lt;code&gt;/dev/sda4&lt;/code&gt; パーティションを FAT32 でフォーマットします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mkfs.vfat &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; 32 /dev/sda4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの実行結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkfs.fat 4.2 (2021-01-31)
/dev/sda4 has 255 heads and 63 sectors per track,
hidden sectors 0x3c01000;
logical sector size is 512,
using 0xf8 media descriptor, with 4190130 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 4088 sectors, and provides 522740 clusters.
There are 32 reserved sectors.
Volume ID is ad004b99, no volume label.
Searching for bad blocks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ステップ 4: Grub EFI のインストール
&lt;/h3&gt;

&lt;p&gt;EFI パーティションの作成が完了したら、EFI ブート用の Grub ブートローダーをインストールします。&lt;/p&gt;

&lt;h4&gt;
  
  
  1) 起動ディスクのマウント
&lt;/h4&gt;

&lt;p&gt;以下のコマンドを実行し、起動ディスクをマウントします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mount /dev/ubuntu-vg/ubuntu-lv /mnt
mount /dev/sda2 /mnt/boot/
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /mnt/boot/efi
mount /dev/sda4 /mnt/boot/efi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2) boot パーティションのバックアップ
&lt;/h4&gt;

&lt;p&gt;以下のコマンドを実行し、起動ディスクの /boot パーティションのバックアップをとります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-rp&lt;/span&gt; /mnt/boot /mnt/boot2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3) Grub EFI パッケージの取得
&lt;/h4&gt;

&lt;p&gt;以下のコマンドを実行し、Grub EFI パッケージをネットワーク経由でダウンロードし、ライブサーバー環境にインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
apt &lt;span class="nb"&gt;install &lt;/span&gt;grub-efi-amd64 &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4) Grub EFI のインストール
&lt;/h4&gt;

&lt;p&gt;以下のコマンドを実行し、起動ディスクに Grub EFI をインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-rp&lt;/span&gt; /mnt/boot/grub /mnt/boot/grub.old
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /mnt/boot/efi/EFI

&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; /usr /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;mount &lt;span class="nt"&gt;--bind&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt; /mnt&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done

&lt;/span&gt;&lt;span class="nb"&gt;chroot&lt;/span&gt; /mnt

grub-install &lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x86_64-efi /dev/sda
grub-install &lt;span class="nt"&gt;--recheck&lt;/span&gt; /dev/sda

update-grub2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ステップ 5: /etc/fstab の編集
&lt;/h3&gt;

&lt;p&gt;Grub EFI ブートローダーのインストールが完了したら、&lt;br&gt;
最後に /etc/fstab を編集して、EFI パーティションをマウントするよう設定します。&lt;/p&gt;

&lt;p&gt;以下のコマンドを実行し、パーティションの UUID を確認します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;blkid /dev/sda4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの実行結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/dev/sda4: UUID="XXXX-XXXX" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="5c027d5d-e842-b54c-a013-ee2c6a325b19"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記の "XXXX-XXXX" がパーティションの UUID となります。&lt;br&gt;
パーティションごとに固有の UUID となりますので、それぞれの環境の UUID に置き換えてください。&lt;/p&gt;

&lt;p&gt;以下のコマンドを実行して、&lt;code&gt;/mnt/etc/fstab&lt;/code&gt; にマウントポイントのエントリを追加します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"/dev/disk/by-uuid/XXXX-XXXX /boot/efi vfat defaults 0 1"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /mnt/etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;以上の作業により、EFI ブートが可能なディスクに変更されました。&lt;br&gt;
ライブサーバーを &lt;code&gt;reboot&lt;/code&gt; コマンドで再起動すると、第 2 世代 Hyper-V 仮想マシンで Ubuntu Linux が起動できるようになります。&lt;/p&gt;

&lt;p&gt;セキュアブートを有効にした構成にはなっていないため、仮想マシンの設定ではセキュアブートを無効にしたままにします。&lt;/p&gt;

&lt;p&gt;Ubuntu Linux 16.06 以降のバージョンでは、マイクロソフトの提供する Ubuntu Linux 用のセキュアブート環境が用意されています。&lt;br&gt;
詳細な手順については、&lt;a href="https://shigeyf.dev/posts/convert-ubuntu-disk-from-bios-to-efi/../enable-secure-boot-in-ubuntu-vm/"&gt;こちらの記事&lt;/a&gt; を参照ください。&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>bios</category>
      <category>efi</category>
      <category>grub</category>
    </item>
    <item>
      <title>仮想ディスクの変換 (VMDK 形式から VHD/VHDX 形式への変換)</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Mon, 24 Apr 2023 14:28:12 +0000</pubDate>
      <link>https://dev.to/shigeyf/convert-vmdk-to-vhdx-3bl0</link>
      <guid>https://dev.to/shigeyf/convert-vmdk-to-vhdx-3bl0</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、&lt;a href="https://shigeyf.dev/posts/convert-vmdk-to-vhdx/../migrate-ubuntu-vm-from-vmware-to-hyper-v/" rel="noopener noreferrer"&gt;記事: Ubuntu VM の移行 (VMware から Hyper-V へ)&lt;/a&gt;&lt;br&gt;
で説明した以下の移行手順の ステップ 1 について説明します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)&lt;/li&gt;
&lt;li&gt;open-vm-tools のアンインストール&lt;/li&gt;
&lt;li&gt;(オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換&lt;/li&gt;
&lt;li&gt;(オプション) Secure Boot の有効化&lt;/li&gt;
&lt;li&gt;Hyper-V 統合サービスのインストール&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  VMDK ディスクを VHD/VHDX ディスクへ変換する
&lt;/h2&gt;

&lt;p&gt;VMware 仮想マシンでは仮想ディスクに VMDK 形式を利用しているため、Hyper-V 仮想マシンで利用できる仮想ディスク形式 (VHD/VHDX) とは異なります。&lt;br&gt;
Hyper-V で同じ仮想ディスクを利用するためには、VMDK 形式を VHD/VHDX 形式に変換する必要があります。&lt;/p&gt;
&lt;h3&gt;
  
  
  MVMC (Microsoft Virtual Machine Converter) のインストール
&lt;/h3&gt;

&lt;p&gt;仮想ディスク VMDK 形式は、マイクロソフトが 2014 年にリリースした&lt;br&gt;
&lt;a href="https://techcommunity.microsoft.com/t5/system-center-blog/microsoft-virtual-machine-converter-3-0-is-now-available-for/ba-p/349874" rel="noopener noreferrer"&gt;MVMC (Microsoft Virtual Machine Converter) 3.0&lt;/a&gt;&lt;br&gt;
を利用して、VHDX 形式に変換することができました。&lt;/p&gt;

&lt;p&gt;2023-03-16 現在、リリース記事内のリンクは無効となっていてダウンロードすることはできませんが、&lt;br&gt;
以下のマイクロソフトのダウンロード URL からダウンロードすることができます。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://download.microsoft.com/download/9/1/E/91E9F42C-3F1F-4AD9-92B7-8DD65DA3B0C2/mvmc_setup.msi" rel="noopener noreferrer"&gt;http://download.microsoft.com/download/9/1/E/91E9F42C-3F1F-4AD9-92B7-8DD65DA3B0C2/mvmc_setup.msi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;インストーラー ファイルのハッシュ値は以下の通りです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SHA256 = 520B0D08E0B9D2D95206369E56461D3873FB208F507FBCCC28651D43ABA37F33
SHA-1 = F67812339083376507F51A0B28853C38A3488CF7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  仮想ディスク変換ツールの実行
&lt;/h3&gt;

&lt;p&gt;MSMC 変換ツールには、GUI 変換ツールも付属しますが、&lt;br&gt;
この記事では PowerShell コマンドを使って仮想ディスクの変換を行います。&lt;/p&gt;

&lt;p&gt;以下のコマンドを実行して、&lt;br&gt;
&lt;code&gt;Import-Module&lt;/code&gt; コマンドで MVMC PowerShell コマンドレットをロードし、&lt;br&gt;
&lt;code&gt;ConvertTo-MvmcVirtualHardDisk&lt;/code&gt; コマンドで VMDK 形式の仮想ディスクファイルを VHDX 形式に変換します。&lt;/p&gt;

&lt;p&gt;以下の例では、VMDK 形式のファイルは &lt;code&gt;Ubuntu_OsDisk.vmdk&lt;/code&gt; という名前で、&lt;code&gt;OsDisk.vhdx&lt;/code&gt; という名前の VHDX 形式（ダイナミック）に変換します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Import-Module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ConvertTo-MvmcVirtualHardDisk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SourceLiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Ubuntu_OsDisk.vmdk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VhdType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DynamicHardDisk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VhdFormat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Vhdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DestinationLiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;OsDisk.vhdx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;オプション&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-SourceLiteralPath&lt;/td&gt;
&lt;td&gt;変換元の VMDK ファイルのパス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-VhdType&lt;/td&gt;
&lt;td&gt;VHD のタイプ (FixedHardDisk または DynamicHardDisk)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-VhdFormat&lt;/td&gt;
&lt;td&gt;VHD の形式　(Vhd または Vhdx)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-DestinationLiteralPath&lt;/td&gt;
&lt;td&gt;変換先の VHD/VHDX ファイルのパス&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;コマンドレットの詳細な説明については&lt;br&gt;
&lt;a href="https://download.microsoft.com/download/9/1/E/91E9F42C-3F1F-4AD9-92B7-8DD65DA3B0C2/MVMC_cmdlets.doc" rel="noopener noreferrer"&gt;MVMC_cmdlets.doc&lt;/a&gt;&lt;br&gt;
ファイルを参照してください。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;ConvertTo-MvmcVirtualHardDisk&lt;/code&gt; コマンドは管理者権限が必要となるため、&lt;br&gt;
管理者権限に昇格していない PowerShell コマンドラインで実行すると以下のエラーが表示されます。&lt;br&gt;
管理者権限で昇格済みの PowerShell コマンドラインで実行してください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ConvertTo-MvmcVirtualHardDisk: Local administrator privileges are required.
ConvertTo-MvmcVirtualHardDisk: One or more errors occurred. (Local administrator privileges are required.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Disk Database Entry に関する変換エラーが出る場合
&lt;/h3&gt;

&lt;p&gt;現在 MVMC 変換ツールのメンテナンスが行われていないため、&lt;code&gt;ConvertTo-MvmcVirtualHardDisk&lt;/code&gt; コマンドの実行で以下のエラーが出る場合があります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;手持ちの仮想ディスクの変換を実行した際にも、最近作成した VMware 仮想ディスクでエラーが出ました。&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ConvertTo-MvmcVirtualHardDisk: The entry 4 is not a supported disk database entry for the descriptor.
ConvertTo-MvmcVirtualHardDisk: One or more errors occurred. (The entry 4 is not a supported disk database entry for the descriptor.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;このエラーは、MVMCツールがサポートしていない DDB (Disk Database) エントリ情報が VMDK に設定されている場合に発生します。&lt;br&gt;
サポートしていないエントリーを無効にするために、VMDK ファイルを編集します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VMDK ファイルが分割されている場合

&lt;ul&gt;
&lt;li&gt;VMDK DDB エントリは、マスターファイル (&lt;code&gt;*-sXXX.vmdk&lt;/code&gt; という名前規則でない &lt;code&gt;*.vmdk&lt;/code&gt; ファイルでテキスト形式となっている) に格納されているため、テキストエディタで直接編集します。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VMDK ファイルが単一ファイルの場合&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VMDK DDB エントリは、VMDK ファイル (バイナリ形式) に埋め込まれています。このエントリ情報の書き換えについては、&lt;a href="http://sanbarrow.com/files/dsfok.zip" rel="noopener noreferrer"&gt;DSFOK ツール&lt;/a&gt; を利用して行います。&lt;/li&gt;
&lt;li&gt;DSFOK ツールの詳細については、&lt;a href="http://sanbarrow.com/vmdk-howtos.html#editvmdk" rel="noopener noreferrer"&gt;こちらの記事 (英語)&lt;/a&gt;を参照しました。&lt;/li&gt;
&lt;li&gt;以下のコマンドを利用して、DDB エントリ情報 (ファイルの先頭から 512 バイトの位置から 1024 バイト) を取り出します。
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dsfo.exe Ubuntu_OsDisk.vmdk 512 1024 descriptor.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* 取り出した DDB エントリ情報 (`descriptor.txt`) をテキストエディタで編集したら、
以下のコマンドを利用して、DDB エントリ情報 (ファイルの先頭から 512 バイトの位置から 1024 バイト) を書き出します。
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```cmd
dsfi.exe Ubuntu_OsDisk.vmdk 512 1024 descriptor.txt
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;DDB エントリ情報は以下のような内容になります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=a48f63c4
parentCID=ffffffff
createType="monolithicSparse"

# Extent description
RW 134217728 SPARSE "Ubuntu-LTS-x64.vmdk"

# The Disk Data Base
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "8354"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "3bf70afaa672951de3328531a48f63c4"
ddb.toolsInstallType = "4"
ddb.toolsVersion = "12320"
ddb.uuid = "60 00 C2 97 7a d0 13 78-1f e0 18 0f 03 1f 8f ff"
ddb.virtualHWVersion = "19"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記のエラーの場合、該当部分を以下のようにコメントアウトする (&lt;code&gt;#&lt;/code&gt; を追加する) ことで、&lt;br&gt;
変換コマンドのエラーを回避することができました。&lt;/p&gt;

&lt;p&gt;変換前：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ddb.toolsInstallType = "4"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;変換後：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#ddb.toolsInstallType = "4"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fshigeyf.dev%2Fposts%2Fconvert-vmdk-to-vhdx%2F.%2Fconvert-vmdk-to-vhd-powershell-screenshot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fshigeyf.dev%2Fposts%2Fconvert-vmdk-to-vhdx%2F.%2Fconvert-vmdk-to-vhd-powershell-screenshot.jpg" alt="コマンド実行のスクリーンショット" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VMDK DDB エントリ情報を編集後にコマンドを実行すると、正常に変換が開始します。変換が完了すると以下の結果のメッセージが表示されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination                     Source
-----------                     ------
Z:\shigeyf\VMs\work\OsDisk.vhdx .\Ubuntu-LTS-x64.vmdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;この手順ガイドは、VMware 仮想マシンを Hyper-V に変換するときに得た経験と、Google 検索で得られた記事等に基づいて作成しました。&lt;/p&gt;

&lt;p&gt;この記事に記載されている情報に基づいて行った結果についての損失や損害について責任を負いません。&lt;br&gt;
仮想ディスクの変換を行う際には、十分な容量を確保した環境で、必ず仮想ディスクファイルのバックアップを必ず行ってから、自身の責任の元で実行してください。&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>vmware</category>
      <category>hyperv</category>
      <category>convert</category>
    </item>
    <item>
      <title>Ubuntu VM の移行 (VMware から Hyper-V へ)</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Mon, 24 Apr 2023 14:26:50 +0000</pubDate>
      <link>https://dev.to/shigeyf/migrate-ubuntu-vm-from-vmware-to-hyper-v-3mh9</link>
      <guid>https://dev.to/shigeyf/migrate-ubuntu-vm-from-vmware-to-hyper-v-3mh9</guid>
      <description>&lt;h2&gt;
  
  
  VMware 仮想マシンを Hyper-V へ移行する
&lt;/h2&gt;

&lt;p&gt;これまで、Windows の開発環境で&lt;br&gt;
&lt;a href="https://www.vmware.com/jp/products/workstation-player/workstation-player-evaluation.html"&gt;VMware Workstation Player&lt;/a&gt;&lt;br&gt;
(個人利用では無償バージョンを利用することができる) を使って開発用の仮想化環境 (Ubuntu Linux マシン等) を用意していましたが、&lt;br&gt;
新しい PC の購入に伴い、開発環境を引っ越しすることにしました。&lt;br&gt;
この引っ越しに伴って、仮想化マシンも Hyper-V へ引っ越しすることにしました。&lt;/p&gt;

&lt;p&gt;Ubuntu OS の VMware 仮想マシンを Hyper-V へ移行するには以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換&lt;/li&gt;
&lt;li&gt;新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)&lt;/li&gt;
&lt;li&gt;open-vm-tools のアンインストール&lt;/li&gt;
&lt;li&gt;(オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換
&lt;/li&gt;
&lt;li&gt;(オプション) Secure Boot の有効化
&lt;/li&gt;
&lt;li&gt;Hyper-V 統合サービスのインストール&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  ステップ 1: VMDK ディスクを VHD/VHDX ディスクへ変換する
&lt;/h3&gt;

&lt;p&gt;VMware 仮想マシンでは仮想ディスクに VMDK 形式を利用しているため、Hyper-V 仮想マシンで利用できる仮想ディスク形式 (VHD/VHDX) とは異なります。&lt;br&gt;
Hyper-V で同じ仮想ディスクを利用するためには、VMDK 形式を VHD/VHDX 形式に変換する必要があります。&lt;/p&gt;

&lt;p&gt;仮想ディスク VMDK 形式は、マイクロソフトが 2014 年にリリースした&lt;br&gt;
&lt;a href="https://techcommunity.microsoft.com/t5/system-center-blog/microsoft-virtual-machine-converter-3-0-is-now-available-for/ba-p/349874"&gt;MVMC (Microsoft Virtual Machine Converter) 3.0&lt;/a&gt;&lt;br&gt;
を利用して、VHDX 形式に変換することができました。&lt;/p&gt;

&lt;p&gt;詳細な手順については、&lt;a href="https://shigeyf.dev/posts/migrate-ubuntu-vm-from-vmware-to-hyper-v/../convert-vmdk-to-vhdx/"&gt;こちらの記事&lt;/a&gt; を参照ください。&lt;/p&gt;
&lt;h3&gt;
  
  
  ステップ 2: 新しい Hyper-V 仮想マシンを作成
&lt;/h3&gt;

&lt;p&gt;ほとんどの場合、VMware で作成した Ubuntu Linux の仮想マシンは BIOS ブートとなっています。&lt;/p&gt;

&lt;p&gt;BIOS ブートとなっているかどうかを確認するには、移行前に VMware 仮想環境で以下のコマンドを実行してください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fdisk &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コマンドの出力結果は以下の通りです。&lt;br&gt;
&lt;code&gt;/dev/sda&lt;/code&gt; のディスクに &lt;strong&gt;BIOS boot&lt;/strong&gt; のパーティションが表示されています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disk /dev/loop0: ... (中略)
   :
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9DB29DC2-4F7D-4E2A-B917-31BE798E6613

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  4198399  4194304   2G Linux filesystem
/dev/sda3  4198400 67106815 62908416  30G Linux filesystem


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 15 GiB, 16101933056 bytes, 31449088 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BIOS ブートのディスクを正しく起動するには、「&lt;strong&gt;第 1 世代&lt;/strong&gt;」の&lt;br&gt;
Hyper-V 仮想マシンを作成する必要がありますので、注意してください。&lt;/p&gt;

&lt;p&gt;Hyper-V 仮想マシンの詳細な作成方法は&lt;a href="https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/get-started/create-a-virtual-machine-in-hyper-v?tabs=hyper-v-manager"&gt;この記事&lt;/a&gt;を参照してください (ここでは割愛します)。&lt;br&gt;
「既存の仮想ハード ディスクを使用する」を選択して変換した仮想ディスクを指定してください。&lt;/p&gt;

&lt;p&gt;Hyper-V 仮想マシンを作成する際のフォルダ構成は、以下のような構成がおすすめです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;仮想マシンの名前のフォルダー
├─Virtual Machines
├─Virtual Hard Disks : ここに変換した VHD/VHDX ファイルをコピーする
└─Snapshots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ステップ 3: open-vm-tools のアンインストール
&lt;/h3&gt;

&lt;p&gt;VMware 仮想マシンに Ubuntu Linux をインストールすると、自動的に &lt;code&gt;open-vm-tools&lt;/code&gt; パッケージがインストールされています。&lt;br&gt;
このパッケージのアンインストールをします。&lt;/p&gt;

&lt;p&gt;アンインストールの実行:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove open-vm-tools &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;削除されたか確認する:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt list | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"open-vm-tools/"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のように &lt;code&gt;residual-config&lt;/code&gt; と表示されている場合、パッケージの残骸 (構成ファイルなど) が残っている状態を表しています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;open-vm-tools/jammy-updates,now 2:12.1.0-1~ubuntu0.22.04.1 amd64 [residual-config]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドで構成ファイルを削除します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt purge open-vm-tools &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドを実行して、&lt;code&gt;open-vm-tools&lt;/code&gt; に依存するパッケージで不要なパッケージを自動的に削除します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt autoremove &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ステップ 4: (オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換
&lt;/h3&gt;

&lt;p&gt;第 2 世代 Hyper-V 仮想マシンで Ubuntu Linux を起動するには、&lt;br&gt;
Ubuntu Linux の起動ディスクを BIOS ブートから EFI ブートへ変更する必要があります。&lt;/p&gt;

&lt;p&gt;詳細な手順については、&lt;a href="https://shigeyf.dev/posts/migrate-ubuntu-vm-from-vmware-to-hyper-v/../convert-ubuntu-disk-from-bios-to-efi/"&gt;こちらの記事&lt;/a&gt; を参照ください。&lt;/p&gt;
&lt;h3&gt;
  
  
  ステップ 5: (オプション) Secure Boot の有効化
&lt;/h3&gt;

&lt;p&gt;第 2 世代 Hyper-V 仮想マシンの Ubuntu Linux でセキュアブートを有効にするには、&lt;br&gt;
セキュアブートに対応したカーネルと Grub ブートローダーをインストールする必要があります。&lt;/p&gt;

&lt;p&gt;詳細な手順については、&lt;a href="https://shigeyf.dev/posts/migrate-ubuntu-vm-from-vmware-to-hyper-v/../enable-secure-boot-in-ubuntu-vm/"&gt;こちらの記事&lt;/a&gt; を参照ください。&lt;/p&gt;
&lt;h3&gt;
  
  
  ステップ 6: Hyper-V 統合サービスのインストール
&lt;/h3&gt;

&lt;p&gt;以下のコマンドを実行して、Hyper-V 統合サービスをインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;linux-virtual linux-cloud-tools-virtual linux-tools-virtual &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;再起動後、以下のコマンドを実行して、Hyper-V 統合サービスが実行しているか確認することができます。&lt;/p&gt;

&lt;p&gt;Hyper-V 用のカーネルモジュールの確認のコマンド:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsmod | &lt;span class="nb"&gt;grep &lt;/span&gt;hv_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;出力結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hv_balloon             36864  0
hv_storvsc             24576  3
hv_netvsc              98304  0
scsi_transport_fc      98304  1 hv_storvsc
hv_utils               45056  3
hv_vmbus              135168  8 hv_balloon,hv_utils,hv_netvsc,hid_hyperv,hv_storvsc,hyperv_keyboard,hyperv_drm,hyperv_fb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hyper-V 用デーモンの確認のコマンド:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;compgen&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; hv_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;出力結果:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hv_fcopy_daemon
hv_vss_daemon
hv_set_ifconfig
hv_get_dhcp_info
hv_get_dns_info
hv_kvp_daemon
hv_fcopy_daemon
hv_vss_daemon
hv_set_ifconfig
hv_get_dhcp_info
hv_get_dns_info
hv_kvp_daemon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  移行後のその他の作業
&lt;/h2&gt;

&lt;p&gt;仮想化環境の変更により、仮想マシンのハードウェアの変更が発生しています。&lt;br&gt;
以下の作業を行います。&lt;/p&gt;
&lt;h3&gt;
  
  
  ネットワークインターフェースの変更
&lt;/h3&gt;

&lt;p&gt;VMware 仮想マシンでは、ネットワークインターフェースは &lt;code&gt;ens33&lt;/code&gt; と認識されましたが、&lt;br&gt;
Hyper-V 仮想マシンでは &lt;code&gt;eth0&lt;/code&gt; と認識されます。&lt;/p&gt;

&lt;p&gt;ネットワーク接続の構成ファイル (&lt;code&gt;/etc/netplan/00-installer-config.yaml&lt;/code&gt;) を&lt;br&gt;
(例えば 以下のように) 正しく変更してください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      dhcp4: true
  version: 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  /dev/fd0 に関するエラー
&lt;/h3&gt;

&lt;p&gt;コンソール出力に以下のようなエラーが表示されたり、&lt;code&gt;sudo dmesg&lt;/code&gt; コマンドの実行結果に以下のエラーが表示される場合があります。&lt;br&gt;
起動している Hyper-V の仮想マシンにフロッピーデバイスがないため、表示されるエラーです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;floppy0: disk absent or changed during operation
blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
floppy0: disk absent or changed during operation
blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
Buffer I/O error on dev fd0, logical block 0, async page read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;VMware 仮想マシンでは、仮想マシンにフロッピードライブを接続していなくても、&lt;br&gt;
仮想マシンのマザーボードにフロッピードライブのインターフェースが用意されているため、&lt;br&gt;
floppy カーネルモジュールが読み込まれています。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;以下のコマンドで、フロッピーデバイスを無効化します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rmmod floppy
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"blacklist floppy"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/modprobe.d/blacklist-floppy.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg-reconfigure initramfs-tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;VMware 仮想化環境でインストールした Ubuntu Linux 仮想マシンを Hyper-V 仮想化環境に移行することができました。&lt;/p&gt;

&lt;p&gt;最新の Ubuntu Linux インストーラーでは、第 2 世代の Hyper-V 仮想マシンでセキュアブートを有効にした仮想マシンを&lt;br&gt;
自動的にインストールすることができるようになっていますが、既存の資産を活用したい場合などは、このガイドを参考に移行をしてみてください。&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>vmware</category>
      <category>hyperv</category>
      <category>convert</category>
    </item>
    <item>
      <title>Wowza Streaming Engine での HLS ストリーミング</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Thu, 30 Mar 2023 14:24:59 +0000</pubDate>
      <link>https://dev.to/shigeyf/wse-configs-hls-4230</link>
      <guid>https://dev.to/shigeyf/wse-configs-hls-4230</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、Wowza Streaming Engine での HLS 方式でのストリーミングに関する&lt;br&gt;
技術的に詳細な設定・カスタマイズの方法について触れます。&lt;/p&gt;
&lt;h2&gt;
  
  
  HLS プレイリスト (マニフェスト) について
&lt;/h2&gt;

&lt;p&gt;HLS プレイリストには、&lt;code&gt;EXT-X-VERSION&lt;/code&gt; タグと呼ばれる Apple HLS (HTTP Live Streaming) のプレイリスト互換性バージョンを示すタグが含まれています。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine の HTTPStreamer の既定の設定では、Apple HLS 互換性バージョン 3 のプレイリストを生成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXT-X-VERSION:3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;VOD またはライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) 内の&lt;br&gt;
以下のパラメーターで HLS プレイリストの互換性バージョンを制御することができます。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine では、バージョン 3 から 6 までをサポートしています。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoExtXVersion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;プレイリストの互換性バージョンを指定する (既定値: 3)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Wowza Streaming Engine では、指定された &lt;code&gt;EXT-X-VERSION&lt;/code&gt; (プレイリストの互換性バージョン) に基づいてプレイリスト機能を有効または無効にすることができます。&lt;/p&gt;

&lt;p&gt;次の機能は &lt;code&gt;EXT-X-VERSION&lt;/code&gt; の値によって制御されます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;浮動小数点形式によるセグメント長&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;EXT-X-VERSION&lt;/code&gt; が 3 以上の場合、整数形式ではなく浮動小数点形式を使用してセグメント長を表します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;コーデック形式&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;EXT-X-VERSION&lt;/code&gt; が 4 以上の場合、iOS 4.0 以降のコーデック形式 (例: avc1.42c015) を使用して、playlist.m3u8 レスポンスのコーデック値を表します&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EXT-X-VERSION&lt;/code&gt; が 4 未満の場合、iOS 4.0 以前のコーデック形式 (例: avc1.66.21) を使用します&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cupertinoCodecStringFormatId&lt;/code&gt; (パス名:/Root/Application/HTTPStreamer) プロパティの値によってコーデック形式の制御することも可能です&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Integer&lt;/code&gt; 型で、値が 2 の場合、iOS 4.0 以降のコーデック形式を使用します&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Integer&lt;/code&gt; 型で、値が 1 の場合、iOS 4.0 以前のコーデック形式を使用します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  HLS セグメントの長さについて
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine では、HLS ストリーミングを行うためにビデオファイルをセグメントに分割してプレイヤーに提供します。&lt;/p&gt;

&lt;p&gt;分割するセグメントの長さは、既定では 10 秒 (10000 ミリ秒) となっていますが、&lt;br&gt;
以下のアプリケーション プロパティを変更することでセグメントの長さをカスタマイズすることができます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注意&lt;/p&gt;

&lt;p&gt;HLS アダプティブストリーミングが正しく動作するには、ビデオセグメントの始まりは必ずキーフレーム (I-フレーム) で開始する必要があり、&lt;br&gt;
ビデオセグメントの境界は キーフレームの間隔と整合性がとれている必要があります。&lt;br&gt;
例えば、10秒のビデオセグメントの場合、2秒、2.5秒、5秒、10秒などのキーフレーム間隔でエンコードされたビデオを入力する必要があります。&lt;br&gt;
これにより、再生中に異なるビットレートや解像度のビデオストリーム間で再生の切り替えを正しく行うことができます。&lt;/p&gt;

&lt;p&gt;このため、Wowza Streaming Engine に入力するビデオ (VOD ファイルやライブストリーム) は、指定するセグメントの長さに気を付けて入力する必要があります。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  VOD ストリーミングのセグメントの長さの設定パラメーター
&lt;/h3&gt;

&lt;p&gt;VOD アプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS VOD ストリーミングのセグメントの長さを変更することができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoChunkDurationTarget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;セグメントの長さ (ミリ秒) を指定する (既定値: 10000)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  ライブストリーミングのセグメントの長さの設定パラメーター
&lt;/h3&gt;

&lt;p&gt;ライブ入力デバイス等からのオーディオ・ビデオ パケットは、 Wowza Streaming Engine で時刻に基づいてセグメントに分割されます。&lt;br&gt;
各セグメントの長さは、&lt;code&gt;cupertinoChunkDurationTarget&lt;/code&gt; プロパティによって制御されます。&lt;br&gt;
セグメントは、作成時にアクセス可能なセグメント リストに追加されます。&lt;br&gt;
リストに格納される項目の最大数は、&lt;code&gt;cupertinoMaxChunkCount&lt;/code&gt; プロパティによって制御されます。&lt;br&gt;
MPEG-DASH クライアント (プレイヤー) がストリームを要求すると、Wowza Streaming Engine は最近追加された n 個のセグメントを含むマニフェストを提供します。&lt;br&gt;
マニフェストで返されるアイテムの数 (n) は、&lt;code&gt;cupertinoPlaylistChunkCount&lt;/code&gt; プロパティによって制御されます。&lt;/p&gt;

&lt;p&gt;また、ライブストリーム リピーター システムは、オリジン/エッジの構成で単一のライブストリームを複数のエッジ サーバーに配信するために使用されます。&lt;br&gt;
エッジ サーバーは、ライブストリームを最初に要求するときに、オリジンへセグメント化されたライブストリームのリクエストを行って、クライアントに配信します。&lt;br&gt;
&lt;code&gt;cupertinoRepeaterChunkCount&lt;/code&gt; プロパティは、最初の接続後すぐにオリジンからエッジに送信されるセグメントの数を制御します。&lt;br&gt;
&lt;code&gt;cupertinoRepeaterChunkCount&lt;/code&gt; は &lt;code&gt;cupertinoPlaylistChunkCount&lt;/code&gt; 以上で &lt;code&gt;cupertinoMaxChunkCount&lt;/code&gt; 未満であることが最適です。&lt;br&gt;
この設定パラメーターは、&lt;strong&gt;Live Edge&lt;/strong&gt; タイプのアプリケーションでリピーター構成となっている場合に利用します。&lt;/p&gt;

&lt;p&gt;ライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS ライブストリーミングのセグメントの長さを変更することができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoChunkDurationTarget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;セグメントの長さ (ミリ秒) を指定する (既定値: 10000)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoMaxChunkCount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;WSE 内部で格納する有効なライブストリームのセグメント数を指定する (既定値: 10)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoPlaylistChunkCount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;プレイリストで提供するライブストリームのセグメント数を指定する (既定値: 5)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoRepeaterChunkCount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;エッジからオリジンへの最初の接続後、オリジンからエッジにすぐに送信されるセグメント数を指定する (既定値: 5)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  HLS Audio-only ストリームの設定
&lt;/h2&gt;

&lt;p&gt;過去の Apple デバイス向けの Apple HLS オーサリングガイドラインでは、&lt;br&gt;
3G ネットワークなどの低帯域ネットワークに向けたアクセスのために、&lt;br&gt;
HLS ストリーミング コンテンツに Audio-only (音声のみ) のストリームを用意することが&lt;br&gt;
ガイドラインとして設けられていました。&lt;/p&gt;

&lt;p&gt;例えば、取得したプレイリスト&lt;br&gt;
(例: &lt;a href="https://%5B%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%5D/%5B%E3%82%A2%E3%83%97%E3%83%AA%E5%90%8D%5D/mp4:sample.mp4/playlist.m3u8"&gt;https://[アドレス]/[アプリ名]/mp4:sample.mp4/playlist.m3u8&lt;/a&gt;)&lt;br&gt;
は以下のような内容となります。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;_ao.m3u8&lt;/code&gt; のサフィックスが付いたプレイリスト (以下の例では &lt;code&gt;chunklist_[WowzaセッションID]_ao.m3u8&lt;/code&gt;) が、&lt;br&gt;
Audio-only ストリームのプレイリストです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:BANDWIDTH=868638,CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=512x288
chunklist_w298755728.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=116046,CODECS="mp4a.40.2"
chunklist_w298755728_ao.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;現在のガイドラインには、該当する記載はなくなっているようです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/documentation/http_live_streaming/http_live_streaming_hls_authoring_specification_for_apple_devices"&gt;HTTP Live Streaming (HLS) Authoring Specification for Apple Devices&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;この Audio-only のストリームが追加されるように HLS プレイリストの変更を行うには、以下のプロパティの設定を行います。&lt;/p&gt;

&lt;h3&gt;
  
  
  VOD HLS Audio-only ストリームの設定
&lt;/h3&gt;

&lt;p&gt;VOD アプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS VOD ストリーミングのプレイリストに Audio-only ストリームを追加します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoAutoCreateMultibitratePlaylist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ライブ HLS Audio-only ストリームの設定
&lt;/h3&gt;

&lt;p&gt;ライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS ライブストリーミングのプレイリストに Audio-only ストリームを追加します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoCreateAudioOnlyRendition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoAutoCreateMultibitratePlaylist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  HLS KeyFrames-only プレイリストの設定
&lt;/h2&gt;

&lt;p&gt;Apple のネイティブ HLS プレイヤーでは、VOD コンテンツのトリックプレイ再生をサポートしています。&lt;br&gt;
トリックプレイ再生とは、プレーヤーでコンテンツの巻き戻しや早送りをしてコンテンツのタイムラインを探すときに、&lt;br&gt;
ビューア―に視覚的な手がかりとなるビデオのサムネイルを提供するものです。&lt;/p&gt;

&lt;p&gt;トリックプレイ再生をサポートするために特別な目的のコンテンツを別に作成する必要はなく、&lt;br&gt;
ビデオストリームのキーフレーム&lt;sup id="fnref1"&gt;1&lt;/sup&gt; の場所をプレイヤーに提供するだけです。&lt;br&gt;
ビデオストリームのキーフレームの場所を指定するために、Apple iOS 5 以降では KeyFrames-only プレイリスト (Iフレームのみのプレイリスト) を使用します。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;この設定はラVODアプリケーションにのみ有効な設定です&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wowza Streaming Engine では、KeyFrames-only プレイリストを動的に生成し、ビデオストリームのキーフレームをストリーミングすることができます。&lt;br&gt;
KeyFrames-only プレイリストは、&lt;code&gt;playlist.m3u8&lt;/code&gt; プレイリストの中で &lt;code&gt;EXT-X-I-FRAME-STREAM-INF&lt;/code&gt; タグを使って URL を指定します。&lt;br&gt;
KeyFrames-only プレイリストは &lt;code&gt;EXT-X-I-FRAMES-ONLY&lt;/code&gt; タグを使用してキーフレームのみを提供するプレイリストです。&lt;br&gt;
KeyFrames-only プレイリストでは、&lt;code&gt;EXTINF&lt;/code&gt; タグはセグメントの長さのかわりにキーフレームの間隔を参照します。&lt;/p&gt;

&lt;p&gt;ビデオフレームのエンコード時に他のフレームから独立してエンコードされたビデオ フレームです。&lt;/p&gt;

&lt;p&gt;この I-Frames-only のプレイリストが追加されるように HLS プレイリストの変更を行うには、以下のプロパティの設定を行います。&lt;/p&gt;

&lt;p&gt;VOD アプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS VOD ストリーミングのプレイリストに I-Frames-only プレイリストを追加します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoExtXVersion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;4 以上の値に設定する (既定値: 3)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoCreateKeyFrameOnlyPlaylist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;プレイリストのサンプルは以下の通りです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;playlist.m3u8
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:BANDWIDTH=868638,CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=512x288
chunklist_w1520434929.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=875,CODECS="avc1.42c015",URI="chunklist_w1520434929_ko.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=116046,CODECS="mp4a.40.2"
chunklist_w1520434929_ao.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;KeyFrames-only プレイリスト
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-I-FRAMES-ONLY
#EXTINF:2.0,
#EXT-X-BYTERANGE:999624@376
media_w1520434929_ko_0.ts
#EXTINF:2.0,
#EXT-X-BYTERANGE:999624@376
media_w1520434929_ko_1.ts
#EXTINF:2.0,
#EXT-X-BYTERANGE:999624@376
media_w1520434929_ko_2.ts
#EXTINF:2.0,
#EXT-X-BYTERANGE:999624@376
media_w1520434929_ko_3.ts
  :
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  HLS Audioストリームの TS パッケージングの設定
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine の既定の設定では、HLS Audio ストリームは、MPEG-2 エレメンタリストリームでパッケージングされます。&lt;/p&gt;

&lt;p&gt;以下のプロパティの設定を行うことで、HLS Audio ストリームをビデオストリームと同様に&lt;br&gt;
HLS Audio ストリームを　MPEG-2 トランスポートストリーム (TS) でパッケージングを行います。&lt;/p&gt;

&lt;h3&gt;
  
  
  VOD HLS Audio ストリームの TS パッケージングの設定
&lt;/h3&gt;

&lt;p&gt;VOD アプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS VOD ストリーミングのプレイリストに Audio-only ストリームを追加します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoPacketizeAllStreamsAsTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ライブ HLS Audio ストリームの TS パッケージングの設定
&lt;/h3&gt;

&lt;p&gt;ライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、HLS ライブストリーミングのプレイリストに Audio-only ストリームを追加します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoPacketizeAllStreamsAsTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  タイムコードに基づいたライブストリームのセグメントの番号付けの設定
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine では、エンコーダーから受信したライブストリームにタイムコードが含まれている場合に、&lt;br&gt;
タイムコードに基づいたセグメント (チャンク) の番号付けを行うことができます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;この設定はライブアプリケーションにのみ有効な設定です&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;この機能を有効にするには、ライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下のプロパティを設定します。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;cupertinoCalculateChunkIDBasedOnTimecode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;true に設定する (既定値: false)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;この機能を有効にすると、セグメントの ID はタイムコードを cupertinoChunkDurationTarget 値で割った (割り算の) 商に等しくなります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注意: &lt;code&gt;cupertinoCalculateChunkIDBasedOnTimecode&lt;/code&gt; プロパティは、&lt;br&gt;
時刻同期されたタイムコードを Wowza Streaming Engine に送信するエンコーダーを使う場合のみ有効にしてください。&lt;br&gt;
時刻同期されたタイムコードは、UTC またはその他の時刻をベースに同期するようにします。&lt;/p&gt;

&lt;p&gt;もし、時刻同期されたタイムコードを送信しないエンコーダーのライブソースストリームと &lt;code&gt;cupertinoCalculateChunkIDBasedOnTimecode&lt;/code&gt; が使用されている場合、&lt;br&gt;
ソースストリームが再起動すると セグメント ID は 0 で再起動するか、場合によってはランダムな値で再起動します。&lt;br&gt;
HTTP オリジンを使ってプライマリ サーバーとバックアップ サーバーの2つのソースから取り込まれたライブ ストリームを取り扱う場合、&lt;br&gt;
セグメント ID の整合性がとれなくなってしまうため、特に問題になります。&lt;/p&gt;
&lt;/blockquote&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;キーフレームは、I フレーム、または、イントラ コード化されたフレームと呼ばれることもあり、 ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>hls</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
    <item>
      <title>Wowza Streaming Engine での MPEG-DASH ストリーミング</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Thu, 30 Mar 2023 14:24:46 +0000</pubDate>
      <link>https://dev.to/shigeyf/wse-configs-mpeg-dash-3ccp</link>
      <guid>https://dev.to/shigeyf/wse-configs-mpeg-dash-3ccp</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、Wowza Streaming Engine での MPEG-DASH 方式でのストリーミングに関する&lt;br&gt;
技術的に詳細な設定・カスタマイズの方法について触れます。&lt;/p&gt;

&lt;h2&gt;
  
  
  MPEG-DASH MPD マニフェストについて
&lt;/h2&gt;

&lt;p&gt;MPEG-DASH サーバーは、メディア プレゼンテーション記述 (MPD) マニフェスト ファイルで、&lt;br&gt;
利用可能なメディア セグメント URL のリストをプレーヤーに提供します。&lt;br&gt;
その後、プレイヤーは、中断のない再生を行うために、必要に応じてメディア セグメントを順次要求します。&lt;/p&gt;

&lt;p&gt;MPD ファイル内でこのセグメント URL のリストの識別方法を定義する方式をセグメントアドレス方式とは呼び、&lt;br&gt;
以下のセグメントアドレス方式があります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;セグメント リスト方式

&lt;ul&gt;
&lt;li&gt;利用可能なすべてのセグメントについて、セグメント URL の完全なリストを提供する方式です&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;セグメント テンプレート (時刻ベース) 方式

&lt;ul&gt;
&lt;li&gt;プレイヤーがセグメント URL リストを作成できるようにするための URL テンプレートを提供する方式です&lt;/li&gt;
&lt;li&gt;セグメント URL にはセグメントごとの開始時刻が含まれます&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;セグメント テンプレート (セグメント番号ベース) 方式

&lt;ul&gt;
&lt;li&gt;プレイヤーがセグメント URL リストを作成できるようにするための URL テンプレートを提供する方式です&lt;/li&gt;
&lt;li&gt;セグメント URL にはセグメントごとのセグメントの番号 (インデックス番号など) が含まます&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;セグメント ベース (BaseURL) 方式

&lt;ul&gt;
&lt;li&gt;すべてのセグメントが単一の URL (BaseURL) で識別されるセグメント分割を行わない方式で、セグメントがバイトレンジの HTTP リクエストを通じて取得する方式です&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wowza Streaming Engine の MPEG-DASH サポートでは、セグメントベース方式以外のセグメントアドレス方式の MPD 形式をサポートしていて、&lt;br&gt;
プレイヤーは以下の URL フォーマット指定で必要なマニフェスト形式を指定できます。&lt;/p&gt;

&lt;p&gt;http://[アドレスまたはホスト名]:[ポート]/[アプリケーション名]/[アプリインスタンス]/[ストリーム名]/manifest*&lt;em&gt;_mv[セグメントアドレス方式]&lt;/em&gt;*.mpd&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[セグメントアドレス方式]&lt;/strong&gt;には、以下のいずれかを指定します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mvtime&lt;/strong&gt;: セグメント テンプレート (時間ベース) 方式&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mvlist&lt;/strong&gt;: セグメント リスト方式&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mvnumber&lt;/strong&gt;: セグメント テンプレート (セグメント番号ベース) 方式&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;_mv[セグメント形式]&lt;/strong&gt; の指定がない場合は、&lt;strong&gt;mvtime&lt;/strong&gt; が既定値となります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  MPEG-DASH セグメントの長さについて
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine では、MPEG-DASH ストリーミングを行うためにビデオファイルをセグメントに分割してプレイヤーに提供します。&lt;/p&gt;

&lt;p&gt;分割するセグメントの長さは、既定では 10 秒 (10000 ミリ秒) となっていますが、&lt;br&gt;
以下のアプリケーション プロパティを変更することでセグメントの長さをカスタマイズすることができます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注意&lt;/p&gt;

&lt;p&gt;MPEG-DASH アダプティブストリーミングが正しく動作するには、ビデオセグメントの始まりは必ずキーフレーム (I-フレーム) で開始する必要があり、&lt;br&gt;
ビデオセグメントの境界は キーフレームの間隔と整合性がとれている必要があります。&lt;br&gt;
例えば、10秒のビデオセグメントの場合、2秒、2.5秒、5秒、10秒などのキーフレーム間隔でエンコードされたビデオを入力する必要があります。&lt;br&gt;
これにより、再生中に異なるビットレートや解像度のビデオストリーム間で再生の切り替えを正しく行うことができます。&lt;/p&gt;

&lt;p&gt;このため、Wowza Streaming Engine に入力するビデオ (VOD ファイルやライブストリーム) は、指定するセグメントの長さに気を付けて入力する必要があります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  VOD ストリーミングのセグメントの長さの設定パラメーター
&lt;/h3&gt;

&lt;p&gt;VOD アプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、MPEG-DASH VOD ストリーミングのセグメントの長さを変更することができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/HTTPStreamer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;mpegdashSegmentDurationTarget (バージョン 4.7.8 以降)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;セグメントの長さ (ミリ秒) を指定する (既定値: 10000)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ライブストリーミングのセグメントの長さの設定パラメーター
&lt;/h3&gt;

&lt;p&gt;ライブ入力デバイス等からのオーディオ・ビデオ パケットは、 Wowza Streaming Engine で時刻に基づいてセグメントに分割されます。&lt;br&gt;
各セグメントの長さは、&lt;code&gt;mpegdashSegmentDurationTarget&lt;/code&gt; プロパティによって制御されます。&lt;br&gt;
セグメントは、作成時にアクセス可能なセグメント リストに追加されます。&lt;br&gt;
リストに格納される項目の最大数は、&lt;code&gt;mpegdashMaxSegmentCount&lt;/code&gt; プロパティによって制御されます。&lt;br&gt;
MPEG-DASH クライアント (プレイヤー) がストリームを要求すると、Wowza Streaming Engine は最近追加された n 個のセグメントを含むマニフェストを提供します。&lt;br&gt;
マニフェストで返されるアイテムの数 (n) は、&lt;code&gt;mpegdashPlaylistSegmentCount&lt;/code&gt; プロパティによって制御されます。&lt;/p&gt;

&lt;p&gt;また、ライブストリーム リピーター システムは、オリジン/エッジの構成で単一のライブストリームを複数のエッジ サーバーに配信するために使用されます。&lt;br&gt;
エッジ サーバーは、ライブストリームを最初に要求するときに、オリジンへセグメント化されたライブストリームのリクエストを行って、クライアントに配信します。&lt;br&gt;
&lt;code&gt;mpegdashRepeaterSegmentCount&lt;/code&gt; プロパティは、最初の接続後すぐにオリジンからエッジに送信されるセグメントの数を制御します。&lt;br&gt;
&lt;code&gt;mpegdashRepeaterSegmentCount&lt;/code&gt; は &lt;code&gt;mpegdashPlaylistSegmentCount&lt;/code&gt; 以上で &lt;code&gt;mpegdashMaxSegmentCount&lt;/code&gt; 未満であることが最適です。&lt;br&gt;
この設定パラメーターは、&lt;strong&gt;Live Edge&lt;/strong&gt; タイプのアプリケーションでリピーター構成となっている場合に利用します。&lt;/p&gt;

&lt;p&gt;ライブアプリケーションの &lt;code&gt;Application.xml&lt;/code&gt; (&lt;code&gt;/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml&lt;/code&gt;) の&lt;br&gt;
以下の項目を設定することで、MPEG-DASH ライブストリーミングのセグメントの長さを変更することができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;mpegdashSegmentDurationTarget (バージョン 4.7.8 以降)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;セグメントの長さ (ミリ秒) を指定する (既定値: 10000)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;mpegdashMaxChunkCount (バージョン 4.7.8 以降)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;WSE 内部で格納する有効なライブストリームのセグメント数を指定する (既定値: 10)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;mpegdashPlaylistChunkCount (バージョン 4.7.8 以降)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;プレイリストで提供するライブストリームのセグメント数を指定する (既定値: 5)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XML パス&lt;/td&gt;
&lt;td&gt;/Root/Application/LiveStreamPacketizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティ名 (Name)&lt;/td&gt;
&lt;td&gt;mpegdashRepeaterSegmentCount (バージョン 4.7.8 以降)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティのタイプ (Type)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プロパティの値 (Value) の説明&lt;/td&gt;
&lt;td&gt;エッジからオリジンへの最初の接続後、オリジンからエッジにすぐに送信されるセグメント数を指定する (既定値: 5)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  MPD リダイレクト
&lt;/h2&gt;

&lt;p&gt;サーバーの使用状況の分析や監視を行うための統計情報を提供するために、&lt;br&gt;
Wowza Streaming Engine はそれぞれのストリーミング再生セッションについて HTTP セッション コンテキストを保存します。&lt;/p&gt;

&lt;p&gt;通常の HTTP ストリーミング技術では、プレーヤーがマニフェストを要求したときにセッションが作成されるようになっていて、サーバーはプレイヤーが同じ再生セッションで同じマニフェストに対して追加のリクエストを行うことを期待していません。もし同じマニフェストに対してリクエストがあると新しいセッションが作成されますが、これは別の再生セッションとなります。&lt;/p&gt;

&lt;p&gt;しかし、MPEG-DASH ライブストリーミングの場合は、プレーヤーが (MPEG-DASH の設計上の理由により) 定期的にDASH MPD マニフェストを再リクエストして、新しいセグメントの発行や古いセグメントの有効期限を識別する必要があります。すると、プレーヤーが DASH MPD マニフェストを再リクエストするたびに新しい HTTP セッションが誤って作成されてしまいます。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine では、&lt;strong&gt;MPD.Location リダイレクト機能&lt;/strong&gt; (MPD マニフェスト内部のリダイレクトのメカニズム) か &lt;strong&gt;HTTP リダイレクト機能&lt;/strong&gt;を使用することによりこの問題に対処することができます。&lt;/p&gt;

&lt;h3&gt;
  
  
  MPD.Location リダイレクト機能
&lt;/h3&gt;

&lt;p&gt;MPD.Location リダイレクト機能は、HTTP リダイレクトと同様の機能を提供する MPEG-DASH MPD マニフェストの &lt;code&gt;MPD.Location&lt;/code&gt; 要素のサポートにより、&lt;br&gt;
以下のように実現されています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;MPD.Location&lt;/code&gt; 要素は、オリジナルの MPD URL のファイル名に Wowza セッション ID を埋め込んだ 更新された MPD URL を提供します&lt;/li&gt;
&lt;li&gt;プレーヤーは、そのセッション中の以降のすべての MPD リクエストに対して、更新された MPD URL を使用するようになります&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MPD.Location&lt;/code&gt; 要素は、最初の MPD だけでなく、以降のすべての MPD の中で提供されます&lt;/li&gt;
&lt;li&gt;新しいセッションは、リクエストされた MPD URL に Wowza セッション ID が含まれない MPD URL へのリクエストに対してのみ作成されます

&lt;ul&gt;
&lt;li&gt;それ以外の場合、サーバーはリクエストに含まれる Wowza セッション ID を使用し、同じ HTTP セッション内で続行します&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;例えば、元の MPD URL が以下の場合は、&lt;/p&gt;

&lt;p&gt;http://[アドレス]:1935/[アプリケーション名]/mp4:sample.mp4/manifest_mpm4sav_mvlist.mpd&lt;/p&gt;

&lt;p&gt;新しい URL は次のようになります。&lt;/p&gt;

&lt;p&gt;http://[アドレス]:1935/[アプリケーション名]/mp4:sample.mp4/manifest_mpm4sav_mvlist_w1499067310.mpd&lt;/p&gt;

&lt;p&gt;w1499067310 は埋め込まれた Wowza セッション ID となります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  MPD HTTP リダイレクト機能
&lt;/h3&gt;

&lt;p&gt;MPEG-DASH MPD HTTP リダイレクト機能を使用すると、Wowza Streaming Engine はプレーヤーからの最初の DASH MPD リクエスト&lt;br&gt;
に HTTP リダイレクト ステータス コード (302, 307 等) で応答するように構成されます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP リダイレクトのレスポンスに含まれる Location ヘッダーは、MPD URL のファイル名に Wowza セッションID が埋め込まれた、更新された MPD URL を提供します&lt;/li&gt;
&lt;li&gt;プレーヤーは、そのセッション中の以降のすべての MPD リクエストに新しい URL を使用するようになります&lt;/li&gt;
&lt;li&gt;正しいサーバーが HTTP セッションを作成/管理 (その後、必要に応じてサーバーが MPD URL リダイレクトを実行) するよう、サーバー側の API 呼び出し (&lt;code&gt;httpSession.redirectSession()&lt;/code&gt;) を介して実装されたリダイレクト機能は、MPEG-DASH ストリーミングのセッションに関連するリダイレクトの前に実行されます&lt;/li&gt;
&lt;li&gt;このリダイレクトの仕組みが期待する効果を発揮するためには、リダイレクト後の MPD URL がプレーヤーで保存されて、その再生セッション中の以降のすべての MPD リクエストにその URL が使用される必要があります
&amp;gt; Wowza セッションID の情報を持たない元の MPD URL をセッションで再度使用してはいけません&lt;/li&gt;
&lt;li&gt;新しいセッションは、リクエストさえれた MPD URL に Wowza セッション ID の情報が含まれない MPD URL に対してのみ作成され、それ以外の場合、サーバーは提供されたセッション ID を使用して、同じ HTTP セッション内で続行します&lt;/li&gt;
&lt;li&gt;既定では、HTTP リダイレクトは 307 (一時リダイレクト) ステータスコードを使用します

&lt;ul&gt;
&lt;li&gt;HTTP 1.0 リクエストの場合、サーバーは 302 リダイレクト ステータスコードで上書きします&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mpegdashHttpRedirectDisableStatusCode302Override&lt;/code&gt;, &lt;code&gt;mpegdashHttpRedirectDefaultStatusCode&lt;/code&gt; プロパティを使って、既定の動作を変更できます&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DASH MPD HTTP リダイレクト機能を有効にするには、&lt;code&gt;mpegdashHttpRedirectEnabled&lt;/code&gt; プロパティを使って構成します。&lt;/p&gt;

&lt;p&gt;以下、HTTPリダイレクト機能のパラメーターに関する情報です。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ名 (Name)&lt;/th&gt;
&lt;th&gt;プロパティのタイプ (Type)&lt;/th&gt;
&lt;th&gt;プロパティの値 (Value) の説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashHttpRedirectEnabled&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;true&lt;/strong&gt; に設定すると MPEG-DASH MPD ファイルの HTTP リダイレクトが有効になります: 既定値は &lt;strong&gt;false&lt;/strong&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashHttpRedirectDefaultStatusCode&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;td&gt;MPEG-DASH MPD ファイルの HTTP リダイレクト応答で使用されるデフォルトのリダイレクト ステータス コードを指定します: 既定値は &lt;strong&gt;307&lt;/strong&gt; (一時的なリダイレクト) です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashHttpRedirectDisableStatusCode302Override&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;"HTTP 1.0" プロトコルの DASH MPD の HTTP 要求は、通常、上記のリダイレクト ステータス コードではなく、302 リダイレクト ステータス コードで応答します。このプロパティを &lt;strong&gt;true&lt;/strong&gt; に設定すると、そのオーバーライドを無効にして、通常のステータス コードを使用することができます: 既定値は &lt;strong&gt;false&lt;/strong&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  その他の設定パラーメーターについて
&lt;/h2&gt;

&lt;p&gt;以下のパラメーターが Wowza Streaming Engine でのMPEG-DASH ストリーミングのカスタマイズのために用意されています。&lt;/p&gt;

&lt;h3&gt;
  
  
  XML パスが &lt;code&gt;/Root/Application/HTTPStreamer&lt;/code&gt; のパラメーター
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ名 (Name)&lt;/th&gt;
&lt;th&gt;プロパティのタイプ (Type)&lt;/th&gt;
&lt;th&gt;プロパティの値 (Value) の説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashAdjustCTTSForFirstKeyFrameToZero (バージョン 4.5.0 以降)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;true&lt;/strong&gt; に設定すると、VODファイル内のすべてのエンコードされたフレームの CompositionTimeToSample (CTTS) を調整して、MPEG-DASH プレーヤーでの再生を有効にします。このプロパティが設定されていない場合、または、設定されていても値が &lt;strong&gt;false&lt;/strong&gt; に設定されている場合、ビデオの最初のフレームに CTTS 値があると、Wowza Streaming Engine は次のメッセージを &lt;code&gt;[install-dir]/logs/wowzastreamingengine_access.log&lt;/code&gt; ファイルに記録します : &lt;code&gt;MediaReaderH264MPEGDash.indexFile[vod/definst/earnings_release_1q16.mp4]: First frame of video has a non-zero CTTS value [200], playback may not work on all browsers, try setting HTTPStreamer/Properties boolean property mpegdashAdjustCTTSForFirstKeyFrameToZero to true&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashEnableUTCTimingElements&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;false&lt;/strong&gt; に設定すると、ライブストリーミングの MPEG-DASH MPD マニフェストファイルの UTCTiming 要素を削除します: 既定値は &lt;strong&gt;true&lt;/strong&gt; です (MPD マニフェストファイルに UTCTiming 要素が含まれます)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingSchemeOrder (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;UTCTiming スキームを順序付けで有効にするための、優先順位が付けられたコンマ区切りのリストを指定します (リストの最初のものが最も優先されます)。有効な値は、&lt;code&gt;direct&lt;/code&gt;, &lt;code&gt;http-head&lt;/code&gt;、&lt;code&gt;http-xsdate&lt;/code&gt;、&lt;code&gt;http-iso&lt;/code&gt;、&lt;code&gt;http-ntp&lt;/code&gt;、&lt;code&gt;ntp&lt;/code&gt;、&lt;code&gt;sntp&lt;/code&gt; です。既定値は &lt;code&gt;direct&lt;/code&gt; です (ほとんどの場合この値で問題ありません)。&lt;br&gt;注意: &lt;code&gt;direct&lt;/code&gt; または &lt;code&gt;http-head&lt;/code&gt; 以外の値を指定する場合、対応する mpegdashUTCTiming&lt;code&gt;[スキーム名]&lt;/code&gt; プロパティを構成する必要があります。例えば、&lt;code&gt;http-xsdate&lt;/code&gt; を指定する場合は、&lt;code&gt;mpegdashUTCTimingHttpXsDateList&lt;/code&gt; プロパティを構成する必要があります。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingHttpHeadList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;HTTP ヘッダー内の日付情報を取得するために HTTP HEAD 要求を行うことができる HTTP URL の優先順のコンマ区切りリストを指定します (リストの最初のものが最も優先されます)。任意の有効な HTTP/HTTPS サーバー URL を指定します: 既定値は ローカルの Wowza Streaming Engine サーバー (&lt;code&gt;${com.wowza.wms.context.ApplicationInstance.MPEGDash.domain}/dashtime.txt&lt;/code&gt;) を指す URLです&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingHttpXsDateList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;適切な時間を取得するためにリクエストを送信できる HTTP URL の優先順のコンマ区切りリストを指定します。時刻は &lt;code&gt;xs:dateTime&lt;/code&gt; 形式で返されます。任意の有効な HTTP/HTTPS サーバー URL を指定します。例えば、&lt;a href="http://myPublicServer.com/xsdate%E3%80%81https://mySecureServer.com/xsdate"&gt;http://myPublicServer.com/xsdate、https://mySecureServer.com/xsdate&lt;/a&gt; です: 既定値は &lt;code&gt;null&lt;/code&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingHttpISOList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;適切な時間を取得するためにリクエストを送信できる HTTP URL の優先順のコンマ区切りリストを指定します。時刻は ISO タイム コード形式で返されます。任意の有効な HTTP/HTTPS サーバー URL を指定します。例えば、&lt;a href="http://myPublicServer.com/xsdate%E3%80%81https://mySecureServer.com/xsdate"&gt;http://myPublicServer.com/xsdate、https://mySecureServer.com/xsdate&lt;/a&gt; です: 既定値は &lt;code&gt;null&lt;/code&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingHttpNTPList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;適切な時間を取得するためにリクエストを送信できる HTTP URL の優先順のコンマ区切りリストを指定します。時刻は NTP タイムスタンプ形式で返されます。任意の有効な HTTP/HTTPS サーバー URL を指定します。例えば、&lt;a href="http://myPublicServer.com/ntptime%E3%80%81https://mySecureServer.com/ntptime"&gt;http://myPublicServer.com/ntptime、https://mySecureServer.com/ntptime&lt;/a&gt; です: 既定値は &lt;code&gt;null&lt;/code&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingNTPList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;適切な時刻を取得するために NTP プロトコル (IETF RFC 5905 で定義) が利用可能な優先順位が付けられたコンマ区切りのサーバーのリストを指定します。有効な NTP サーバー名または IP アドレスを指定します。例えば、time-a.nist.gov、time-b.nist.gov、129.6.15.29 です: 既定値は &lt;code&gt;null&lt;/code&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashUTCTimingSNTPList (バージョン 4.7.0 以降)&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;適切な時刻を取得するために SNTP プロトコル (IETF RFC 5905 で定義) が利用可能な優先順位が付けられたコンマ区切りのサーバーのリストを指定します。有効な SNTP サーバー名または IP アドレスを指定します。例えば、time-a.nist.gov、time-b.nist.gov、129.6.15.29 です: 既定値は &lt;code&gt;null&lt;/code&gt; です&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  XML パスが &lt;code&gt;/Root/Application&lt;/code&gt; のパラメーター
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロパティ名 (Name)&lt;/th&gt;
&lt;th&gt;プロパティのタイプ (Type)&lt;/th&gt;
&lt;th&gt;プロパティの値 (Value) の説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashMinBufferTime (バージョン 4.5.0 以降)&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;td&gt;MPEG-DASH MPD の minBufferTime 属性を変更します: 既定値は &lt;strong&gt;6000&lt;/strong&gt; (ライブ ストリームの場合) または &lt;strong&gt;1500&lt;/strong&gt; (VODストリームの場合) です&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpegdashAddMPDSegmentBaseURL (バージョン 4.6.0 以降)&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;BaseURL&amp;gt;&lt;/code&gt; タグを MPD に含めるかどうかを制御します。 &lt;code&gt;&amp;lt;BaseURL&amp;gt;&lt;/code&gt; の挿入を有効にするには値を &lt;strong&gt;true&lt;/strong&gt; に設定します: 既定値 false です&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>mpegdash</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
    <item>
      <title>Wowza Streaming Engine を使ったライブストリーミング (3)</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Tue, 28 Mar 2023 16:00:10 +0000</pubDate>
      <link>https://dev.to/shigeyf/stream-live-with-wse-3-kc2</link>
      <guid>https://dev.to/shigeyf/stream-live-with-wse-3-kc2</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/../stream-live-with-wse-2/"&gt;前回の記事&lt;/a&gt;では FFmpeg で生成したマルチビットレートの RTMP ライブストリーム (マルチストリーム) をアップロードして、&lt;br&gt;
Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;この記事では、RTMP のシングルビットレートのライブソースを Wowza Streaming Engine に入力し、&lt;br&gt;
Wowza Streaming Engine のトランスコーディング機能を使ってマルチビットレートのライブストリームを生成して、&lt;br&gt;
アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。&lt;/p&gt;

&lt;p&gt;ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、&lt;br&gt;
一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、&lt;br&gt;
アダプティブストリーミングのライブストリーミング配信を実現することができます。&lt;/p&gt;

&lt;p&gt;作業の手順は、以下の通りです。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ライブソースストリームの入力セキュリティの設定 (省略)&lt;/li&gt;
&lt;li&gt;FFmpeg によるビデオファイルを使った RTMP ライブソースの入力 (省略)&lt;/li&gt;
&lt;li&gt;ライブトランスコーダーの設定&lt;/li&gt;
&lt;li&gt;ライブストリーミング再生のテスト&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://peach.blender.org/download/"&gt;Big Buck Bunny サイト&lt;/a&gt; のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;配信で利用する &lt;a href="https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4"&gt;ビデオファイル&lt;/a&gt; はこちらを利用しました。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  手順1: ライブソースの入力セキュリティの設定 (省略)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;で作成した設定を利用するため、ここでは省略します。&lt;/p&gt;

&lt;p&gt;手順の詳細は、&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;を参照します。&lt;/p&gt;
&lt;h1&gt;
  
  
  手順2: ライブトランスコーダーの設定
&lt;/h1&gt;

&lt;p&gt;Wowza Streaming Engine のライブトランスコーダーを設定すると、入力したライブソースのトランスコードを行うことができます。&lt;/p&gt;

&lt;p&gt;ライブトランスコーダーを設定するには、以下の手順で行います。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ここでは既存のトランスコーダーテンプレートを利用します。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [&lt;strong&gt;Application&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;左のメニューから [&lt;strong&gt;live&lt;/strong&gt;] アプリケーションをクリックし、[&lt;strong&gt;Transcoder&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Edit]&lt;/strong&gt; ボタンを押します。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以下のパラメーター情報を入力して、&lt;strong&gt;[Save]&lt;/strong&gt; ボタンをクリックします。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パラメーター&lt;/th&gt;
&lt;th&gt;値&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Template Directory&lt;/td&gt;
&lt;td&gt;既定のテンプレートを利用するため、既定値のままとします&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transcoder Options&lt;/td&gt;
&lt;td&gt;チェックボックスを有効にしたままにします (&lt;strong&gt;Match source stream name to template name&lt;/strong&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallback Template&lt;/td&gt;
&lt;td&gt;"&lt;strong&gt;Transrate (Default)&lt;/strong&gt;" (既定値) を選択します&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;トランスコーダーの "&lt;strong&gt;Status&lt;/strong&gt;" が "&lt;strong&gt;Not Enabled&lt;/strong&gt;" の場合、&lt;strong&gt;[Enable Transcoder]&lt;/strong&gt; をクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;画面上部の情報バーの &lt;strong&gt;[Restart Now]&lt;/strong&gt; ボタンをクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;アプリケーションの再起動が完了したら、準備完了です。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;また、[&lt;strong&gt;Transcoder&lt;/strong&gt;] 画面では、トランスコーダーのテンプレートをクリックすると、&lt;br&gt;
トランスコーダーで生成するストリームの詳細を表示することができます。&lt;/p&gt;

&lt;p&gt;トランスコーダーの生成するストリームごとに有効・無効の設定が異なる場合がありますが、&lt;br&gt;
トランスコーダーのテンプレートの詳細画面から、プリセット名 (Preset) をクリックすると、そのストリームを有効・無効を変更することができます。&lt;/p&gt;

&lt;p&gt;ここでは、以下の通り、160p, 360p, source を有効にします (既定値のとおり)。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注意: トランスコーダーを動作させる際には、Wowza Streaming Engine が動作している環境の CPU スペックが&lt;br&gt;
トランスコード処理の合計に対して十分なキャパシティがあるかを確認してください。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_W6wx2PR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-encoding-preset.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_W6wx2PR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-encoding-preset.jpg" alt="Live Transcoder Encoding Presets" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  手順3: FFmpeg によるビデオファイルを使ったライブソースの入力
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;と同様に以下の FFmpeg コマンドで、ビデオファイルから生成したライブソースを Wowza Streaming Engine に入力します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-threads&lt;/span&gt; 4 &lt;span class="nt"&gt;-re&lt;/span&gt; &lt;span class="nt"&gt;-stream_loop&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-i&lt;/span&gt; ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-rtmp_live&lt;/span&gt; live &lt;span class="nt"&gt;-pix_fmt&lt;/span&gt; yuv420p &lt;span class="nt"&gt;-r&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-map&lt;/span&gt; 0:v:0 &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-preset&lt;/span&gt; veryfast &lt;span class="nt"&gt;-tune&lt;/span&gt; animation &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-b&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-profile&lt;/span&gt;:v high &lt;span class="nt"&gt;-s&lt;/span&gt;:v 1280x720 &lt;span class="nt"&gt;-minrate&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-maxrate&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-bufsize&lt;/span&gt;:v 3000k &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-flags&lt;/span&gt;:v +cgop &lt;span class="nt"&gt;-g&lt;/span&gt; 60 &lt;span class="nt"&gt;-x264opts&lt;/span&gt; &lt;span class="nv"&gt;keyint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60:keyint_min&lt;span class="o"&gt;=&lt;/span&gt;60:no-scenecut &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-sc_threshold&lt;/span&gt; 0 &lt;span class="nt"&gt;-crf&lt;/span&gt; 23 &lt;span class="nt"&gt;-vsync&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-map&lt;/span&gt; 0:1 &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-b&lt;/span&gt;:a 64k &lt;span class="nt"&gt;-ac&lt;/span&gt; 2 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-af&lt;/span&gt;:a &lt;span class="nv"&gt;aresample&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;async&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1:min_hard_comp&lt;span class="o"&gt;=&lt;/span&gt;0.100000:first_pts&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; flv rtmp://[username]:[password]@[wowza_hostname]:1935/live/livestream1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;この FFmpeg コマンドでは前回利用したビデオフィルターによるビットレートや時刻情報の埋め込みは行いません&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ライブソースストリームの入力が開始したら、上部メニューバーの [&lt;strong&gt;Applications&lt;/strong&gt;] をクリックし、&lt;br&gt;
左のメニューから既定のライブアプリケーション (&lt;strong&gt;live&lt;/strong&gt;) をクリックします。&lt;br&gt;
次に、左のメニューから [&lt;strong&gt;Incoming Streams&lt;/strong&gt;] をクリックすると、&lt;code&gt;livestream1&lt;/code&gt; という名前の入力ストリームと&lt;br&gt;
トランスコーダーで生成したライブストリームが入力ストリームとして表示されていることが確認できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_I6qm9Fw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_I6qm9Fw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg" alt="Live Transcoder Incoming Streams" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[View by Group]&lt;/strong&gt; をクリックすると、複数のストリームをまとめたストリームグループが表示されます。&lt;/p&gt;

&lt;p&gt;これらのグループは、トランスコーダーテンプレートで定義されたグループで、以下の例では、&lt;code&gt;livestream1_all&lt;/code&gt; と &lt;code&gt;livestream1_mobile&lt;/code&gt; の 2 つのグループが表示されています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_I6qm9Fw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_I6qm9Fw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg" alt="Live Transcoder Incoming Streams (NGRP)" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ストリームグループは、トランスコーダーテンプレートで自由にグループを定義できるため、必要に応じて、トランスコーダーのテンプレートを新しく作成したり、既存のテンプレートを変更したりします。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  手順4: ライブストリーミング再生のテスト
&lt;/h2&gt;

&lt;p&gt;手順3でライブストリームの入力が完了したら、ライブストリームの配信ができる状態になります。&lt;/p&gt;

&lt;p&gt;ライブストリームの再生 URL は以下のように構成されます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ngrp&lt;/code&gt; というプレフィックス名を使うことでストリームグループにアクセスすることができます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ストリーミング形式&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HLS&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/ngrp:&lt;strong&gt;[入力ストリーム名]&lt;/strong&gt;/playlist.m3u8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DASH&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/ngrp:&lt;strong&gt;[入力ストリーム名]&lt;/strong&gt;/manifest.mpd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[&lt;strong&gt;アプリケーション名&lt;/strong&gt;] は、この例では &lt;strong&gt;live&lt;/strong&gt; となります。&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;入力ストリーム名&lt;/strong&gt;] は、この例では &lt;strong&gt;livestream1_all&lt;/strong&gt; または &lt;strong&gt;livestream1_mobile&lt;/strong&gt; となります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://testplayer.demo.liveinstantly.cloud/"&gt;Web プレイヤー&lt;/a&gt;を使って、再生のテストを行います。&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;この記事では、FFmpeg で生成したシングルビットレートの RTMP ライブストリームをアップロードし、&lt;br&gt;
Wowza Streaming Engine 経由でマルチビットレートのトランスコードを行って、&lt;br&gt;
アダプティブストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、&lt;br&gt;
一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、&lt;br&gt;
アダプティブストリーミングのライブストリーミング配信を実現することができます。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine を利用することで、RTMP, RTSP, SRT 等のライブストリームを Apple HLS, MPEG-DASH などの&lt;br&gt;
ストリーミング形式に変換することができるようになります。&lt;br&gt;
また、CDN と組み合わせを行うことで大規模なアダプティブストリーミング配信を実現することも可能となります。&lt;/p&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>live</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
    <item>
      <title>Wowza Streaming Engine を使ったライブストリーミング (2)</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Tue, 28 Mar 2023 13:35:48 +0000</pubDate>
      <link>https://dev.to/shigeyf/stream-live-with-wse-2-2o9h</link>
      <guid>https://dev.to/shigeyf/stream-live-with-wse-2-2o9h</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;では FFmpeg で生成した RTMP ライブストリーム (シングルストリーム) をアップロードして、&lt;br&gt;
Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;この記事では、アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。&lt;/p&gt;

&lt;p&gt;作業の手順は、以下の通りです。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ライブソースストリームの入力セキュリティの設定 (省略)&lt;/li&gt;
&lt;li&gt;FFmpeg によるビデオファイルを使った RTMP ライブソースの入力&lt;/li&gt;
&lt;li&gt;SMIL ファイルの作成&lt;/li&gt;
&lt;li&gt;ライブストリーミング再生のテスト&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://peach.blender.org/download/"&gt;Big Buck Bunny サイト&lt;/a&gt; のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;配信で利用する &lt;a href="https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4"&gt;ビデオファイル&lt;/a&gt; はこちらを利用しました。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  手順1: ライブソースの入力セキュリティの設定 (省略)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;で作成した設定を利用するため、ここでは省略します。&lt;/p&gt;

&lt;p&gt;手順の詳細は、&lt;a href="https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/"&gt;前回の記事&lt;/a&gt;を参照します。&lt;/p&gt;
&lt;h2&gt;
  
  
  手順2: FFmpeg によるビデオファイルを使ったライブソースの入力
&lt;/h2&gt;

&lt;p&gt;以下のコマンドを実行し、ビデオファイルとスクリプトファイルをダウンロードします。&lt;br&gt;
スクリプトファイルは &lt;a href="https://gist.github.com/liveinstantly/7969cc44d14e96c98434cf4e8744a15f"&gt;Gist で公開しているシェルスクリプト&lt;/a&gt; を利用します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/
&lt;span class="nb"&gt;mkdir &lt;/span&gt;videos
&lt;span class="nb"&gt;cd &lt;/span&gt;videos
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4
curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://gist.github.com/liveinstantly/7969cc44d14e96c98434cf4e8744a15f/raw/88d2a83c77e01ff32262db04f739e5755efbd6a5/ffmpeg_filelive_abr_transcode.sh
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ffmpeg_filelive_abr_transcode.sh
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://wowzademostorage1.blob.core.windows.net/transcoding/liveencode_spec_sample.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドを実行して、ビデオのトランスコードとライブソースの入力を行います。&lt;/p&gt;

&lt;p&gt;このスクリプトでは、ビデオファイルから複数のビットレートのライブストリームを生成し、Wowza Streaming Engine に入力します。&lt;br&gt;
生成する複数のライブストリームの詳細は &lt;code&gt;liveencode_spec_sample.txt&lt;/code&gt; ファイルで定義します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./ffmpeg_filelive_abr_transcode.sh &lt;span class="nt"&gt;-f&lt;/span&gt; ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 &lt;span class="nt"&gt;-s&lt;/span&gt; ./liveencode_spec_sample.txt &lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;WowzaStreamingEngineのドメイン名]&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="k"&gt;**&lt;/span&gt;live&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;username]&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"**[password]**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;liveencode_spec_sample.txt&lt;/code&gt; ファイルは、コンマ区切りのファイルになっていて、以下の情報が含まれています。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ストリーム名&lt;/th&gt;
&lt;th&gt;解像度(幅)&lt;/th&gt;
&lt;th&gt;解像度(高さ)&lt;/th&gt;
&lt;th&gt;ビットレート&lt;/th&gt;
&lt;th&gt;プロファイル&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;livestream1&lt;/td&gt;
&lt;td&gt;1280&lt;/td&gt;
&lt;td&gt;720&lt;/td&gt;
&lt;td&gt;1500&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;livestream2&lt;/td&gt;
&lt;td&gt;960&lt;/td&gt;
&lt;td&gt;540&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;livestream3&lt;/td&gt;
&lt;td&gt;640&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ライブソースストリームの入力が開始したら、上部メニューバーの [&lt;strong&gt;Applications&lt;/strong&gt;] をクリックし、&lt;br&gt;
左のメニューから既定のライブアプリケーション (&lt;strong&gt;live&lt;/strong&gt;) をクリックします。&lt;br&gt;
次に、左のメニューから [&lt;strong&gt;Incoming Streams&lt;/strong&gt;] をクリックすると、&lt;code&gt;livestream1&lt;/code&gt;, &lt;code&gt;livestream2&lt;/code&gt;, &lt;code&gt;livestream3&lt;/code&gt; という名前のストリームが入力されていることが確認できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0-IDeciu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-incoming-stream-2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0-IDeciu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-incoming-stream-2.jpg" alt="Live Incoming Stream" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  手順3: SMIL ファイルの作成
&lt;/h2&gt;

&lt;p&gt;アダプティブストリーミング配信のために SMIL ファイルを作成します。&lt;/p&gt;

&lt;p&gt;以下の SMIL ファイル (XML ファイル) を作成し &lt;code&gt;/usr/local/WowzaStreamingEngine/content&lt;/code&gt; ディレクトリに追加します。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;liveencode_spec_sample.txt&lt;/code&gt; ファイルの詳細情報に従って、以下のように SMIL ファイルを定義します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;smil&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Sample SMIL file for Live Adaptive Streaming"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;switch&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"720"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"livestream1"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1280"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"1500000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"128000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"540"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"livestream2"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"960"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"800000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"360"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"livestream3"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"640"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"500000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/switch&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/smil&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  手順4: ライブストリーミング再生のテスト
&lt;/h2&gt;

&lt;p&gt;手順2でライブストリームの入力が完了したら、ライブストリームの配信ができる状態になります。&lt;/p&gt;

&lt;p&gt;ライブストリームの再生 URL は以下のように構成されます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ストリーミング形式&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HLS&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/smil:&lt;strong&gt;[SMILファイル名]&lt;/strong&gt;/playlist.m3u8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DASH&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/smil:&lt;strong&gt;[SMILファイル名]&lt;/strong&gt;/manifest.mpd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[&lt;strong&gt;アプリケーション名&lt;/strong&gt;] は、この例では &lt;strong&gt;live&lt;/strong&gt; となります。&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;SMILファイル名&lt;/strong&gt;] は、この例では &lt;strong&gt;adaptivelivestream&lt;/strong&gt; となります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://testplayer.demo.liveinstantly.cloud/"&gt;Web プレイヤー&lt;/a&gt;を使って、再生のテストを行います。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W5NN89f7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-live-play-test-2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W5NN89f7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-live-play-test-2.jpg" alt="ライブストリーム再生テスト" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;この記事では、FFmpeg で生成したマルチビットレートの RTMP ライブストリームをアップロードして、&lt;br&gt;
Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine を利用することで、RTMP, RTSP, SRT 等のライブストリームを Apple HLS, MPEG-DASH などの&lt;br&gt;
ストリーミング形式に変換することができるようになります。また、CDN と組み合わせを行うことで大規模な HTTP ベースの&lt;br&gt;
アダプティブストリーミング配信を実現することも可能となります。&lt;/p&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>live</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
    <item>
      <title>Wowza Streaming Engine を使ったライブストリーミング (1)</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Tue, 28 Mar 2023 13:35:37 +0000</pubDate>
      <link>https://dev.to/shigeyf/stream-live-with-wse-56ai</link>
      <guid>https://dev.to/shigeyf/stream-live-with-wse-56ai</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、Wowza Streaming Engine でライブストリーミング配信を行うためのセットアップを行います。&lt;/p&gt;

&lt;p&gt;ライブ配信は、Wowza Streaming Engine にライブソースストリームを入力し、そのライブストリームをストリーミング方式に変換して、ライブストリーミング配信を行います。&lt;/p&gt;

&lt;p&gt;作業の手順は、以下の通りです。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ライブソースストリームの入力セキュリティの設定&lt;/li&gt;
&lt;li&gt;FFmpeg によるビデオファイルを使った RTMP ライブソースの入力&lt;/li&gt;
&lt;li&gt;ライブストリーミング再生のテスト&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://peach.blender.org/download/"&gt;Big Buck Bunny サイト&lt;/a&gt; のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;配信で利用する &lt;a href="https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4"&gt;ビデオファイル&lt;/a&gt; はこちらを利用しました。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  手順1: ライブソースの入力セキュリティの設定
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine にライブソースストリームを入力する際にパスワードで認証を行うことにより、&lt;br&gt;
ライブソースの入力セキュリティを確保することができます。&lt;/p&gt;

&lt;p&gt;ライブソースの入力セキュリティを設定にするには、以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [&lt;strong&gt;Server&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;左のメニューから [&lt;strong&gt;Source Authentication&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[+Add Source]&lt;/strong&gt; ボタンを押します。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以下のパラメーター情報を入力して、&lt;strong&gt;[+Add]&lt;/strong&gt; ボタンをクリックします。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パラメーター&lt;/th&gt;
&lt;th&gt;値&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source User Name&lt;/td&gt;
&lt;td&gt;ソース認証のユーザー名: 例: &lt;code&gt;livestream1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Password (Confirm Password)&lt;/td&gt;
&lt;td&gt;ソース認証のパスワード&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;注意: ユーザー名とパスワードの値は、大文字と小文字が区別され、英数字、ピリオド (.)、アンダースコア (_)、およびハイフン (-) 文字のみを含めることができます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;上部メニューバーの [&lt;strong&gt;Applications&lt;/strong&gt;] をクリックし、左のメニューから既定のライブアプリケーション (&lt;strong&gt;live&lt;/strong&gt;) をクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;左のメニューから [&lt;strong&gt;Source Security&lt;/strong&gt;] をクリックし、ソースセキュリティの設定を確認します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[&lt;strong&gt;RTMP Sources&lt;/strong&gt;] が &lt;a href="https://dev.to%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%AA%8D%E8%A8%BC%E3%82%92%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%99%E3%82%8B"&gt;&lt;strong&gt;Require password authentication&lt;/strong&gt;&lt;/a&gt; となっているかを確認する。&lt;/li&gt;
&lt;li&gt;もし設定が異なる場合は、&lt;strong&gt;[Edit]&lt;/strong&gt; ボタンをクリックし、設定変更を行う。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fYgqVYFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-live-source-security.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fYgqVYFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-live-source-security.jpg" alt="WSE Live Source Security 設定" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  手順2: FFmpeg によるビデオファイルを使ったライブソースの入力
&lt;/h2&gt;

&lt;p&gt;以下のコマンドを実行し、ビデオファイルをダウンロードします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/
&lt;span class="nb"&gt;mkdir &lt;/span&gt;videos
&lt;span class="nb"&gt;cd &lt;/span&gt;videos
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ビデオのダウンロードが完了したら、&lt;a href="https://ffmpeg.org/"&gt;FFmpeg ツール&lt;/a&gt;を使ってダウンロードしたビデオファイルから、&lt;br&gt;
次の FFmpeg コマンドを使って、RTMP ライブソースストリームを生成し、Wowza Streaming Engine の &lt;code&gt;live&lt;/code&gt; アプリケーションに入力します。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ライブソースストリームの入力 URL には、手順1で設定したソース認証のユーザー名 (&lt;code&gt;[username]&lt;/code&gt;) と&lt;br&gt;
ソース認証のパスワード (&lt;code&gt;[password]&lt;/code&gt;) を正しく指定します。&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-threads&lt;/span&gt; 4 &lt;span class="nt"&gt;-re&lt;/span&gt; &lt;span class="nt"&gt;-stream_loop&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-i&lt;/span&gt; ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-rtmp_live&lt;/span&gt; live &lt;span class="nt"&gt;-pix_fmt&lt;/span&gt; yuv420p &lt;span class="nt"&gt;-r&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-map&lt;/span&gt; 0:v:0 &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-preset&lt;/span&gt; veryfast &lt;span class="nt"&gt;-tune&lt;/span&gt; animation &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-b&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-profile&lt;/span&gt;:v high &lt;span class="nt"&gt;-s&lt;/span&gt;:v 1280x720 &lt;span class="nt"&gt;-minrate&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-maxrate&lt;/span&gt;:v 1500k &lt;span class="nt"&gt;-bufsize&lt;/span&gt;:v 3000k &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-flags&lt;/span&gt;:v +cgop &lt;span class="nt"&gt;-g&lt;/span&gt; 60 &lt;span class="nt"&gt;-x264opts&lt;/span&gt; &lt;span class="nv"&gt;keyint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;60:keyint_min&lt;span class="o"&gt;=&lt;/span&gt;60:no-scenecut &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-sc_threshold&lt;/span&gt; 0 &lt;span class="nt"&gt;-crf&lt;/span&gt; 23 &lt;span class="nt"&gt;-vsync&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-filter&lt;/span&gt;:v &lt;span class="nv"&gt;drawtext&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;:text&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="nv"&gt;bitrate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1500K&lt;span class="o"&gt;)&lt;/span&gt;:fontsize&lt;span class="o"&gt;=&lt;/span&gt;32:x&lt;span class="o"&gt;=&lt;/span&gt;32:y&lt;span class="o"&gt;=&lt;/span&gt;32:box&lt;span class="o"&gt;=&lt;/span&gt;1:boxcolor&lt;span class="o"&gt;=&lt;/span&gt;white:fontcolor&lt;span class="o"&gt;=&lt;/span&gt;black,drawtext&lt;span class="o"&gt;=&lt;/span&gt;:text&lt;span class="o"&gt;=&lt;/span&gt;%&lt;span class="o"&gt;{&lt;/span&gt;localtime&lt;span class="o"&gt;}&lt;/span&gt;:x&lt;span class="o"&gt;=&lt;/span&gt;32:y&lt;span class="o"&gt;=&lt;/span&gt;64:fontsize&lt;span class="o"&gt;=&lt;/span&gt;32:box&lt;span class="o"&gt;=&lt;/span&gt;1:boxcolor&lt;span class="o"&gt;=&lt;/span&gt;white:fontcolor&lt;span class="o"&gt;=&lt;/span&gt;black,drawtext&lt;span class="o"&gt;=&lt;/span&gt;:text&lt;span class="o"&gt;=&lt;/span&gt;%&lt;span class="o"&gt;{&lt;/span&gt;pts&lt;span class="se"&gt;\\&lt;/span&gt;:hms&lt;span class="o"&gt;}&lt;/span&gt;:x&lt;span class="o"&gt;=&lt;/span&gt;32:y&lt;span class="o"&gt;=&lt;/span&gt;96:fontsize&lt;span class="o"&gt;=&lt;/span&gt;32:box&lt;span class="o"&gt;=&lt;/span&gt;1:boxcolor&lt;span class="o"&gt;=&lt;/span&gt;white:fontcolor&lt;span class="o"&gt;=&lt;/span&gt;black &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-map&lt;/span&gt; 0:1 &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-b&lt;/span&gt;:a 64k &lt;span class="nt"&gt;-ac&lt;/span&gt; 2 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-af&lt;/span&gt;:a &lt;span class="nv"&gt;aresample&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;async&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1:min_hard_comp&lt;span class="o"&gt;=&lt;/span&gt;0.100000:first_pts&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; flv rtmp://[username]:[password]@[wowza_hostname]:1935/live/livestream1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;この FFmpeg を使ったコマンドでは、ビデオファイルを 1280x720 の解像度でエンコードしたストリームで RTMP ストリームを生成しています。&lt;br&gt;
エンコード時に、ビデオフィルター機能を使って、現在の日時・時刻の情報を映像に埋め込む処理をしています。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ライブソースストリームの入力が開始したら、上部メニューバーの [&lt;strong&gt;Applications&lt;/strong&gt;] をクリックし、&lt;br&gt;
左のメニューから既定のライブアプリケーション (&lt;strong&gt;live&lt;/strong&gt;) をクリックします。&lt;br&gt;
次に、左のメニューから [&lt;strong&gt;Incoming Streams&lt;/strong&gt;] をクリックすると、&lt;code&gt;livestream1&lt;/code&gt; という名前の&lt;br&gt;
ストリームが入力されていることが確認できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AjwuMWf_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-incoming-stream.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AjwuMWf_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-incoming-stream.jpg" alt="Live Incoming Stream" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  手順3: ライブストリーミング再生のテスト
&lt;/h2&gt;

&lt;p&gt;手順2でライブストリームの入力が完了したら、ライブストリームの配信ができる状態になります。&lt;/p&gt;

&lt;p&gt;ライブストリームの再生 URL は以下のように構成されます。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ストリーミング形式&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HLS&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/&lt;strong&gt;[入力ストリーム名]&lt;/strong&gt;/playlist.m3u8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DASH&lt;/td&gt;
&lt;td&gt;https://&lt;strong&gt;[WowzaStreamingEngineのドメイン名]&lt;/strong&gt;/&lt;strong&gt;[アプリケーション名]&lt;/strong&gt;/&lt;strong&gt;[入力ストリーム名]&lt;/strong&gt;/manifest.mpd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;[&lt;strong&gt;アプリケーション名&lt;/strong&gt;] は、この例では &lt;strong&gt;live&lt;/strong&gt; となります。&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;入力ストリーム名&lt;/strong&gt;] は、この例では &lt;strong&gt;livestream1&lt;/strong&gt; となります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://testplayer.demo.liveinstantly.cloud/"&gt;Web プレイヤー&lt;/a&gt;を使って、再生のテストを行います。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yfTLl36u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-live-play-test.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yfTLl36u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-live-play-test.jpg" alt="ライブストリーム再生テスト" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;この記事では、FFmpeg で生成した RTMP ライブストリームをアップロードして、Wowza Streaming Engine 経由で&lt;br&gt;
ストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine を利用することで、RTMP, RTSP, SRT 等のライブストリームを Apple HLS, MPEG-DASH などの&lt;br&gt;
ストリーミング形式に変換することができるようになります。また、CDN と組み合わせを行うことで大規模な HTTP ベースの&lt;br&gt;
アダプティブストリーミング配信を実現することも可能となります。&lt;/p&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>live</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
    <item>
      <title>Wowza Streaming Engine を使った VOD ストリーミングのセットアップ</title>
      <dc:creator>Shige Fukushima</dc:creator>
      <pubDate>Tue, 28 Mar 2023 13:32:15 +0000</pubDate>
      <link>https://dev.to/shigeyf/stream-vod-contents-with-wse-20e9</link>
      <guid>https://dev.to/shigeyf/stream-vod-contents-with-wse-20e9</guid>
      <description>&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;この記事では、Wowza Streaming Engine で VOD (ビデオ・オンデマンド) でストリーミング コンテンツの配信を行うためのセットアップを行います。&lt;/p&gt;

&lt;p&gt;作業の手順は、以下の通りです。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;アダプティブストリーミング用の VOD ファイルの作成&lt;/li&gt;
&lt;li&gt;SMIL ファイルの作成&lt;/li&gt;
&lt;li&gt;ビデオファイルのアップロード&lt;/li&gt;
&lt;li&gt;Wowza Streaming Engine のセットアップ&lt;/li&gt;
&lt;li&gt;アダプティブストリーミング再生のテスト&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://peach.blender.org/download/"&gt;Big Buck Bunny サイト&lt;/a&gt; のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;配信で利用する &lt;a href="https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4"&gt;ビデオファイル&lt;/a&gt; はこちらを利用しました。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  手順1: アダプティブストリーミング用の VOD ファイルの作成
&lt;/h2&gt;

&lt;p&gt;アダプティブストリーミング方式でのストリーミング再生では、プレイヤーのネットワーク接続の帯域幅に合わせて複数のビットレートと解像度のビデオを切り替えながら、ストリーミングビデオを再生します。まず、&lt;a href="https://ffmpeg.org/"&gt;FFmpeg ツール&lt;/a&gt; を使って、オリジナルのビデオファイルから、複数のビットレートの MP4 ファイルを作成します。&lt;/p&gt;

&lt;p&gt;Ubuntu Linux への FFmpeg のインストールは以下のコマンドを実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ffmpeg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;参考までに、利用した FFmpeg のバージョンは以下になります。&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;ffmpeg &lt;span class="nt"&gt;-version&lt;/span&gt;
  ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 2000-2021 the FFmpeg developers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FFmpeg を使った複数ビットレートの MP4 のトランスコードにあたり、&lt;a href="https://gist.github.com/liveinstantly/adfdcdeb8ab2a4ecb7fe2b3844ef5cac"&gt;Gist で公開しているシェルスクリプト&lt;/a&gt;を利用します。以下のコマンドを実行して、ビデオのダウンロード、トランスコードを行います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/
&lt;span class="nb"&gt;mkdir &lt;/span&gt;videos
&lt;span class="nb"&gt;cd &lt;/span&gt;videos
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4
curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://gist.github.com/liveinstantly/adfdcdeb8ab2a4ecb7fe2b3844ef5cac/raw/a2b0272dd06f9676a02cc6f0ff812123e0490742/ffmpeg_abr_transcode.sh
curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://wowzademostorage1.blob.core.windows.net/transcoding/encode_spec_sample.txt
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ffmpeg_abr_transcode.sh
./ffmpeg_abr_transcode.sh bbb_sunflower_1080p_30fps_normal.mp4 BigBuckBunny-h264-1080p-30fps encode_spec_sample.txt
&lt;span class="nb"&gt;mkdir &lt;/span&gt;bigbuckbunny-1080p-30fps-h264
&lt;span class="nb"&gt;mv &lt;/span&gt;BigBuckBunny-h264-1080p-30fps&lt;span class="k"&gt;*&lt;/span&gt;.mp4 bigbuckbunny-1080p-30fps-h264/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;生成された MP4 ビデオファイルは以下の通りです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4
BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4
BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4
BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4
BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4
BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4
BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4
BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  手順2: SMIL ファイルの作成
&lt;/h2&gt;

&lt;p&gt;アダプティブストリーミング方式での配信用に SMIL ファイルを作成します。&lt;/p&gt;

&lt;p&gt;下記の XML (SMIL) ファイルを &lt;code&gt;~/videos/bbb_h264_1080p_30fps.smil&lt;/code&gt; に保存します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;smil&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Big Buck Bunny H264 1080p 30fps Adaptive Bitrate sample content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;switch&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"320"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"180"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"400000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;  &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"640"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"360"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"650000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;  &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"640"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"360"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"1000000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"960"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"540"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"1500000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"960"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"540"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"2250000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"64000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1280"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"720"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"3400000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"128000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1920"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"1080"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"4700000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"128000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1920"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"1080"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4"&lt;/span&gt; &lt;span class="na"&gt;systemLanguage=&lt;/span&gt;&lt;span class="s"&gt;"eng"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"videoBitrate"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"6000000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;param&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"audioBitrate"&lt;/span&gt;   &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"128000"&lt;/span&gt; &lt;span class="na"&gt;valuetype=&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/switch&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/smil&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;注意: SMIL ファイルは階層化されたディレクトリには配置できないため、ソースファイルを階層化する場合は &lt;code&gt;src&lt;/code&gt; 属性を相対パスで記載します。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  手順3: ビデオファイルのアップロード
&lt;/h2&gt;

&lt;p&gt;Wowza Streaming Engine では VOD 配信用に以下の3つのアプリケーションのタイプがあります。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;タイプ&lt;/th&gt;
&lt;th&gt;説明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VOD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;単一サーバー向けのアプリケーション (VOD ファイルを読み込み、プレーヤーにストリーミングするために使用します)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VOD Edge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;メディア キャッシュ ソースから VOD ファイルを取り込み、VOD ファイルをプレーヤーにストリーミングするために使用します&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VOD HTTP Origin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ビデオ・オンデマンド ファイルのオリジンとして動作し、HTTP ストリーミング プロトコル (MPEG-DASH および Apple HLS) を使用して HTTP キャッシング インフラストラクチャに配信するために使用します&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Wowza Streaming Engine のインストール後の既定のセットアップでは、"&lt;strong&gt;VOD&lt;/strong&gt;" タイプのアプリケーションが自動的にセットアップされていて、既定では &lt;code&gt;[インストール先のディレクトリ]\content&lt;/code&gt; フォルダから VOD ファイルを読み込みます。&lt;/p&gt;

&lt;p&gt;手順1と手順2で作成したファイルを &lt;code&gt;content&lt;/code&gt; フォルダにコピーしても構いません。&lt;/p&gt;

&lt;p&gt;この記事では、メディアキャッシュ機能を使って外部のクラウドストレージにアップロードした VOD ファイルを配信するよう設定します。&lt;/p&gt;

&lt;p&gt;外部のクラウドストレージとして、Azure Storage を使ってみます。Azure CLI の手順を以下に説明しますので、「&lt;a href="https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli"&gt;Azure CLI をインストールする方法&lt;/a&gt;」を参考に Azure CLI をインストールしてください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AZ_LOCATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;japanwest
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AZ_RESOURCE_GROUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YourResourceGroup
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_ACCOUNT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wowzavodstorage
az group create &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_RESOURCE_GROUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_LOCATION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
az storage account create &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_ACCOUNT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_RESOURCE_GROUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_LOCATION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--sku&lt;/span&gt; Standard_LRS
&lt;span class="nv"&gt;AZ_STORAGE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;az storage account keys list &lt;span class="nt"&gt;--account-name&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_ACCOUNT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_RESOURCE_GROUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; | jq &lt;span class="nt"&gt;-r&lt;/span&gt; .[0].value&lt;span class="si"&gt;)&lt;/span&gt;
az storage container create &lt;span class="nt"&gt;--name&lt;/span&gt; vod &lt;span class="nt"&gt;--account-name&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_ACCOUNT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--account-key&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_KEY&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/videos/
az storage copy &lt;span class="nt"&gt;-s&lt;/span&gt; bigbuckbunny-1080p-30fps-h264 &lt;span class="nt"&gt;--destination-container&lt;/span&gt; vod &lt;span class="nt"&gt;--account-name&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_ACCOUNT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--account-key&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;AZ_STORAGE_KEY&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  手順4: Wowza Streaming Engine のセットアップ
&lt;/h2&gt;

&lt;p&gt;コンテンツのアップロードが完了したら、以下の手順で Wowza Streaming Engine のセットアップを行います。&lt;/p&gt;

&lt;h3&gt;
  
  
  メディアキャッシュの有効化
&lt;/h3&gt;

&lt;p&gt;メディアキャッシュ機能を有効にするには、以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [&lt;strong&gt;Server&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;左のメニューから [&lt;strong&gt;Media Cache&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;"&lt;strong&gt;Status: Enabled&lt;/strong&gt;" と表示されている場合は、すでに有効になっているため、以降のステップは必要はありません。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Enable Media Cache]&lt;/strong&gt; ボタンを押します。&lt;/li&gt;
&lt;li&gt;画面上部に [&lt;strong&gt;Media Cache enabled. You must restart the server for changes to take effect.&lt;/strong&gt;] と表示されたら、&lt;strong&gt;[Restart Now]&lt;/strong&gt; ボタンをクリックします。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  メディアキャッシュ ソースの追加
&lt;/h3&gt;

&lt;p&gt;メディアキャッシュソースとして、Azure Blob Storage を追加するには、以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [&lt;strong&gt;Server&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;左のメニューから [&lt;strong&gt;Media Cache&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Source&lt;/strong&gt;] タブをクリックし、&lt;strong&gt;[+Add Media Cache Source]&lt;/strong&gt; ボタンを押します。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以下のパラメーター情報を入力して、&lt;strong&gt;[+Add]&lt;/strong&gt; ボタンをクリックします。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パラメーター&lt;/th&gt;
&lt;th&gt;値&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source Name&lt;/td&gt;
&lt;td&gt;Azure Blob Storage のメディアソースキャッシュの任意の名前: 例: &lt;code&gt;Azure:wowzavodstorage&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;Azure Blob Storage のメディアソースキャッシュの説明 (任意)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Type&lt;/td&gt;
&lt;td&gt;メディアキャッシュソースのタイプ: &lt;code&gt;Azure&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prefix&lt;/td&gt;
&lt;td&gt;メディアキャッシュソースのプレフィックス: &lt;code&gt;azblob/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blob Storage Account Name&lt;/td&gt;
&lt;td&gt;Azure Blob Storage アカウントの名前: &lt;code&gt;wowzavodstorage&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blob Storage Account Access Key&lt;/td&gt;
&lt;td&gt;Azure Blob Storage アカウント鍵: &lt;code&gt;${AZ_STORAGE_KEY}&lt;/code&gt; の値&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  VOD Edge アプリケーションの作成
&lt;/h2&gt;

&lt;p&gt;VOD Edge アプリケーションの作成は、以下の手順で行います。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [&lt;strong&gt;Applications&lt;/strong&gt;] の ▼ をクリックし、[&lt;strong&gt;Add Application&lt;/strong&gt;] をクリックします。&lt;/li&gt;
&lt;li&gt;VOD Edge のボタンをクリックし、[&lt;strong&gt;Enter a name for your new application&lt;/strong&gt;] のテキストボックスに "&lt;strong&gt;vodedge&lt;/strong&gt;" と入力し、&lt;strong&gt;[+Add]&lt;/strong&gt; ボタンをクリックします。&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Playback Types&lt;/strong&gt;] では、配信に必要となる方式の項目をチェックします (ここではすべての項目をチェックします)。&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Media Cache Source&lt;/strong&gt;] では、[&lt;strong&gt;All Media Cache Sources are available&lt;/strong&gt;] を選択します。&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Closed Caption Sources&lt;/strong&gt;] では、配信に必要となる字幕形式の項目をチェックします (ここではすべての項目をチェックします)。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Save]&lt;/strong&gt; ボタンをクリックし、VOD Edge アプリケーション設定を保存します。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  手順5: アダプティブストリーミング再生のテスト
&lt;/h2&gt;

&lt;p&gt;手順3でコンテンツのアップロードと手順4が完了したら、VOD ファイルの配信ができる状態になります。&lt;/p&gt;

&lt;p&gt;SMIL ファイルのメディアキャッシュソースの再生 URL は以下のように構成されます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;http(s)://&lt;strong&gt;[Wowza Streaming Engine のドメイン名]&lt;/strong&gt;/&lt;strong&gt;[VOD Edgeアプリケーション名]&lt;/strong&gt;/_definst_/smil:&lt;strong&gt;[Media Cache Source Prefix]&lt;/strong&gt;&lt;strong&gt;[Media Source の Path]&lt;/strong&gt;/&lt;strong&gt;[Manifest]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Manifest]&lt;/strong&gt; は playlist.m3u8 または manifest.mpd&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;VOD コンテンツの再生 URL は、以下の通りです。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ストリーミング形式&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HLS&lt;/td&gt;
&lt;td&gt;https://&lt;em&gt;[WowzaStreamingEngineのドメイン名]&lt;/em&gt;/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/playlist.m3u8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DASH&lt;/td&gt;
&lt;td&gt;https://&lt;em&gt;[WowzaStreamingEngineのドメイン名]&lt;/em&gt;/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/manifest.mpd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://testplayer.demo.liveinstantly.cloud/"&gt;Web プレイヤー&lt;/a&gt;を使って、再生のテストを行います。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zno_y9Y9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-vod-contents-with-wse/./wowza-streaming-engine-vod-play-test.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zno_y9Y9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://shigeyf.dev/posts/_streaming/stream-vod-contents-with-wse/./wowza-streaming-engine-vod-play-test.jpg" alt="VOD再生テスト" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;メディアキャッシュ ソース上の MP4 ファイルに対して、RTMP や RTSP での配信も可能です。&lt;/p&gt;

&lt;p&gt;再生 URL の中の "smil:" の代わりに "mp4:" を使います。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;この記事では、VOD ファイルをクラウドストレージにアップロードして、Wowza Streaming Engine 経由で&lt;br&gt;
ストリーミング配信を行うための設定を紹介しました。&lt;/p&gt;

&lt;p&gt;Wowza Streaming Engine を利用することで、マルチビットレートの MP4 ファイルを Apple HLS, MPEG-DASH などの&lt;br&gt;
ストリーミング形式に変換することができるようになります。&lt;/p&gt;

&lt;p&gt;複数の Wowza Streaming Engine サーバーを導入することでスケーラビリティ高い配信を実現することもできます。&lt;br&gt;
また、さらに CDN と組み合わせを行うことで大規模な HTTP ベースのアダプティブストリーミング配信を実現することも可能となります。&lt;/p&gt;

</description>
      <category>wowzastreamingengine</category>
      <category>vod</category>
      <category>wowza</category>
      <category>streaming</category>
    </item>
  </channel>
</rss>
