AbemaTV のTVチャンネル
「AbemaTV」は、動画配信に2つのスタイルを用意しています。 シリーズ単位で動画を纏めた「書庫型」配信スタイルは、多くの動画配信サイトと同じです。 もうひとつは「TV放送型」の配信スタイルです。 配信予定(番組表)が固定した40ほどのTVチャンネルから、好きなチャンネルを選択して閲覧するスタイルです。
「TV放送型」はシリーズ動画の「一挙配信」に使われる事が殆どですが、ユーザー側で動画の観る箇所を選択したり戻したりできないので、「書庫型」の方がずっと閲覧し易いものです。
では、「TV放送型」なんて意味ないのではとなりそうですが、そうでもないのです。「一挙配信」は最初に「TV放送型」で配信され、その終了後から1週間程度の「書庫型」の「一挙配信」に移行する場合が殆どです。 そのため「TV放送型」の配信の方が、いち早く「一挙配信」を観れるわけです。 仕事休みの関係で「TV放送型」の方を選ぶしか無い場合があるかもしれません。
また、「TV放送型」の方がフリーズが少ない様です。 コンテンツに拠ってサーバーへのアクセス量を制御しているのかも知れません。
下は「TV放送型」の動画プレーヤーの様子で、動画の右側にマウスポインターを乗せると、チャンネル選択のメニューが表示されます。
右上隅の「閉じる」を押し、マウスポインターを画面外に退けると「サブウインドウ表示」と同様の拡大表示にできます。 もちろん全画面表示も可能で、これは良いデザインです。
コマーシャル画面で音声をミュート
「TV放送型」のチャンネル表示の動画プレーヤーは、「全画面」と「音量調節」のコントロールしかありません。
「CM」をしっかり動画の間に配信できるのが Abemaの戦略ですね。「CM」の多くが Abema配信のお知らせですが、シリーズ動画への割り込み感は否めません。
そこで実験的ですが、「CM」の音声をミュートするツールを作ってみました。 本当は音量を少し下げる様な調節がしたいのですが、現在の所はできないので、ミュートボタンをツールで押す方法を採っています。
トリガー 要素
「動画の終了」「CMの終了」を適確に判定できるトリガー要素が必要です。 今回は、動画の開始時とCMに入る直前に表示されるアニメーションを利用しました。
この要素は、Abema側のスクリプトでインポーズされ、常時はHTML上にこの要素が存在しません。 こういうのを捕まえるのは苦労します。 DevToolsを起動して要素がインポーズされるのを待ち、その瞬間のスクリーンショットから要素名を調べます。
後は、この要素の親要素に「MutationObserver」をセットして、表示要素の出現/消失をトリガーにしてボリュームを操作する関数を動作させています。
現在の機能の制限
このツールは、かなり正確に「CM」の動画再生の間だけ音声をミュートできます。 ただし、「一挙配信」の動画コンテンツは数時間にわたる場合が多く、同じチャンネルの次の「一挙配信」の開始との間に、10sec程度の時間調節が入る場合があります。
この時間調節は下の様な特別な画面表示になりますが、この後の新しい「一挙配信」の最初だけは、上記のトリガーにしたアニメーションが表示されません。
この理由で「動画の開始」を判定出来ず、その前の「一挙配信」の動画終了時に「ミュート」した状態をリセットできません。 従ってこの場合だけは、手作業で「音声」を「ON」にする必要があります。 ただし、上の「一挙配信」の繋ぎ画面は頻繁には出ないので、余り困る事は無いと思います。
チャンネル切替え時にミュートはリセットされます
「メインコンテンツ」から「CM」に入ると「ミュート」が適用されますが、その状態から他のチャンネルに移動して「ミュート」が続くよりも、チャンネル移動時に「ミュート」がリセットされた方が便利と考えました。
その代わり、他のチャンネルから「CM表示中」のチャンネルに移動した場合は、「ミュート」は適用されません。 これは仕様です。 ただし、そのチャンネルを続けて閲覧して「CM」に入った場合は、「ミュート」が適用されます。
「 AmbTV OnAir」
管理上で、このツールは「 AmbTV Comfy」のサブツールとしたいので、ツール名の前半を同じにしました。
「TV放送型」の画面のCMは殆どが「AbemaTV」の配信予定なので、「ミュート」したくないユーザーも居ると考え、敢えて「 AmbTV Comfy」と統合しませんでした。
「 AmbTV OnAir」を利用するには
このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。
❶「Tampermonkey」を導入します
◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。
既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。
拡張機能の導入については、以下のページに簡単な説明があるので参照ください。
❷「Tampermonkey」にスクリプトを登録します
◎「Tampermonkey」の「+」マークの「新規スクリプト」タブを開きます。
◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。
〔コピー方法〕 右サイドバーの マークのボタンを1度押してください。
コード枠内の右クリック ➔ コード全体の選択 ➔ コピー操作 が可能になります。
◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。
〔 AmbTV OnAir 〕 ver. 0.1
// ==UserScript== // @name AmbTV OnAir // @namespace http://tampermonkey.net/ // @version 0.1 // @description AbemaTV ユーティリティ // @author Ameba User // @match https://abema.tv/now-on-air/* // @icon https://www.google.com/s2/favicons?sz=64&domain=abema.tv // @grant none // ==/UserScript== let target=document.querySelector('head > title'); let monitor0=new MutationObserver(tv_player_env); monitor0.observe(target, { childList: true }); function tv_player_env(){ let retry=0; let interval=setInterval(wait_target, 20); function wait_target(){ retry++; if(retry>100){ // リトライ制限 100回 2secまで clearInterval(interval); } let TP=document.querySelector('.com-tv-TVScreen__player'); if(TP){ clearInterval(interval); player_vol(TP); }}} function player_vol(TP){ setTimeout(()=>{ v_vol(1); // チャンネル変更時にミュートをリセット }, 600); let monitor1=new MutationObserver(con_vol); monitor1.observe( TP, { childList: true }); con_vol(); function con_vol(){ let LF=document.querySelector('.com-tv-LinearFooter__feed-super'); if(TP.querySelector('.com-tv-TVScreen__eyecatch')){ v_vol(1); } else{ if(!LF.textContent){ v_vol(0); }}} } // player_vol(TP) function v_vol(n){ // 0: OFF 1: ON let button=document.querySelector('.com-playback-Volume__icon-button'); if(button){ let label=button.getAttribute('aria-label'); if(n==0 && label=='音声をオフにする'){ button.click(); } else if(n==1 && label=='音声をオンにする'){ button.click(); }}}
「AmbTV OnAir」最新版について
旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。
●「AmbTV OnAir 」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。