4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScriptビデオプレーヤーのHLSストリームでデフォルトのオーディオトラックを選択します

Posted at

##はじめに

こんにちは streampack チームのメディです。
https://cloudpack.jp/service/option/streampack.html

Copyrights

Elephants Dream
© copyright Blender Foundation | https://orange.blender.org

Screen Shot 2020-11-19 at 16.21.01.png

###目的
HLSビデオでデフォルトのオーディオトラックを設定する方法を学びます。

###ツール
VideoJS:オープンソースのJavaScriptビデオプレーヤー。

###説明
####マニフェストについて
複数のオーディオトラックを持つHLSマニフェストの例。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Chinese",FORCED=NO,AUTOSELECT=YES,URI="chinese/ed.ttml",LANGUAGE="zho"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",FORCED=NO,AUTOSELECT=YES,URI="french/ed.ttml",LANGUAGE="fra"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="en/chunklist_w370587926_b160000_ao_slen_t64RW5nbGlzaA==.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="sp",NAME="Spanish",DEFAULT=NO,AUTOSELECT=YES,URI="sp/chunklist_w370587926_b160000_ao_slsp_t64U3BhbmlzaA==.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="Commentary (eng)",DEFAULT=NO,AUTOSELECT=NO,URI="com/chunklist_w370587926_b160000_ao_slen_t64Q29tbWVudGFyeSAoZW5nKQ==.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2962000,NAME="High",CODECS="avc1.66.30",RESOLUTION=1280x720,AUDIO="aac",SUBTITLES="subs"
1280/chunklist_w370587926_b2962000_vo_slen_t64TWFpbg==.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1427000,NAME="Medium",CODECS="avc1.66.30",RESOLUTION=768x432,AUDIO="aac",SUBTITLES="subs"
768/chunklist_w370587926_b1427000_vo_slen_t64TWFpbg==.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=688000,NAME="Low",CODECS="avc1.66.30",RESOLUTION=448x252,AUDIO="aac",SUBTITLES="subs"
448/chunklist_w370587926_b688000_vo_slen_t64TWFpbg==.m3u8

上記のマニフェストでは、英語がデフォルトのオーディオトラックです。

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="en/chunklist_w370587926_b160000_ao_slen_t64RW5nbGlzaA==.m3u8"

####ビデオイベントについて
HLSマニフェストが読み込まれた後、オーディオトラックを選択する必要があります。
ブラウザによって、トリガーされるイベントは異なります。
たとえば、ChromeとFireFoxではloadedmetadataをリッスンする必要があり、Safariでは canplayをリッスンする必要があります。

###実装

次の例では、スペイン語をデフォルトのオーディオトラックとして設定しています。

マニフェストでは、次のオーディオトラックです。

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="sp",NAME="Spanish",DEFAULT=NO,AUTOSELECT=YES,URI="sp/chunklist_w370587926_b160000_ao_slsp_t64U3BhbmlzaA==.m3u8"
<!DOCTYPE html>
<html>

<head>
  <title>Videojs 7.8.3 + multi audio</title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/video.js/7.8.3/video-js.min.css" />
  <script src="//cdnjs.cloudflare.com/ajax/libs/video.js/7.8.3/video.min.js"></script>
</head>

<body>
  <video class="video-js vjs-default-skin" id="video-container" controls muted autoplay>
    <source src="//cdn.theoplayer.com/video/elephants-dream/playlist.m3u8" type="application/x-mpegURL">
  </video>
</body>
<script>
  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
  var options = {
    fluid: true
  };
  var player = videojs("video-container", options);
  if (isSafari) {
    player.one("canplay", function() {
      activateTrack();
    });
  } else {
    player.one("loadedmetadata", function() {
      activateTrack();
    });
  }

  function activateTrack() {
    try {
      var audioTrackList = player.audioTracks()
      for (var i = 0; i < audioTrackList.length; i++) {
        var track = audioTrackList[i];
        if (track.label == "Spanish") {
          track.enabled = true;
        }
      }
    } catch (e) {
      console.log("ERROR: " + e);
    }
  }
</script>

</html>

###情報源
https://docs.videojs.com/docs/api/player.html

サンプルビデオはtheoplayerからです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?