Chinachu Air から Mirakurun を使用するみたいなので環境を構築してみた。
Mirakurun + Rivarun で Chinachu を動かし、TVTest を使用して Windows からも視聴できるようになります。

 

Mirakurun

kanreisa氏が作成した Nodejs で動いている Spinel とか BonDriverProxy みたいなもんです。
UnixSocket でも、TCPでも動かせます。

Mirakurun – github

 

Rivarun

こちらも kanreisa氏が作成した Mirakurun のクライアントです。
ちなみに、Chinachu Air 用ではないらしいです。

Rivarun – github

 

BonDriver_Mirakurun

h-mineta氏が作成した TVTest で動かすための BonDriver です。
ソースファイルしか上がっていないのでビルドする必要があります。
MITライセンスなのでビルド済みを配布しておきます。

Download – BonDriver_Mirakurun
BonDriver_Mirakurun – github

 

構成

配信サーバー

OS IP チューナー 構成
Ubuntu 14.04 LTS 192.168.20.7 PT2 Mirakurun

 

Chinachu サーバー

OS IP 構成
Ubuntu 16.04 LTS 192.168.20.12 Chinachu + Rivarun

 

クライアント TVTest

OS IP 構成
Windows 10 x64 192.168.20.253 TVTest + BonDriver_Mirakurun

本当は 配信サーバーと、Chinachu サーバーは一緒が良かったんですけどどうも Chinachu を入れるのに失敗してしまい、VMに建てました。

 

 

配信サーバー

PT2 / PT3 ドライバーのインストールならびに、カードリーダー、recpt1 のインストールは他サイトを参考にしてください。

Mirakurun を構築するために Nodejs => 5.0.0 以上をインストールします。

 

nodejs と npm をインストール

npm を使うためにまずは最新ではないものをインストールします。

# apt-get install -y nodejs npm

 

n package をインストール

# npm cache clean
# npm install n -g

 

n package を使って nodejs をインストール

n package を使うと最新の nodejs をインストールすることができるらしいです。

# n stable
# ln -sf /usr/local/bin/node /usr/bin/node

 

最新版がインストールされたかを確認

# node -v
v6.2.0
# npm -v
3.8.9

ちなみに npm は Ubuntu 標準のレポジトリからインストールしたものですが普通に動いているので大丈夫だと多分。
よく分からないです。

 

PM2 のインストール

# npm install pm2 -g

 

arib-b25 のインストール

# npm install arib-b25-stream-test -g --unsafe

 

Mirakurun のインストール

# npm install mirakurun -g --unsafe --production

 

Mirakurun の設定

最初はサーバーの設定
終了時は Shift + ZZ で上書き保存します。

# mirakurun config server
path: /var/run/mirakurun.sock
port: 8888 ←リッスンポート
host: ~ ←全てのIPから受け付ける
logLevel: 2

 

次はチューナーの設定

# mirakurun config tuners
- name: PT2-S1
types:
- BS
- CS
isPT2: true
command: recpt1 --device /dev/pt1video0  - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PT2-S2
types:
- BS
- CS
isPT2: true
command: recpt1 --device /dev/pt1video1  - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PT2-T1
types:
- GR
isPT2: true
command: recpt1 --device /dev/pt1video2  - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PT2-T2
types:
- GR
isPT2: true
command: recpt1 --device /dev/pt1video3  - -
decoder: arib-b25-stream-test
isDisabled: false

isPT2 isDisabled command name は各自設定してください。
見て分かる通り recpt1 のインストールが必要です。

 

チャンネルの設定

# mirakurun config channels
- name: MX
type: GR
channel: '16'
- name: CX
type: GR
channel: '21'
- name: TBS
type: GR
channel: '22'
- name: TX
type: GR
channel: '23'
- name: EX
type: GR
channel: '24'
- name: NTV
type: GR
channel: '25'
- name: NHK E
type: GR
channel: '26'
- name: NHK G
type: GR
channel: '27'
- name: NHK BS1
type: BS
channel: BS15_0
serviceId: 101
- name: NHK BS1 (Sub)
type: BS
channel: BS15_0
serviceId: 102
- name: NHK BS Premium
type: BS
channel: BS15_1
serviceId: 103
- name: NHK BS Premium (Sub)
type: BS
channel: BS15_1
serviceId: 104
- name: BS Nippon
type: BS
channel: BS13_0
serviceId: 141
- name: BS Nippon (Sub)
type: BS
channel: BS13_0
serviceId: 142
- name: BS Asahi
type: BS
channel: BS01_0
serviceId: 151
- name: BS Asahi (Sub)
type: BS
channel: BS01_0
serviceId: 152
- name: BS-TBS
type: BS
channel: BS01_1
serviceId: 161
isDisabled: false
- name: AT-X
type: CS
channel: CS16
serviceId: 333
isDisabled: false
- name: BS SPTV
type: SKY
channel: Ch485
serviceId: 33353
satelite: JCSAT3A
isDisabled: false
- name: AT-X HD
type: SKY
channel: ATXHD
serviceId: 33435
satelite: JCSAT3A
isDisabled: false
- name: AXN HD
type: SKY
channel: AXNHD
serviceId: 33418
satelite: JCSAT4A
isDisabled: false

ちなみに 場所によっては isDisabled があるので使用するものは false とする必要があります。

 

Mirakurun を起動する

# mirakurun start
[PM2] Applying action restartProcessId on app [mirakurun-server](ids: 0)
[PM2] [mirakurun-server](0) ✓
┌──────────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name         │ id │ mode │ pid   │ status │ restart │ uptime │ memory      │ watching │
├──────────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ mirakurun-server │ 0  │ fork │ 10577 │ online │ 6       │ 0s     │ 17.703 MB   │ disabled │
└──────────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘
Use `pm2 show ` to get more details about an app

きちんと起動しているかは少し時間が経った後に

# lsof -i:8888
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Mirakurun 10577 root   12u  IPv4  44941      0t0  TCP pen4.luis.local:8888 (LISTEN)
Mirakurun 10577 root   13u  IPv4  44942      0t0  TCP localhost:8888 (LISTEN)
Mirakurun 10577 root   15u  IPv4  45022      0t0  TCP pen4.luis.local:8888->192.168.20.253:53171 (ESTABLISHED)

とすれば確認できます。便利ですよ lsof

 

 

Chinachu サーバーの設定

Chinachu のインストールは Github を見て下さい。
Installation – Github

 

Rivarun のインストール

前準備として Nodejs => 5.0.0 が必要なので上を見てインストールしてください。

# npm install rivarun -g

 

Chinachu の設定

# vim /home/chinachu/chinachu/config.json
{
"recordedDir" : "./recorded/",
"temporaryDir": "/tmp/",
"wuiUsers": [
":"
],
"wuiAllowCountries": ["JP"],
"wuiPort"        : 10772,
"wuiHost"        : "::",
"wuiTlsKeyPath"  : null,
"wuiTlsCertPath" : null,
"wuiOpenServer"  : false,
"wuiOpenPort"    : 20772,
"wuiXFF"         : false,
"wuiPreviewer"   : true,
"wuiStreamer"    : true,
"wuiFiler"       : true,
"wuiConfigurator": true,
"recordedFormat": "[][][].m2ts",
"tuners": [
{
"name"        : "PT2-S1",
"isScrambling": false,
"types"       : [ "BS", "CS" ],
"command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <channel> - -",
"noEpg"       : false
},
{
"name"        : "PT2-S2",
"isScrambling": false,
"types"       : [ "BS", "CS" ],
"command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <channel> - -",
"noEpg"       : false
},
{
"name"        : "PT2-T1",
"isScrambling": false,
"types"       : [ "GR" ],
"command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <sid> --ch GR/<channel> - -",
"noEpg"       : false
},
{
"name"        : "PT2-T2",
"isScrambling": false,
"types"       : [ "GR" ],
"command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <sid> --ch GR/<channel> - -",
"noEpg"       : false
}
],
"channels": [
{ "type": "GR", "channel": "16" },
{ "type": "GR", "channel": "21" },
{ "type": "GR", "channel": "22" },
{ "type": "GR", "channel": "23" },
{ "type": "GR", "channel": "24" },
{ "type": "GR", "channel": "25" },
{ "type": "GR", "channel": "26" },
{ "type": "GR", "channel": "27" },
{ "type": "BS", "channel": "101" },
{ "type": "BS", "channel": "102" },
{ "type": "BS", "channel": "103" },
{ "type": "BS", "channel": "141" },
{ "type": "BS", "channel": "151" },
{ "type": "BS", "channel": "161" },
{ "type": "BS", "channel": "171" },
{ "type": "BS", "channel": "181" },
{ "type": "BS", "channel": "191" },
{ "type": "BS", "channel": "192" },
{ "type": "BS", "channel": "193" },
{ "type": "BS", "channel": "200" },
{ "type": "BS", "channel": "211" },
{ "type": "BS", "channel": "222" },
{ "type": "CS", "channel": "CS4",  "sid": "100" },
{ "type": "CS", "channel": "CS16", "sid": "333" }
]
}</pre>
<p>BS / CS のコマンドは<br />
<span style="background-color: #ff99cc;">/usr/local/bin/rivarun –mirakurun 192.168.20.7:8888 –b25 –priority 1 –sid <channel> – –<br />
</span>GR のコマンドは<br />
<span style="background-color: #ff99cc;">/usr/local/bin/rivarun –mirakurun 192.168.20.7:8888 –b25 –priority 1 –sid <sid> –ch GR/<channel> – –<br />
</span>と若干違います。また、IPアドレスは <span style="color: #ff6600;">Mirakurun サーバーのIPアドレス</span>、ポートは<span style="color: #ff6600;">指定したポート</span>を設定してください。</p>
<p>あとは <span style="background-color: #ff99cc;">./chinachu update -f</span> とかして正常に動作するか確認してください。</p>
<p> </p>
<p> </p>
<h2><span class="ez-toc-section" id="TVTest_%E3%81%AE%E8%A8%AD%E5%AE%9A"></span>TVTest の設定<span class="ez-toc-section-end"></span></h2>
<p>BonDriver_Mirakurun のビルド済みをダウンロードし、TVTest と同じディレクトリに保存してください。<br />
各チューナーの設定ファイルを弄って下さい。</p>
<pre class="toolbar:2 show-lang:2 lang:default decode:true">[GLOBAL]
SERVER_HOST="pen4.luis.local" ←Mirakurun サーバーIP
SERVER_PORT=8888 ←Mirakurun サーバーのポート</pre>
<p>あとはTVTest を起動して、チャンネルスキャンとかやれば視聴できると思います。<br />
もし見れない場合は ファイアーウォールの設定だったり色々確認してみてください。</p>
    </div>

    <footer class="entry-footer">
		    </footer>
</article>


	<nav class="navigation post-navigation" aria-label="投稿">
		<h2 class="screen-reader-text">投稿ナビゲーション</h2>
		<div class="nav-links"><div class="nav-previous"><a href="https://rarirure.rip/archives/641" rel="prev"><span class="cz-d-inline-flex cz-align-items-center meta-nav" aria-hidden="true"><svg class="cz-icon cz-icon-arrow-left" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/front.svg#cz-icon-arrow-left"></use></svg>前の投稿</span> <span class="screen-reader-text">前の投稿:</span> <br/><span class="post-title">Ubuntu 16.04 LTS で PT3 / PT2 のドライバーがインストールできない問題「error: implicit declaration of function ‘vmalloc’」</span></a></div><div class="nav-next"><a href="https://rarirure.rip/archives/639" rel="next"><span class="cz-d-inline-flex cz-align-items-center meta-nav" aria-hidden="true">次の投稿<svg class="cz-icon cz-icon-arrow-right" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/front.svg#cz-icon-arrow-right"></use></svg></span> <span class="screen-reader-text">次の投稿:</span> <br/><span class="post-title">税込み5,999円の256GB SSD「LITEON MU 2 Ph2-CE240」を買ってみた</span></a></div></div>
	</nav>
<div id="comments" class="comments-area">
    <div class="comments-title-wrap no-responses">
                    </div><!-- .comments-title-flex -->
    	<div id="respond" class="comment-respond">
		<h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/archives/640#respond" style="display:none;">コメントをキャンセル</a></small></h3><form action="https://rarirure.rip/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-form-comment form-group"><label for="comment">コメント <span class="required">※</span></label> <textarea class="cz-form-control"  placeholder="コメントする"  id="comment" name="comment" cols="45" rows="5" maxlength="65525" required></textarea></p><p class="comment-form-author cz-form-group"><label for="author">名前 <span class="required">※</span></label> <input class="cz-form-control"  id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p>
<p class="comment-form-email cz-form-group"><label for="email">メール <span class="required">※</span></label> <input class="cz-form-control"  id="email" name="email" type="email" value="" size="30" maxlength="100" autocomplete="email" required /></p>
<p class="comment-form-url cz-form-group"><label for="url">サイト</label> <input class="cz-form-control"  id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p>
<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="コメントを追加" /> <input type='hidden' name='comment_post_ID' value='640' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="2c78a965b1" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="66"/><script>
document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p></form>	</div><!-- #respond -->
	</div>
            <button id="sidebar-toggler" class="open">
            <span class="screen-reader-text">
                サイドバーの切り替え            </span>
            <svg class="cz-icon cz-icon-header" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/admin.svg#cz-icon-header"></use></svg>        </button>    </div><!-- .primary-sub-wrapper --></section>

            </div><!-- .cz-row -->
        </div><!-- .cz-container -->
    </main><!-- #content -->
<footer id="componentz-footer">
    <div class="componentz-widgets">
        <div class="cz-container">
            <div class="cz-row">
                
                <div class="cz-col-md-12 cz-text-center">
                    <div class="componentz-copyright">
						
                                        <a href="https://rarirure.rip/" title="rarirureluis" class="site-title">
                            <span>rarirureluis</span>
                    </a>
                <div class="componentz-copyright-theme">
                        <a href="https://wordpress.org" title="WordPress">
		        WordPress            </a>
	        theme by            <a href="https://componentz.net/theme" title="componentz">
                <svg class="cz-icon cz-icon-componentz-logo" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/front.svg#cz-icon-componentz-logo"></use></svg>                componentz            </a>
                    </div>
                            
                    </div>
                </div>
                
                                
            </div>
        </div>
    </div>
</footer><!-- #componentz-footer -->

    <div class="search-wrapper">
        <a id="btn-search-close" class="btn-search btn-search-close"
           aria-label="検索フォームを閉じる"
           role="button"
           href="#"><svg class="cz-icon cz-icon-close" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/front.svg#cz-icon-close"></use></svg></a>
        <form class="search-wrapper-form" action="https://rarirure.rip" method="get">
            <label class="screen-reader-text hidden" for="search-header">サイト内検索</label>
            <input id="search-header" class="search-wrapper-input" name="s" type="search"
                   placeholder="検索"
                   autocomplete="off"
                   autocorrect="off" autocapitalize="off" spellcheck="false"/>
            <span class="search-wrapper-info">
                Enter キーで検索、ESC で閉じる                <svg class="cz-icon cz-icon-arrow-right" aria-hidden="true" role="img"><use xlink:href="https://rarirure.rip/wp-content/themes/componentz/assets/img/icons/front.svg#cz-icon-arrow-right"></use></svg>            </span>
        </form>
    </div>
        <div class="content-overlay"></div>
</div><!-- #componentz-wrapper -->


<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/componentz/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id='kirki-viewport-lists'>var kirkiViewports = {"md":{"value":1200,"scale":1,"minWidth":1200,"maxWidth":1200,"title":"Desktop","icon":"desktop","activeIcon":"desktop-hover","id":"md","type":"max"},"tablet":{"value":991,"scale":1,"minWidth":991,"maxWidth":991,"title":"Tablet","icon":"tablet-default","activeIcon":"tablet-hover","type":"max","id":"tablet"},"mobileLandscape":{"value":767,"scale":1,"minWidth":767,"maxWidth":767,"title":"Landscape","icon":"phone-hr-default","activeIcon":"phone-hr-hover","type":"max","id":"mobileLandscape"},"mobile":{"value":575,"scale":1,"minWidth":575,"maxWidth":575,"title":"Mobile","icon":"phone-vr-default","activeIcon":"phone-vr-hover","type":"max","id":"mobile"}};</script><script id='kirki-variable-lists'>var kirkiCSSVariable = {"data":[{"title":"Colors","key":"color","modes":[{"title":"Default","key":"default"}],"variables":[]},{"title":"Numbers","key":"size","modes":[{"title":"Default","key":"default"}],"variables":[]},{"title":"Text Styles","key":"text-style","modes":[{"title":"Default","key":"default"}],"variables":[]},{"title":"Font Family","key":"font-family","modes":[{"title":"Default","key":"default"}],"variables":[]}]};</script><script id="kirki-api-and-nonce">
    window.wp_kirki = {
        ajaxUrl: "https://rarirure.rip/wp-admin/admin-ajax.php",
        restUrl: "https://rarirure.rip/wp-json/",
        siteUrl: "https://rarirure.rip",
        apiVersion: "v1",
        postId: "640",
        nonce: "225970b302",
        call_from: "",
        templateId: "",
        context: {"id":640,"type":"post"}
    };
    </script><script src="https://rarirure.rip/wp-includes/js/comment-reply.min.js?ver=6.9.4" id="comment-reply-js" async data-wp-strategy="async" fetchpriority="low"></script>
<script src="https://rarirure.rip/wp-content/themes/componentz/assets/lib/bootstrap/bootstrap.min.js?ver=1.3.1" id="componentz-bootstrap-js"></script>
<script src="https://rarirure.rip/wp-content/themes/componentz/assets/lib/aos/aos.min.js?ver=1.3.1" id="componentz-aos-js"></script>
<script src="https://rarirure.rip/wp-content/themes/componentz/assets/lib/simpleparallax/simpleParallax.min.js?ver=1.3.1" id="componentz-simpleparallax-js"></script>
<script src="https://rarirure.rip/wp-content/themes/componentz/assets/lib/jRespond/jRespond.min.js?ver=1.3.1" id="componentz-jrespond-js"></script>
<script id="componentz-functions-js-extra">
var _ComponentzData = {"preloader":"","sticky_header":"1","header_search":"1","header_background":"image","is_child_theme":"","version":"1.3.1"};
//# sourceURL=componentz-functions-js-extra
</script>
<script src="https://rarirure.rip/wp-content/themes/componentz/assets/js/functions.min.js?ver=1.3.1' async='async" id="componentz-functions-js"></script>
<script defer src="https://rarirure.rip/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1776984649" id="akismet-frontend-js"></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://rarirure.rip/wp-includes/js/wp-emoji-release.min.js?ver=6.9.4"}}
</script>
<script type="module">
/*! This file is auto-generated */
const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
//# sourceURL=https://rarirure.rip/wp-includes/js/wp-emoji-loader.min.js
</script>

</body>
</html>
<!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com

Retrieved 2391 objects (465 KB) from Redis using PhpRedis (v6.3.0).
-->