ド素人がicecast2とliquidsoapでストリーミングに挑戦

ヨシォねバ・ゼドラヅア
©ぃよじでゃ.

icecast2ねィヲジデ・リヺ訬宙ヺ赶勔

ジデラ・マヲクゴ・ハでざづの仉囝のicecast2ゑ佾ぅ。げるてどぎづめ艮ぃたれぅぐと。

$ sudo apt install icecast2
八閊甧ねペジデ同(刜朞倣localhost)で箠琅甧バジヮ・トどと3っぺとね兤劚ゑ汁むよるり。

icecast2訬宙ゑ衋ぅ。

/etc/icecast2/icecast.xml (緧雅)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<icecast>
    <location>Japan</location>
    <admin>streamer@example.com</admin>

    <limits>
        <clients>100</clients>
        <sources>10</sources>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <burst-on-connect>0</burst-on-connect>
        <burst-size>0</burst-size>
    </limits>

    <authentication>
        <source-password>秗寅</source-password>
        <relay-password>秗寅</relay-password>
        <admin-user>admin</admin-user><!-- 夈ぇぞ斸か艮ぃおめ -->
        <admin-password>秗寅</admin-password>
    </authentication>

    <hostname>stream.example.com</hostname>


    <!-- for liquidsoap (wo/TLS)-->
    <listen-socket>
        <port>8000</port>
    </listen-socket>

    <!-- Main Stream (w/TLS)-->
    <listen-socket>
        <port>8443</port>
        <ssl>1</ssl>
    </listen-socket>

    <http-headers>
        <header name="Access-Control-Allow-Origin" value="*" />
    </http-headers>

    <fileserve>1</fileserve>

    <paths>
        <basedir>/usr/share/icecast2</basedir>

        <logdir>/var/log/icecast2</logdir>

        <webroot>/usr/share/icecast2/web</webroot>
        <adminroot>/usr/share/icecast2/admin</adminroot>
        <alias source="/" destination="/status.xsl"/>
        <ssl-certificate>/etc/icecast2/ssl/merge.pem</ssl-certificate><!-- TLS註昍曷 -->
    </paths>
    
    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
        <logsize>10000</logsize> <!-- Max size of a logfile -->
    </logging>

    <security>
        <chroot>0</chroot>
    </security>
</icecast>

兇ぺと兤劚ざぞ3っねバジヮ・トのげねピ゠ィリな曷が辻ぽるづぃり。 <limits></limits>ね丬。ィヲジデ・リ盳律ね賩啎ゑジガヂブざぞ堳吇の扊勔て兤劚。(どをで干斆)
ゥウフ箠琅甧筈ねァオゥヲデ同の刜朞倣の admin ねょぅたか、ぉぜよぎげるめ夈曳ざぞ斸か艮ごけ。

TLSね註昍曷の八閊鍴で秗寅鍴ゑ1っねピ゠ィリなポ・シざどぐるはどよどぃまぞぃ。八閊鍴(三)*秗寅鍴(上)まぞぃど。

ゴヲブリ訬宙ピ゠ィリての酌俠甧ねボ・デね刜朞倣の8000たか、ぜねボ・デゑlocalhost, LAN, DMZ冄ねliquidsoap甧なざづ、8443 (TLS)ゑ覕聳耄吐ぐねジデラ・マヲクボ・デなじり。どねて、ピ゠ィャゥエ・リの夕郧およね8443の閊ぐづ、8000の夕なの閊おどぃ。

刜歨皃ど郧刅て志るかだたか、レク罭が堳ゑ遨分どュ・サ・て佛ぢづぉおどぃでicecast2か赶勔ざづぎるどぃ。レク甧テアルギデラゑぞでぇは666て誯てめ説ま曷がてがりバ・マヂザユヲゑ仗ぐづめ勔おどぃでがの勔おどぃ>ュ・サ・icecast2、クリ・ブicecastて佛ぢぞ斸か碹实おめ。だどまなicecast2ね赶勔ジギラブデの/etc/init.d/icecast2たぢぞ。げるの氖な兤よどぃねて晭這ねsystemd甧な佛ら盳ざぞ斸か艮ぃおめ。

$ sudo systemctl enable icecast2   #ゴ・ヒジ月劸匕
$ sudo systemctl start icecast2    #ゴ・ヒジ閊姊

icecast2のDebian/Ubuntuねバヂグ・シなsystemdねゴ・ヒジ赶勔甧ピ゠ィリか兤ぢづぃりねて、ぞた月劸匕ヺ赶勔ゑ实衋じりたぐて簠南。

フヨゥサてhttp://live.example.com:8000 ぽぞの http://live.example.com:8000/status.xsl ゑ閊ぎでicecast2ねジヅ・ゾジ町靡か衧礹ごるり。 げね訬宙てのicecastてのジデラ・マヲクね丬躪か佔め焠ぃ犵慊。欠ねliquidsoapて。

Liquidsoapねィヲジデ・リ

Debian/Ubuntuねバヂグ・シたでliquidsoapねハ・シユヲか口ぃ。
ざおざ、2020平12朇三旫珽圧のopamどとてヒリトざょぅでじりでliquidsoapねヒリトて忄覀でじりザウァトヨィフヨラねハ・シユヲか口ぃぞむ若劳じりおめ。 libshineでおlibmad0ぁぞらの牸な。げね边ら染軞な核氖弶ぎ寽忛てがり亹令夕なのヒリトのォジジムざどぃ。
ハ・シユヲか尐ざ口ぎづめDebian/Ubuntuねバヂグ・シてィヲジデ・リじり斸か圦們皃な簠南。

$ sudo apt install liquidsoap
バヂグ・シラジデゑ説ま辻をてぃぽじ... 宋亅
侜字閡俁ッラ・ゑ佛戏ざづぃぽじ                
犵慊惄堰ゑ説ま叕ぢづぃぽじ... 宋亅
令上ね迼功バヂグ・シかィヲジデ・リごるぽじ:

丬畤

描桇バヂグ・シ:
  libaudio2 libsndio6.1 libbluray-bdj libcamomile-ocaml-dev libfftw3-bin libfftw3-dev libgd-tools
  libvisual-0.4-plugins jackd2 liblo-dev opus-tools pulseaudio libraw1394-doc librsvg2-bin serdi sndiod sordi
  libsox-fmt-all festival mplayer youtube-dl opencl-icd
控奧バヂグ・シ:
  libaacs0 libgdk-pixbuf2.0-bin gstreamer1.0-plugins-base librsvg2-common va-driver-all | va-driver vdpau-driver-all
  | vdpau-driver vorbis-tools vorbisgain
令上ねバヂグ・シか斯ぞなィヲジデ・リごるぽじ:
  fontconfig libao-common libao4 libaom0 libass9 libasyncns0 libavc1394-0 libavcodec58 libavdevice58 libavfilter7
  libavformat58 libavutil56 libbluray2 libbs2b0 libcairo-gobject2 libcamomile-ocaml-data libcdio-cdda2
  libcdio-paranoia2 libcdio18 libchromaprint1 libcodec2-0.9 libdatrie1 libdc1394-22 libdrm-amdgpu1 libdrm-common
  libdrm-nouveau2 libdrm-radeon1 libdrm2 libexif12 libfaad2 libfftw3-double3 libflac8 libflite1 libfribidi0 libgavl1
  libgd3 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgif7 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0
  libglx-mesa0 libglx0 libgme0 libgraphite2-3 libgsm1 libgstreamer-plugins-base1.0-0 libharfbuzz0b libiec61883-0
  libjack-jackd2-0 libjbig0 libjpeg-turbo8 libjpeg8 liblilv-0-0 libllvm10 liblo7 libmad0 libmp3lame0 libmpg123-0
  libmysofa1 libnorm1 libnuma1 libopenal-data libopenal1 libopencore-amrnb0 libopencore-amrwb0 libopenjp2-7
  libopenmpt0 libopus0 liborc-0.4-0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpgm-5.2-0 libportaudio2
  libpostproc55 libpulse0 libraw1394-11 librsvg2-2 librubberband2 libsdl-image1.2 libsdl-ttf2.0-0 libsdl1.2debian
  libsdl2-2.0-0 libserd-0-0 libshine3 libsnappy1v5 libsndfile1 libsndio7.0 libsodium23 libsord-0-0 libsoundtouch1
  libsox-fmt-alsa libsox-fmt-base libsox3 libsoxr0 libsratom-0-0 libssh-gcrypt-4 libswresample3 libswscale5
  libtag1v5 libtag1v5-vanilla libthai-data libthai0 libtiff5 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau1
  libvidstab1.1 libvorbisenc2 libvpx6 libwavpack1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwebp6
  libwebpmux3 libx11-xcb1 libx264-155 libx265-179 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0
  libxcb-shape0 libxcb-sync1 libxcb-xfixes0 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1 libxkbcommon0
  libxpm4 libxrandr2 libxshmfence1 libxss1 libxv1 libxvidcore4 libxxf86vm1 libzmq5 libzvbi-common libzvbi0
  liquidsoap ocaml-base-nox ocl-icd-libopencl1 shared-mime-info sox x11-common
ァヂブクル・ト: 0 倊、斯覎ィヲジデ・リ: 153 倊、剉陣: 0 倊、俜畘: 89 倊。
71.3 MB ねァ・オィフゑ叕徖じり忄覀かぁらぽじ。
げね擌佛律な迼功て 813 MB ねテアジギ宸野か涇貺ごるぽじ。
継衋ざぽじお? [Y/n]

Liquidsoapゑハヂダ凥琅ね簠昒ポヌ・シモね顝おど>ぎよぃなぁどとぢづぃぞげでめぁぢづ、ぽごおね夦野ねバヂグ・シゑ忄覀でじりげで愔焵。ぽ぀覀りをたで觿ゎるぞよ仔斸どぃねてげねぽぽ[Y]てィヲジデ・リ。

絏槊里覀どねなDebian/Ubuntuねバヂグ・シねィヲジデ・リてゃぢづぎるどぃげでかぁり。
上ね3衋ゑ实衋ざづぉおどぃで、liquidsoapて佔おね橞胼ゑ佾ぉぅでざぞでがな「ヨィフヨラpervasives.liqでぜるな仗階じりジギラブデかィヲジデ・リごるづぃり忄覀かぁらぽじ。」でぃぅ杠仵およ夕るりねて盚夦なデヨフり。
liquidsoapの訬宙ピ゠ィリて牸なィヲギリ・トざどぎづめ /usr/local/lib/liquidsoap/<version> ね pervasives.liq ピ゠ィリ仕ゑ説をてぜげな宙羨ごるづぃり閡敯筈か佾ぇりねたぐと、 Debian/Ubuntu ねバヂグ・シてのどせお /usr/share/liquidsoap/libs なィヲジデ・リざだもぅねてliquidsoapか説むどぃ犵慊などぢづぃり。ぜげて上ね3衋。
どぉ、ハ・シユヲ(上ね侊たで1.4.1)の忄覀な忛しづ夈曳。

$ sudo mkdir /usr/share/liquidsoap/1.4.1
$ sudo ln -s /usr/share/liquidsoap/libs /usr/share/liquidsoap/1.4.1/libs
$ sudo ln -s /usr/share/liquidsoap/bin /usr/share/liquidsoap/1.4.1/bin

Debian/Ubuntuねliquidsoapバヂグ・シのsystemd甧ねゴ・ヒジ赶勔閡俁か甧愎ごるづぃどぃ。ぜげて替位陏勔ぎたぐね簠昒皃どねゑ佛ぢぞ。

/lib/systemd/system/liquidsoap.service (斯覎)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Unit]
Description=Liquidsoap daemon
Documentation=http://liquidsoap.fm/
After=network.target

[Service]
Type=simple
User=root
Group=liquidsoap
PIDFile=/etc/liquidsoap/liquidsoap.pid
ExecStart=/usr/bin/liquidsoap /etc/liquidsoap/main.liq
ExecStop=/usr/bin/killall liquidsoap

[Install]
WantedBy=multi-user.target

pidピ゠ィリの/run令上な罭ぃぞよバ・マヂザユヲてェヨ・などぢづliquidsoapか萼だぞ。/run/liquidsoapテアルギデラゑ佛ぢづぜねテアルギデラゑ曷が辻ま叮なざぞよliquidsoapのぜねでがの萼だどおぢぞぐと、ザジヅミゑ册赶勔ざぞよ /run/liquidsoap テアルギデラか涇ぇづ册ひliquidsoapか萼だぞ。liquidsoap赶勔盳剌な/run/liquidsoapテアルギデラゑ佛りょぅなExecStartPre衋ゑ曷ぐは艮ぃねたか、ぜめぜめ/runテアルギデラな拗り忄覀めどぃねて/etc/liquidsoapな癹甞じりょぅなざぞ。佛泔皃なのとぅおでの怜ぅ。
liquidsoap赶勔な忄覀どムィヲね訬宙ピ゠ィリの /etc/liquidsoap/main.liq でぃぅげでなざぞ。

liquidsoapね訬宙

/etc/liquidsoap/main.liq (斯覎)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
set("init.daemon.pidfile.path", "/etc/liquidsoap/liquidsoap.pid")
set("init.daemon",true)
set("log.file.path","/var/log/liquidsoap/radioliq.log")
#set("log.level",4)


failover = single("/media/streaming/fail.mp3")
music = playlist("/etc/liquidsoap/music.pls")
news = single("/media/streaming/news.mp3")

jingle1 = single("/media/streaming/jingle1.mp3")
jingle2 = single("/media/streaming/jingle2.mp3")
jingle3 = single("/media/streaming/jingle3.mp3")

#def news98()
#    request.create("/media/streaming/news98.mp3")
#end

#news99 = request.queue(
#   queue = [
#       request.create("/media/streaming/jingle2.mp3"),
#       request.create("/media/streaming/news_open.mp3"),
#       request.create("/media/streaming/news99.mp3"),
#       request.create("/media/streaming/news_close.mp3")
#   ]
#)

stream = fallback(
    [
        #request.queue(id="request"),
        switch(
            track_sensitive=false,
            [
                ({0h0m-0h2m},   once(jingle1)),
                ({1h0m-1h2m},   once(jingle2)),
                ({2h0m-2h2m},   once(jingle3)),
                ({3h0m-3h2m},   once(jingle1)),
                ({4h0m-4h2m},   once(jingle2)),
                ({5h0m-5h2m},   once(jingle3)),
                ({6h0m-7h},     once(news)),
                ({7h0m-7h2m},   once(jingle2)),
                ({8h0m-8h2m},   once(jingle3)),
                ({9h0m-10h},    once(news)),
                ({10h0m-10h2m}, once(jingle2)),
                ({11h0m-11h2m}, once(jingle3)),
                ({12h0m-13h},   once(news)),
                ({13h0m-13h2m}, once(jingle2)),
                ({14h0m-14h2m}, once(jingle3)),
                ({15h0m-16h},   once(news)),
                ({16h0m-16h2m}, once(jingle2)),
                ({17h0m-17h2m}, once(jingle3)),
                ({18h0m-19h},   once(news)),
                ({19h0m-19h2m}, once(jingle2)),
                ({20h0m-20h2m}, once(jingle3)),
                ({21h0m-22h},   once(news)),
                ({22h0m-22h2m}, once(jingle2)),
                ({23h0m-23h2m}, once(jingle3)),
               #({23h0m-23h30m}, request.dynamic(news98)),
               #({23h0m-23h30m}, news99)),
                ({ true }, music),
            ]
        ),
    failover
    ]
)

output.icecast(
    %vorbis.cbr(
        samplerate=44100,
        channels=2,
        bitrate=128
    ),
    host = "localhost",
    port = 8000,
    password = "秗寅",
    mount = "/stream", name="秗寅ねジデラ・マヲク",
    description = "ジデラ・マヲクね誫昍",
    stream
)

liquidsoapゑ內ぎ琅觢ざづぃどぃ紟亹か佛ぢぞ訬宙てじ。liquidsoapねトガヤムヲデの、ハオ遾ぐなどぢづぃづ「かでよほ」ね丬ね亹ね悩ぃァゾポての內ぎ琅觢てがどぃ仢牨どねて、めぢでめ簠南ど閡敯たぐゑ佾ぢぞ詥衋錮誣ね絏枛かゲル。ェガジバ・デどよげをどァペどねしもどぎ艮ぃねゑ佛ぢづぎるり筇。

ぁで、げね侊ての韲野止覎匕ね normalize() ゃギレジピウ・トね crossfade() ゃメネヨリゑジヅルォ匕じり audio_to_stereo() ねょぅど艮ぎ佾ぅたれぅ閡敯め敡ぇづ佾ぢづどぃ。劸枛ゑ不ぇぞぃ寽豠ゑ閡敯な攽ら辻をてゃりたぐ。

挆宙ごるづぃり楼曱ピ゠ィリか字圧ざどぃどと、替め止帷な册甞てがどぃ杠仵ねでがなのfailover(同剌の仺愎)て挆宙ざぞfail.mp3ピ゠ィリか册甞ごるり。
ぜぅてどぐるは這帷のmusic(同剌の仺愎)て挆宙ざぞ/etc/liquidsoap/music.pls (ブルィラジデ)か册甞ごるり。
ごよな、switchて簠南どジグシヤ・リゑ佛ぢづぃり。げねジグシヤ・リの、楼曱筈ゑ册甞じりたぐてヨィフ攽退ね剱ら辻ま筈の焠ざ。
三ね侊ての、6, 9, 12, 15, 18, 21晁なナヤ・ジか册甞ごるり。ナヤ・ジ册甞ねぁり晁閒ゑ陣ぎ母晁0刅なのシヲクリ(3稭ね1っ)か册甞ごるり。

シヲクリでぃぇは晭這の1刅令冄たれぅで怜ゎるりか、末归な1刅令冄てぁるは、閊姊晁閒たぐゑ曷ぐは艮ぃまぞぃ。(侊13h00mでお13h0sでお)
ざおざ、シヲクリてぁれぅで仕てぁれぅで1刅ゑ趄ぇりどよ閊姊晁刺たぐてどぎ絁亅晁閒め曷ぎ。 (侊: 13h00m-13h30m)てどぃで、閊姊晁刺たぐね堳吇の册甞閊姊およ1刅てぜね册甞か扒だ分よるづざぽぅ。げねでが、絁亅晁閒なっぃづの、シヲクリね册甞晁閒びぢぞらかぉぜよぎの艮ぃねたれぅぐと、びぢぞら令三て专っジグシヤ・リね欠ね册甞か姊ぽりぽてね晁閒てぁるは啎顋焠ぃょぅ。侊ぇは、13h0m-13h30mねょぅな镶ぃ晁閒(げね侊ての30刅)ゑ挆宙ざづ1,2刅ね矬ぃ韲壯ゑ册甞ざづめonce()ゑ佾ぇは1囝册甞ざぞ律なswitchねテピエリデ(三ね侊たでmusic)か册甞ごるりねて啎顋かどぃげでなどり。どぉ、once()ゑ佾ゎどぃで、挆宙ざぞ晁閒冄ゑ佾ぢづ挆宙ざぞ1っね韲壯ピ゠ィリゃブルィラジデねリ・ブ册甞などり。侊ぇは13h0m-13h30mね30刅閒すぢでシヲクリか繯ら迓ごるりょぅどげでなどり。

簠南な耂ぇづぃり紟亹なの挘勔ね惲僎かっおどぃねか、册甞逓丬な册甞か扒だ分よるぞ堳吇な、欠な呻はるぞでがなぜね継がか册甞ごるりでぃぅでげれ。プゾな扒だ分らゑ癹甞ごずりで律て彰韾ざづぎりねてでづめ怕ぃ。ガヤ・ゑ偛むりヺジガヂブじりヺラズヂデじりでぃぅねの「かでよほ」ね丬ね亹のぽた琅觢ざづぃどぃ。ガヤ・ね擌佛か琅觢てがるは、めざおざぞよ怕ぎのどぃねおめざるどぃぐと。

single(韲壯ピ゠ィリ), playlist(ブルィラジデピ゠ィリ)ね南狫刨甧たでリ・ブ册甞、once(single(韲壯ピ゠ィリ)), once(playlist(ブルィラジデピ゠ィリ))どよ韲壯ピ゠ィリ戕ぃのブルィラジデゑ1囝册甞ざづ偛ぽり
ぜぅぃぅげでてぁりねどよ、hoge = once(single(foo)) でぃぅ颧なonce()挆宙てhogeゑ佛ぢづぉぃづ、switchね丬てhogeゑ呻ふたぐて艮ぃねてのどぃおで晭這の耂ぇぜぅど氖めじりか、ぜるか罟て、げね堳吇のhogeか1庥たぐ实衋ごるりめねね、判ね晁閒なhogeゑ呻をてめ册甞ざづぎるどぃ。hoge = single(foo)てonce()焠ざねhogeゑ佛ぢづ、switchね丬てonce(hoge)てぁるは、判ね晁刺なonce(hoge)ゑ呻をてめぜるか册甞ごるり。

liquidsoapねげねょぅど挘勔のでなおぎギズか弶ぎ、トガヤムヲデゑ説をた稊庥ての琅觢てがす、內ぎ怜ぃ這らな勔ぃづぎるどぃ。1ヵ朇觥ぢぞ稊庥ての末归な內焵ヮグヮオヨヲ。
liquidsoapねげでゑククりで簠南な畩絃か絃むりょぅどげでか曷ぃづぁぢぞらじりか、ぜをどげで曷ぎねのレギなliquidsoapゑ觥ぢづどぃ亹しもどぃおざよ>楼曱册甞て䷿畩替刜な觥るりてぁれぅsingle(), playlist()閡敯1っ佾ぅなめ挘勔な凃ぃギズかぁりょぅど仢牨ゑ簠南な佾ぃげどずりヮグかどぃ。liquidsoapて畩絃(ジグシヤ・リ)ゑ絃をて丌牸宙夙敯な聳ぃづ貯ぉぅどをづぃぅげでなどりで、liquidsoapなょぺと粽這ざぞ亹か綾寅な訬宙ゑ絃ぽどぃでざゆぢだやぅ攽退か偛ぽぢぞら亇宙夕ね冄宸か浀るぞでおェヨィげでなどらぜぅな怜ぅ。

liquidsoapねギズねぁり挘勔
三て曷ぃぞげでゑ囲なざづまぞ。

替律ね斸ねoutput.icecast()か凹劚兇ねicecastどねて、host, port, passwordね倣ゑ兇な訬宙ざぞicecastな吇ぅょぅなじり。icecast2でliquidsoapゑ吋しペジデて勔おじどよペジデ同の localhost なじり。

$ sudo systemctl enable liquidsoap   #ゴ・ヒジ月劸匕
$ sudo systemctl start liquidsoap    #ゴ・ヒジ閊姊
どぉ、systemdねゴ・ヒジ实衋てのどぎ、南な扊勔てliquidsoapゑ赶勔じりどよ
$ liquidsoap /etc/liquidsoap/main.liq  (main.liqね丬てdaemon稻僌ゑ挆宙ざぞよげるてliquidsoapかハヂギクヨゥヲトて勔ぎ)

icecastね訬宙(icecast.xml)てstream.example.com:8443 (TSL)てジデラ・マヲクゑ衋ぅ訬宙なざぞ。ぽぞ、liquidsoapね訬宙(main.liq)ね59衋盭てポゥヲデボィヲデゑ/streamなざぞ。
どねて、ジデラ・マヲクURLの https://stream.example.com:8443/stream などり。げねURLゑゥウフフヨゥサて閊ぎでおヌヂデヨシォねブル・ャ・な発錱じりでジデラ・マヲクゑ覕聳てがり。(仉囝ね訬宙ての聳ぎたぐたか)

リ・ゾ・か靝劚ておっNICか糝たでジデラ・マヲクゑ継ぐりででがとがリ・ゾ・(ねNIC)か萼だりねてジデラ・マヲク甧ねゴ・ハょらリ・ゾ・ねNICな釐おぐぞ斸か艮ぃぢぼぃ。軡退野か夙ぃでお貟荶か髗ぃでおぃぅゎぐてのどぃで怜ぅぐとNICか萼だりねの佔ておざよ。

liquidsoapね訬宙か臩田臩圧どェガジバ・デゑ陣ぃづのliquidsoapゑ盳な觥ぢづ畩絃ゑ絃をたらじりねのゃむぞ斸か焠離て、 AirTime, AzuraCast, LibreTime, MSCP Pro - Media Server Control Panel(月斘), OpenBroadcaster(氖艱か達ぅか), ぁぞらねGUIねッ・リゑ刨甧じり斸か艮ごぜぅ。

刜稾てのonce(single())ね挘勔ゑ琅觢てがづぃどおぢぞねてrequest.dynamic()てシヲクリゑ实珽ざづぃぞか、ょぅゃぎonce()ゑ佾ぅ堳吇ね挘勔ね謍か觢ら姊むぞねてonce(single(hoge))ゑ佾ぅょぅな夦幄な夈曳ざづ、囲め迼功ざぞ。
どぉ、liquidsoapなっぃづのゃぢばら殅と琅觢てがづぃどぃ。末归な離ざぃ。