çŸåšãIP(TS) ã¹ããªãŒã ãç£èŠããããã®æ¢è£œã® (ç¬èªã®) ãœãªã¥ãŒã·ã§ã³ãååšããŸãã
TSDuck ã«ã€ããŠç°¡åã«èª¬æããŸãã
TSDuck ã¯ãTS ã¹ããªãŒã ãæäœããããã®ãªãŒãã³ ãœãŒã¹ (2 æ¡é BSD ã©ã€ã»ã³ã¹) ãœãããŠã§ã¢ (ã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ã®ã»ãããšãã«ã¹ã¿ã ãŠãŒãã£ãªãã£ãŸãã¯ãã©ã°ã€ã³ãéçºããããã®ã©ã€ãã©ãª) ã§ãã å ¥åãšããŠãIP (ãã«ããã£ã¹ã/ãŠããã£ã¹ã)ãhttpãhlsãdvb ãã¥ãŒããŒãdektec dvb-asi 埩調åšã§åäœã§ããå éš TS ã¹ããªãŒã ãžã§ãã¬ãŒã¿ãŒãšãã¡ã€ã«ããã®èªã¿åãããããŸãã åºåã¯ããã¡ã€ã«ãIP (ãã«ããã£ã¹ã/ãŠããã£ã¹ã)ãhlsãdektec dvb-asi ããã³ HiDes ã¢ãžã¥ã¬ãŒã¿ãŒããã¬ãŒã€ãŒ (mplayerãvlcãxine) ããã³ããããã«æžã蟌ãããšãã§ããŸãã å ¥åãšåºåã®éã«ã¯ãPID åãããã³ã°ãã¹ã¯ã©ã³ãã«/ãã¹ã¯ã©ã³ãã«ãCC ã«ãŠã³ã¿åæããããã¬ãŒãèšç®ãTS ã¹ããªãŒã ã®ãã®ä»ã®äžè¬çãªæäœãªã©ãããŸããŸãªãã©ãã£ã㯠ããã»ããµãå«ããããšãã§ããŸãã
ãã®èšäºã§ã¯ãIP ã¹ããªãŒã (ãã«ããã£ã¹ã) ãå ¥åãšããŠäœ¿çšãããããã»ããµãŒ bitrate_monitor (ååãããããäœã§ãããã¯æããã§ã) ãšç¶ç¶æ§ (CC ã«ãŠã³ã¿ãŒã®åæ) ã䜿çšãããŸãã IP ãã«ããã£ã¹ãã¯ãTSDuck ããµããŒãããå¥ã®å ¥åã¿ã€ãã«ç°¡åã«çœ®ãæããããšãã§ããŸãã
ãã
次ã«ãããŒãžã§ã³ TSDuck 3.19-1520 ã䜿çšããOS ãšã㊠Linux ã䜿çšããŸã (ãœãªã¥ãŒã·ã§ã³ã®æºåã«ã¯ debian 10 ã䜿çšããå®éã®äœ¿çšã«ã¯ CentOS 7 ã䜿çšããŸãã)
TSDuckãšOSã®æºå
å®éã®ãããŒãç£èŠããåã«ãTSDuck ãæ£ããåäœãããããã¯ãŒã¯ ã«ãŒããŸã㯠OS (ãœã±ãã) ã¬ãã«ã§ã®ããããããªãããšã確èªããå¿ èŠããããŸãã ããã¯ãããããããããã¯ãŒã¯äžãŸãã¯ããµãŒããŒå ãã®ã©ãã§çºçããããåŸã§æšæž¬ããªãããã«ããããã«å¿ èŠã§ãã ethtool -S ethX ã³ãã³ãã䜿çšããŠããããã¯ãŒã¯ ã«ãŒã ã¬ãã«ã§ããããã確èªã§ããŸãããã¥ãŒãã³ã°ã¯åã ethtool ã«ãã£ãŠè¡ãããŸã (éåžžãRX ãããã¡ (-G) ãå¢ããå¿ èŠããããå Žåã«ãã£ãŠã¯äžéšã®ãªãããŒããç¡å¹ã«ãã (-K) å¿ èŠããããŸã)ã äžè¬çãªæšå¥šäºé ãšããŠãåæããããã©ãã£ãã¯ãåä¿¡ããããã«å¥ã®ããŒãã䜿çšããããšããå§ãããŸããå¯èœã§ããã°ãããã«ãããä»ã®ãã©ãã£ãã¯ã®ååšã«ãããããããã¢ãã©ã€ã¶ãŒ ããŒãäžã§æ£ç¢ºã«çºçãããšããäºå®ã«é¢é£ãã誀æ€ç¥ãæå°éã«æããããŸãã ãããäžå¯èœãªå Žå (ããŒãã XNUMX ã€ããããã³ã³ãã¥ãŒã¿/NUC ã䜿çšãããŠããå Žå)ãã¢ãã©ã€ã¶ãæ¥ç¶ãããŠããããã€ã¹äžã®æ®ãã®ãã©ãã£ãã¯ãšæ¯èŒããŠãåæããããã©ãã£ãã¯ã®åªå é äœãèšå®ããããšãéåžžã«æãŸããã§ãã ä»®æ³ç°å¢ã«é¢ããŠã¯ãç©çããŒãããå§ãŸãä»®æ³ãã·ã³å ã®ã¢ããªã±ãŒã·ã§ã³ã§çµãããã±ãã ãããããèŠã€ããããšãã§ããããã«æ³šæããå¿ èŠããããŸãã
ãã¹ãå ã§ã®ã¹ããªãŒã ã®çæãšåä¿¡
TSDuck ãæºåããæåã®ã¹ããããšããŠãnetns ã䜿çšããŠåäžãã¹ãå ã§ãã©ãã£ãã¯ãçæããã³åä¿¡ããŸãã
ç°å¢ã®æºå:
ip netns add P #ÑПзЎаÑÐŒ netns P, в ÐœÑÐŒ бÑÐŽÐµÑ Ð¿ÑПОÑÑ
ПЎОÑÑ Ð°ÐœÐ°Ð»ÐžÐ· ÑÑаÑОка
ip link add type veth #ÑПзЎаÑÐŒ veth-паÑÑ - veth0 ПÑÑавлÑеЌ в netns пП ÑЌПлÑÐ°ÐœÐžÑ (в ÑÑÐŸÑ ÐžÐœÑеÑÑÐµÐ¹Ñ Ð±ÑÐŽÐµÑ Ð³ÐµÐœÐµÑОÑПваÑÑÑÑ ÑÑаÑОк)
ip link set dev veth1 netns P #veth1 - пПЌеÑаеЌ в netns P (Ма ÑÑПЌ ОМÑеÑÑейÑе бÑÐŽÐµÑ Ð¿ÑОÑÐŒ ÑÑаÑОка)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #пПЎМОЌаеЌ IP Ма veth1, Ме ÐžÐŒÐµÐµÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ ÐºÐ°ÐºÐŸÐ¹ ОЌеММП
ip netns exec P ip ro add default via 192.0.2.2 #МаÑÑÑаОваеЌ ЌаÑÑÑÑÑ Ð¿ÐŸ ÑЌПлÑÐ°ÐœÐžÑ Ð²ÐœÑÑÑО nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #ПÑклÑÑаеЌ IPv6 Ма veth0 - ÑÑП ЎелаеÑÑÑ ÐŽÐ»Ñ ÑПгП, ÑÑÐŸÐ±Ñ Ð² ÑÑÑÑÑОк TX Ме пПпаЎал пПÑÑПÑПММОй ÐŒÑÑПÑ
ifconfig veth0 up #пПЎМОЌаеЌ ОМÑеÑÑÐµÐ¹Ñ veth0
ip route add 239.0.0.1 dev veth0 #ÑПзЎаÑÐŒ ЌаÑÑÑÑÑ, ÑÑÐŸÐ±Ñ ÐС МапÑавлÑла ÑÑаÑОк к 239.0.0.1 в ÑÑПÑÐŸÐœÑ veth0
ç°å¢ã¯æŽã£ãŠããŸãã ãã©ãã£ã㯠ã¢ãã©ã€ã¶ãŒãéå§ããŸãã
ip netns exec P tsp --realtime -t
-I ip 239.0.0.1:1234
-P continuity
-P bitrate_monitor -p 1 -t 1
-O drop
ããã§ãã-p 1 -t 1ãã¯ããããã¬ãŒããæ¯ç§èšç®ãããããã¬ãŒãã«é¢ããæ
å ±ãæ¯ç§è¡šç€ºããå¿
èŠãããããšãæå³ããŸãã
ãã©ãã£ã㯠ãžã§ãã¬ãŒã¿ãŒã 10Mbps ã®é床ã§èµ·åããŸãã
tsp -I craft
-P regulate -b 10000000
-O ip -p 7 -e --local-port 6000 239.0.0.1:1234
ããã§ãã-p 7 -eãã¯ã7 ã€ã® TS ãã±ããã 1 ã€ã® IP ãã±ããã«ããã¯ãããããããŒãã«å®è¡ããå¿ èŠããã (-e) ããšãæå³ããŸãã IP ãã±ãããéä¿¡ããåã«ãæåŸã®ããã»ããµããã® 7 TS ãã±ãããåžžã«åŸ ã¡ãŸãã
ã¢ãã©ã€ã¶ãŒã¯äºæãããã¡ãã»ãŒãžã®åºåãéå§ããŸãã
* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s
次ã«ãããã€ãã®ãããããè¿œå ããŸãã
ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP
次ã®ãããªã¡ãã»ãŒãžã衚瀺ãããŸãã
* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets
ããã¯æåŸ ãããŠããŸãã ãã±ããæ倱ãç¡å¹ã«ã (ip netns exec P iptables -F)ããžã§ãã¬ãŒã¿ã®ãããã¬ãŒãã 100Mbps ã«äžããŠã¿ãŸãã ã¢ãã©ã€ã¶ãŒã¯ã倧éã® CC ãšã©ãŒãšã75 Mbps ã§ã¯ãªãçŽ 100 Mbps ãå ±åããŸããç§ãã¡ã¯ã誰ã®ãããªã®ãã解æããããšããŠããŸãããžã§ãã¬ãŒã¿ãŒã«æéããªãããåé¡ãããã«ãªããããåºå®æ°ã® CC ãšã©ãŒã®çæãéå§ããŸãããã±ãã (700000 TS ãã±ãã = 100000 IP ãã±ãã):
# ifconfig veth0 | grep TX
TX packets 151825460 bytes 205725459268 (191.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID 0 (0x0000): 700,000 packets
# ifconfig veth0 | grep TX
TX packets 151925460 bytes 205861259268 (191.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ã芧ã®ãšãããã¡ããã© 100000 åã® IP ãã±ãããçæãããŸãã (151925460 ïœ 151825460)ã ããã§ã¯ãã¢ãã©ã€ã¶ãŒã§äœãèµ·ãã£ãŠããã®ããç解ããŸããããããã«ã€ããŠã¯ãveth1 ã® RX ã«ãŠã³ã¿ãŒã確èªããŸããããã¯ãveth0 ã® TX ã«ãŠã³ã¿ãŒãšå³å¯ã«çãããªããŸãã次ã«ããœã±ãã ã¬ãã«ã§äœãèµ·ãã£ãŠãããã確èªããŸãã
# ip netns exec P cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 72338 2 00000000e0a441df 24355
ããã§ã¯ãããããæ° = 24355 ã§ããããšãããããŸããTS ãã±ããã§ã¯ããã㯠170485ããŸã㯠24.36 ã® 700000% ã§ããããã倱ããããããã¬ãŒãã®åã 25% ã udp ãœã±ããã§ã®ããããã§ããããšãããããŸãã UDP ãœã±ããã§ã®ããããã¯éåžžããããã¡äžè¶³ãåå ã§çºçããŸããããã©ã«ãã®ãœã±ãã ãããã¡ ãµã€ãºãšæ倧ãœã±ãã ãããã¡ ãµã€ãºã確èªããŠãã ããã
# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ããããã¡ ãµã€ãºãæ瀺çã«èŠæ±ããªãå Žåããœã±ãã㯠208 KB ã®ãããã¡ã§äœæãããŸããããã以äžã®ãããã¡ãèŠæ±ããŠããèŠæ±ããããã®ã¯åä¿¡ãããŸããã IP å ¥åã®ãããã¡ ãµã€ãºã tsp ã§èšå®ã§ãããã (-buffer-size)ãããã©ã«ãã®ãœã±ãã ãµã€ãºã«ã¯è§ŠããŸããããæ倧ãœã±ãã ãããã¡ ãµã€ãºãèšå®ããtsp åŒæ°ãéããŠæ瀺çã«ãããã¡ ãµã€ãºãæå®ããã ãã§ãã
sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop
ãã®ãœã±ãã ãããã¡ã®èª¿æŽã«ãããå ±åããããããã¬ãŒãã¯çŽ 100Mbps ã«ãªããCC ãšã©ãŒã¯ãªããªããŸããã
tsp ã¢ããªã±ãŒã·ã§ã³èªäœã® CPU æ¶è²»éã«å¿ããŠã 5 ã³ã¢ i4260-1.40U CPU @ 10GHz ãšæ¯èŒããŠã3Mbps ãããŒè§£æã«ã¯ 4 ïœ 100%ã25Mbps - 200%ã46Mbps - XNUMX% ã® CPU ãå¿ èŠã§ãã % ãã±ãã ãã¹ãèšå®ãããšãCPU ã®è² è·ã¯å®è³ªçã«å¢å ããŸãã (ãã ããæžå°ããå ŽåããããŸã)ã
ããçç£æ§ã®é«ãããŒããŠã§ã¢ã§ã¯ã1Gb/ç§ãè¶ ããã¹ããªãŒã ãåé¡ãªãçæããã³åæããããšãã§ããŸããã
å®éã®ãããã¯ãŒã¯ã«ãŒãã§ã®ãã¹ã
veth ãã¢ã§ãã¹ãããåŸãXNUMX ã€ã®ãã¹ããŸã㯠XNUMX ã€ã®ãã¹ãã® XNUMX ã€ã®ããŒããååŸããããŒããçžäºã«æ¥ç¶ããXNUMX ã€ã§ãžã§ãã¬ãŒã¿ãŒãéå§ããXNUMX ã€ç®ã§ã¢ãã©ã€ã¶ãŒãéå§ããå¿ èŠããããŸãã ããã«ã¯é©ãã¯ãããŸããã§ããããå®éã«ã¯ãã¹ãŠãéã«äŸåãã匱ããã°åŒ±ãã»ã©ãããã§ã¯ããèå³æ·±ããã®ã«ãªããŸãã
åä¿¡ããŒã¿ãç£èŠã·ã¹ãã ïŒZabbixïŒã§å©çšãã
tsp ã«ã¯ãSNMP ãªã©ã®æ©æ¢°å¯èª API ããããŸããã CC ã¡ãã»ãŒãžã¯å°ãªããšã 1 ç§ééçŽããå¿ èŠããããŸã (ãã±ããæ倱ã®å²åãé«ãå Žåããããã¬ãŒãã«å¿ã㊠XNUMX ç§ãããæ°çŸãæ°åãæ°äžã«ãªãå¯èœæ§ããããŸã)ã
ãããã£ãŠãäž¡æ¹ã®æ å ±ãä¿åããCC ãšã©ãŒãšãããã¬ãŒãã®ã°ã©ããæç»ããŠäœããã®äºæ ãèµ·ããã«ã¯ã次ã®ãªãã·ã§ã³ããããŸãã
- tsp ã®åºåã解æã㊠(CC ã«ãã£ãŠ) éçŽããŸãã ãããç®çã®åœ¢åŒã«å€æããŸãã
- çµæãç£èŠã·ã¹ãã ã«é©ããæ©æ¢°å¯èªåœ¢åŒã§äžããããããã«ãtsp èªäœããã³/ãŸãã¯ããã»ããµ ãã©ã°ã€ã³ bitrate_monitor ãšç¶ç¶æ§ãçµäºããŸãã
- tsduck ã©ã€ãã©ãªã®äžã«ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
æããã«ãç¹ã« tsduck èªäœã (ææ°ã®æšæºã«ãã) äœã¬ãã«èšèª (C ++) ã§æžãããŠããããšãèæ ®ãããšããªãã·ã§ã³ 1 ãåŽåã®ç¹ã§æãç°¡åã§ãã
ã·ã³ãã«ãª bash ããŒãµãŒ + ã¢ã°ãªã²ãŒã¿ãŒã®ãããã¿ã€ãã§ã¯ã10Mbps ã¹ããªãŒã ãš 50% ã®ãã±ããæ倱 (ææªã®å Žå) ã§ã¯ãbash ããã»ã¹ã tsp ããã»ã¹èªäœã® 3 ïœ 4 åã® CPU ãæ¶è²»ããããšãããããŸããã ãã®ã·ããªãªã¯åãå ¥ããããŸããã å®éã«ãã®ãããã¿ã€ãã®äžéšã以äžã«ç€ºããŸã
äžã«ã¯éººé¡
#!/usr/bin/env bash
missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""
ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1 -P continuity 2>&1 |
while read i
do
#line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
#line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
if [[ "$i" == *continuity:* ]]
then
if [[ "$i" =~ $regexMissPackets ]]
then
missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
then
((ccErrorSeconds += 1))
fi
missingPacketsTime=$missingPacketsTimeNew
packets=${BASH_REMATCH[2]} #TS missing packets
((missingPackets += packets))
fi
elif [[ "$i" == *bitrate_monitor:* ]]
then
: #...
fi
done
蚱容ã§ããªãã»ã©é
ãããšã«å ããŠãbash ã«ã¯éåžžã®ã¹ã¬ããããªããbash ãžã§ãã¯å¥åã®ããã»ã¹ã§ãããå¯äœçš (æ¯ç§å±ããããã¬ãŒã ã¡ãã»ãŒãžãåä¿¡ãããšã) ã« 4 ç§ã« 5 å missingPackets ã®å€ãæžã蟌ãå¿
èŠããããŸããã ãã®çµæãbash ã¯ãã®ãŸãŸæ®ãããgolang ã§ã©ãã㌠(ããŒãµãŒ + ã¢ã°ãªã²ãŒã¿ãŒ) ãæžãããšã«ãªããŸããã åæ§ã® golang ã³ãŒãã® CPU æ¶è²»éã¯ãtsp ããã»ã¹èªäœã® 16 ïœ 25 åã® XNUMX ã§ãã bash ã golang ã«çœ®ãæããããšã«ããã©ãããŒã®é«éåã¯çŽ XNUMX åã§ããããšãå€æããäžè¬çã«ã¯èš±å®¹å¯èœãªçµæã§ãã (ææªã®å ŽåãCPU ãªãŒããŒããã㯠XNUMX%)ã golang ãœãŒã¹ ãã¡ã€ã«ã¯æ¬¡ã®å Žæã«ãããŸã
ã©ãããŒãå®è¡ãã
ã©ãããŒãéå§ããããã«ãsystemd ã®æãåçŽãªãµãŒãã¹ ãã³ãã¬ãŒããäœæãããŸãã (
ãµãŒãã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¯ãsystemctl Enable ã³ãã³ããå®è¡ããå¿ èŠããããŸãã [ã¡ãŒã«ä¿è·]:1234 ãã®åŸãsystemctl start ã§å®è¡ããŸã [ã¡ãŒã«ä¿è·]ïŒ1234ã
Zabbix ããã®çºèŠ
zabbix ãå®è¡äžã®ãµãŒãã¹ãæ€åºã§ããããã«ããã«ã¯ã次ã®ããã«ããŸãã
Zabbix ãã³ãã¬ãŒã
ç°¡åãªãã§ãã¯ãªã¹ã (誰ããããã䜿çšããããšã«æ±ºãããã©ããªãã)
- tsp ããçæ³çãªãæ¡ä»¶ (ãžã§ãã¬ãŒã¿ãŒãšã¢ãã©ã€ã¶ãŒãçŽæ¥æ¥ç¶ãããŠãã) ã§ãã±ãããããããããªãããšã確èªããŠãã ããããããããããå Žåã¯ããã®åé¡ã«é¢ããèšäºã®ç¬¬ 2 段èœãŸãã¯æ¬æãåç §ããŠãã ããã
- æ倧ãœã±ãã ãããã¡ãŒ (net.core.rmem_max=8388608) ã調æŽããŸãã
- tsduck-stat.go ãã³ã³ãã€ã«ããŸã (tsduck-stat.go ããã«ãããŸã)ã
- ãµãŒãã¹ãã³ãã¬ãŒãã/lib/systemd/systemã«é 眮ããŸãã
- systemctl ã§ãµãŒãã¹ãéå§ããã«ãŠã³ã¿ãŒã衚瀺ããå§ããããšã確èªããŸã (grep "" /dev/shm/tsduck-stat/*)ã ãã«ããã£ã¹ã ã¹ããªãŒã ã®æ°ã«ãããµãŒãã¹ã®æ°ã ããã§ããã«ããã£ã¹ã ã°ã«ãŒããžã®ã«ãŒããäœæããå¿ èŠãããå ŽåããããŸãããããã rp_filter ãç¡å¹ã«ãããããœãŒã¹ IP ãžã®ã«ãŒããäœæããŸãã
- Discovery.sh ãå®è¡ããJSON ãçæãããããšã確èªããŸãã
- zabbix ãšãŒãžã§ã³ãæ§æãè¿œå ããzabbix ãšãŒãžã§ã³ããåèµ·åããŸãã
- ãã³ãã¬ãŒãã zabbix ã«ã¢ããããŒãããç£èŠå¯Ÿè±¡ã®ãã¹ãã«é©çšã㊠zabbix-agent ãã€ã³ã¹ããŒã«ãããŸããçŽ 5 åéåŸ ã¡ãæ°ããé ç®ãã°ã©ããããªã¬ãŒããããã©ããã確èªããŸãã
çµæ
ãã±ããæ倱ãæ€åºããã¿ã¹ã¯ã«ã¯ãããã§ã»ãŒååã§ãããå°ãªããšãç£èŠããªãããã¯ãã·ã§ãã
å®éããã㪠ãã©ã°ã¡ã³ããçµåãããšãã« CC ã®ãæ倱ããçºçããå¯èœæ§ããããŸã (ç§ã®ç¥ãéããããã¯ãã·ã¢é£éŠã®ããŒã«ã« TV ã»ã³ã¿ãŒã§æ¿å ¥ãè¡ãããæ¹æ³ã§ããã€ãŸããCC ã«ãŠã³ã¿ãåèšç®ããã«è¡ãããŸã)ãããã¯èŠããŠããå¿ èŠããããŸãã ç¬èªã®ãœãªã¥ãŒã·ã§ã³ã¯ãSCTE-35 ã©ãã« (ã¹ããªãŒã ãžã§ãã¬ãŒã¿ãŒã«ãã£ãŠè¿œå ãããå Žå) ãæ€åºããããšã§ããã®åé¡ãéšåçã«åé¿ããŸãã
ãã©ã³ã¹ããŒãå質ã®ã¢ãã¿ãªã³ã°ã«é¢ããŠã¯ããžãã¿ãŒ ã¢ãã¿ãªã³ã° (IAT) ãäžè¶³ããŠããŸãã TV æ©åš (å€èª¿åšãŸãã¯ãšã³ãããã€ã¹) ã«ã¯ãã®ãã©ã¡ãŒã¿ã®èŠä»¶ãããããžãããããã¡ãç¡éã«æ¡åŒµã§ãããšã¯éããŸããã ãŸãã倧ããªãããã¡ãåããæ©åšã転éäžã«äœ¿çšãããQoS ãèšå®ãããŠããªãããŸãã¯ãã®ãããªãªã¢ã«ã¿ã€ã ãã©ãã£ãã¯ãéä¿¡ããã®ã«ååãªèšå®ããããŠããªãå Žåããžãã¿ãæµ®éããå¯èœæ§ããããŸãã
åºæïŒ habr.com