Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- hls.def
- エンコーダオプションを3か所変更して副音声と5.1ch音声に対応・字幕を配信
- --avhw //VCEEncCはavswがいいらしい
- --audio-codec aac:aac_coder=twoloop --audio-stream 1?:stereo --audio-stream 2?:stereo
- --data-copy timed_id3 --avsync //なんとなくこの位置に
- デフォルトのhls.def
- 公式のストリーミング設定からビットレートと解像度を変更
- Wifiで8Mpbs、高速モバイルで1Mpbs、低速モバイルで200kbps程度を意識
- NVEncC・VCEEncCも同じオプションでいけるはず
- encoder=相対パス\QSVEncC.exe
- window=hide
- high=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 192 --avsync forcecfr -c h264 --vbr 8192 --gop-len 60 --tff --vpp-deinterlace normal --output-res 1920x1080 -i - -o -
- middle=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 192 --avsync forcecfr -c h264 --vbr 1024 --gop-len 60 --tff --vpp-deinterlace normal --output-res 1280x720 -i - -o -
- low=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 64 --avsync forcecfr -c h264 --vbr 128 --gop-len 60 --tff --vpp-deinterlace normal --output-res 320x180 -i - -o -
- デフォルトのmain.def
- 終了マージンをマイナスにする場合はソースの変更が必要
- うちの環境では終了マージンが0秒だと2秒程度早く終わるので-2、CSが3秒遅いので-3
- 録画ファイル名はTVTestと同じにした
- EPG更新が6時だとほぼ電波あり
- tvtest=フルパス\TvmaidMAYA\tvtest\TVTest.exe
- record.folder=フルパス\録画フォルダ
- record.margin.start=3
- record.margin.end=-8
- record.file={start-yyyy}{start-MM}{start-dd}{start-hh}{start-mm}_{title}.ts
- epg.hour=6
- url=http://+:20001/
- autosleep=off
- postprocess=
- epgurl=http://localhost:20001/maya/index.html
- epg.basic=4,6,7
- chat.niconico.mail=
- chat.niconico.password=
- デフォルトのtuner.def
- BonDriverProxyExを利用
- defaultフォルダに入れておけばチューナ更新だけで設定完了
- 地上1=フルパス\TvmaidMAYA\tvtest\BonDriver_T.dll
- 地上2=フルパス\TvmaidMAYA\tvtest\BonDriver_T.dll
- 地上3=フルパス\TvmaidMAYA\tvtest\BonDriver_T.dll
- 地上4=フルパス\TvmaidMAYA\tvtest\BonDriver_T.dll
- BS・CS1=フルパス\TvmaidMAYA\tvtest\BonDriver_S.dll
- BS・CS2=フルパス\TvmaidMAYA\tvtest\BonDriver_S.dll
- BS・CS3=フルパス\TvmaidMAYA\tvtest\BonDriver_S.dll
- BS・CS4=フルパス\TvmaidMAYA\tvtest\BonDriver_S.dll
- 副音声と5.1ch音声に対応・ARIB字幕をid3 timed-metadataに変換できるようにする
- tsreadex.exeをルート(Tvmaid.exeのあるフォルダ)に設置
- ソースの変更も必要
- 字幕を表示するためaribb24.jsをビルドして設置
- 1.node.jsのzipをダウンロードして解凍したフォルダにaribb24.js-mainフォルダを入れる
- 2.コマンドプロンプトでnode.exeのあるフォルダに移動して「npm i aribb24.js」を実行
- 3.node_modules\aribb24.js\distにaribb24.jsがあるのでTvmaidMAYA\wwwroot\libに設置
- 字幕オフアイコンのsubtitles_off EF72が入っているmaterial-iconsに更新
- https://github.com/jossef/material-design-icons-iconfont/tree/master/dist/fonts
- から
- MaterialIcons-Regular.ttf
- MaterialIcons-Regular.woff
- MaterialIcons-Regular.woff2
- をダウンロードしてTvmaidMAYA\wwwroot\material-iconsフォルダの中身を上書き
- epg.tag.html
- ユーザ番組表を削除 //使わない場合
- { text: "ユーザ1" },
- { text: "ユーザ2" },
- { text: "ユーザ3" },
- 番組表変更時に左端に移動 //真ん中の1行
- self.epgName = item.text
- content.scrollLeft = 0
- load()
- now-barの横幅を修正して番組表変更時に横幅がリセットされるようにする //下の1行
- var nowbar = self.refs["now-bar"]
- var width = self.refs["service-bar"].scrollWidth - 30
- index.html
- 字幕を表示するためaribb24.jsを追加 //真ん中の1行
- <script src="/lib/hls.min.js"></script>
- <script src="/lib/aribb24.js"></script>
- <script src="jslib.js"></script>
- デフォルト設定をhls emu,high,削除済み録画は表示しないに変更 //hlsはApple端末のみ
- if (localStorage.getItem("epg-hour-hight") == null)
- localStorage.setItem("epg-hour-hight", 200)
- if (localStorage.getItem("stream-type") == null)
- localStorage.setItem("stream-type", "hls emu")
- if (localStorage.getItem("video-mode") == null)
- localStorage.setItem("video-mode", "high")
- if (localStorage.getItem("hls-ready") == null)
- localStorage.setItem("hls-ready", "1")
- if (localStorage.getItem("record/view") == null)
- localStorage.setItem("record/view", "1")
- })
- live.tag.html
- ニコニコ実況ボタンを削除 //使わない場合
- <button class="btn pull-right" onclick="{ changeChatMode }"><i class="material-icons">{ chatMode ? "" : "" }</i></button>
- ミュートボタンと音量バーと字幕ボタンを設置 //置く場所で順番を変えられる
- <button class="btn pull-left" onclick="{ selectService }">{ service }</button>
- <button class="btn pull-right" onclick="{ changeCaption }"><i class="material-icons">{ captionStatus ? "" : "" }</i></button>
- <input type="range" class="btn pull-right" oninput="{ volume }" id="live/volume" min="0.0" max="1.0" step="0.1" value="1.0">
- <button class="btn pull-right" onclick="{ mute }" id="live/mute"><i class="material-icons"></i></button>
- <button class="btn pull-right" onclick="{ playToggle }"><i class="material-icons">{ playIcon ? "" : "" }</i></button>
- 字幕用レンダラを定義 //hlsjsと一緒に使うのでここに置いた
- var hlsjs
- var renderer
- デフォルトで字幕オン //ニコニコ実況ボタンと機能が近いのでここに置いた
- self.chatMode = localStorage.getItem("live/chat-mode") == 1
- self.captionStatus = localStorage.getItem("live/caption") ?? 1 == 1
- ミュートと音量変更と字幕オンオフ機能を追加 //function playHlsEmu(url)の上に置いた
- mute()
- {
- if (video.muted)
- video.muted = false
- else
- video.muted = true
- volumeicon()
- }
- volume()
- {
- video.volume = document.getElementById('live/volume').value
- video.muted = false
- volumeicon()
- }
- function volumeicon()
- {
- if (video.muted)
- document.getElementById('live/mute').innerHTML = '<i class="material-icons"></i>'
- else
- {
- if (video.volume > 0.5)
- document.getElementById('live/mute').innerHTML = '<i class="material-icons"></i>'
- else if (video.volume > 0.0)
- document.getElementById('live/mute').innerHTML = '<i class="material-icons"></i>'
- else
- document.getElementById('live/mute').innerHTML = '<i class="material-icons"></i>'
- }
- }
- changeCaption()
- {
- self.captionStatus = !self.captionStatus
- localStorage.setItem("live/caption", self.captionStatus ? 1 : 0)
- if (renderer != null && self.captionStatus)
- renderer.show()
- else if (renderer != null)
- renderer.hide()
- }
- function playHlsEmu(url)
- HLS EMUで字幕を表示 //hlsjsの宣言の下
- hlsjs = new Hls({ manifestLoadingTimeOut: 20000, manifestLoadingMaxRetry: 3, maxMaxBufferLength: 10 })
- hlsjs.on(Hls.Events.FRAG_PARSING_METADATA, function (event, data)
- {
- for (var sample of data.samples)
- renderer.pushID3v2Data(sample.pts, sample.data)
- })
- hlsjs.on(Hls.Events.MEDIA_ATTACHED, function ()
- 字幕をアタッチする //function play()でhlsかhls emuの場合
- self.videoState = "Starting..."
- renderer = new aribb24js.CanvasRenderer(
- {
- enableAutoInBandMetadataTextTrackDetection: !Hls.isSupported(),
- })
- renderer.attachMedia(video)
- if (self.captionStatus)
- renderer.show()
- else
- renderer.hide()
- record-play.tag.html
- ニコニコ実況ボタンを削除 //使わない場合
- <button class="btn pull-right" onclick="{ changeChatMode }"><i class="material-icons">{ chatMode ? "" : "" }</i></button>
- ミュートボタンと音量バーと字幕ボタンを設置 //置く場所で順番を変えられる
- <button class="btn" onclick="{ stop }"><i class="material-icons"></i></button>
- <button class="btn" onclick="{ mute }" id="record/mute"><i class="material-icons"></i></button>
- <input type="range" class="btn" oninput="{ volume }" id="record/volume" min="0.0" max="1.0" step="0.1" value="1.0">
- <button class="btn" onclick="{ changeCaption }"><i class="material-icons">{ captionStatus ? "" : "" }</i></button>
- <button class="btn" onclick="{ longseek }" id="time-counter">{ timeCounter }</button>
- 字幕用レンダラを定義 //hlsjsと一緒に使うのでここに置いた
- var hlsjs
- var renderer
- デフォルトで字幕オン //ニコニコ実況ボタンと機能が近いのでここに置いた
- self.chatMode = localStorage.getItem("record/chat-mode") == 1
- self.captionStatus = localStorage.getItem("record/caption") ?? 1 == 1
- ミュートと音量変更と字幕オンオフ機能を追加 //function playHlsEmu(url)の上に置いた
- mute()
- {
- if (video.muted)
- video.muted = false
- else
- video.muted = true
- volumeicon()
- }
- volume()
- {
- video.volume = document.getElementById('record/volume').value
- video.muted = false
- volumeicon()
- }
- function volumeicon()
- {
- if (video.muted)
- document.getElementById('record/mute').innerHTML = '<i class="material-icons"></i>'
- else
- {
- if (video.volume > 0.5)
- document.getElementById('record/mute').innerHTML = '<i class="material-icons"></i>'
- else if (video.volume > 0.0)
- document.getElementById('record/mute').innerHTML = '<i class="material-icons"></i>'
- else
- document.getElementById('record/mute').innerHTML = '<i class="material-icons"></i>'
- }
- }
- changeCaption()
- {
- self.captionStatus = !self.captionStatus
- localStorage.setItem("record/caption", self.captionStatus ? 1 : 0)
- if (renderer != null && self.captionStatus)
- renderer.show()
- else if (renderer != null)
- renderer.hide()
- }
- function playHlsEmu(url)
- HLS EMUで字幕を表示 //hlsjsの宣言の下
- hlsjs = new Hls({ manifestLoadingTimeOut: 20000, manifestLoadingMaxRetry: 3, maxMaxBufferLength: 10 })
- hlsjs.on(Hls.Events.FRAG_PARSING_METADATA, function (event, data)
- {
- for (var sample of data.samples)
- renderer.pushID3v2Data(sample.pts, sample.data)
- })
- hlsjs.on(Hls.Events.MEDIA_ATTACHED, function ()
- 字幕をアタッチする //function play()でhlsかhls emuの場合
- var ready = localStorage.getItem("hls-ready")
- self.videoState = "Starting..."
- renderer = new aribb24js.CanvasRenderer(
- {
- enableAutoInBandMetadataTextTrackDetection: !Hls.isSupported(),
- })
- renderer.attachMedia(video)
- if (self.captionStatus)
- renderer.show()
- else
- renderer.hide()
- setting.tag.html
- ユーザ番組表編集を削除 //使わない場合
- <div>ユーザ番組表編集</div>
- <div>
- <button class="btn" onclick="{ editUserEpg }" data-id="1">ユーザ1</button>
- </div>
- <div>
- <button class="btn" onclick="{ editUserEpg }" data-id="2">ユーザ2</button>
- </div>
- <div>
- <button class="btn" onclick="{ editUserEpg }" data-id="3">ユーザ3</button>
- </div>
- ストリーミングのPD方式を削除してhls emuをデフォルトに設定 //使わない場合
- var list =
- [
- { text: "hls emu" },
- { text: "hls" }
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement