Интерфейс для IPTV STB D-Link DIB-120 с онлайн сервисом

Избранное

Пост в внешним видом интерфейса и видео его работы я сделал как раз год назад.

Внешне за год практически ничего не изменилось, но внутренне все поменялось кардинально — и работает быстрее, и даже качество изображения на телевизоре лучше стало, так что пора записывать новое видео. Но это чуть позже — сначала все-таки хочется закончить работу над небольшим JavaScript UI фреймворком, оптимизированным специально для работы на приставках — после этого в очередной раз переделаю внешний вид, сделаю офигительный интерфейс для редактирования настроек и как раз и приступлю к активному наращиванию функционала… Но это чуть позже, но зато сейчас уже запустил в продакшн свой проект по IPTV — http://tiptv.ru/.

Если в тезисах: проект позволяет обойти трудности легального вещания IPTV в локальных сетях и дает возможность абонентам смотреть это самое вещание на экране телевизора. На самом сайте подробнее написано. А если провайдеру это не надо — абонент может сам купить себе приставку (на сайте планируется доставка), прошить прошивку и смотреть… В Москве это для очень многих актуально — D-Link DIB-120 продают везде и купить его не проблема, а бесплатные каналы от Науки-Связи тоже есть очень у многих.

В целом могу без лишней скромности отметить, что аналогов проекту нет. 🙂 Есть нечто похожее, но заточено под своего конкретного производителя и реальных проблем провайдеров не решает. Сейчас буду потихоньку рекламировать свой — посмотрим на реакцию. Бета-тестеры довольны. 🙂

PS: Ну да, совсем забыл — а самая фишка проекта в том, что все делается онлайн. Провайдерам не нужно ставить у себя отдельный софт только для того, чтобы редактировать списки каналов. Редактировать можно на сайте, а потом экспортировать автоматом (если уж очень надо). И программы передач не надо генерировать. И вообще ни о чем париться. Прошил — и оно сразу работает. И трафика тратиться — мизер. Но, опять же, там об этом подробно написано.

Интерфейс/middleware для IPTV-приставки D-Link DIB-120

Update -> http://skylord.ru/2010/07/19/interfejs-dlya-iptv-stb-d-link-dib-120-s-onlajn-servisom/

Интерес провайдеров к IPTV какой-то сезонный. Был в начале осени 2009, потом все пропали. Потом в районе Нового Года и снова все пропали. И вот сейчас за последние пару недель опять очень многие обращаются по этому вопросу. В этой связи немного систематизирую информацию, чтобы можно было давать сразу ссылку всем заинтересованным. Итак.

1) Видео и описание некоторых функций интерфейса тут: http://skylord.ru/2009/07/18/interfejs-dlya-prosmotra-iptv-kanalov-na-d-link-dib-120/

2) Он позволяет смотреть на приставке каналы, которые транслируются по сети мультикастом. RAW UDP multicast. Приставка не поддерживает http и иные способы доставки. Поддерживает RTSP, но это для VoD и поддержка достаточно косячная.

3) Интерфейс [пока] не претендует на большее, чем показано на приведенном выше видео. Планов — очень много, но времени на их реализацию пока нет. 🙁 Как только будет что-то новое — напишу об этом.

4) Стандартные коммерческие условия приведены тут: http://tinfocom.ru/page/resheniya-iptv. Я открыт для любых альтернативных предложений, готов обсуждать любые варианты и т.п. Вариант полной покупки исходников тоже возможен, но подумайте — зачем они вам нужны? Если вы имеете опыт разработки на JavaScript и работы с embedded — то вы такой же наклепаете и сами. Но это не так просто — иначе бы Нетрис не брал бы с людей такие деньги за свои решения. 🙂

5) Чтобы протестировать интерфейс в реале — присылайте на me@skylord.ru список каналов и ваши внешние IP-подсети.

6) Лучше не звоните мне по телефону, а пишите в почту или в указанные в контактах ICQ/Skype. По телефону эти вещи неудобно обсуждать…

Консольный лог загрузки D-Link DIB-120

От включения и до вывода на экран пользовательского интерфейса.
Собственно, вот:

BCM97401
AB
FFFFFFFF
1s
K1
K2

K3

K4

K5
2
Copy Code...34TUCV

BCM97402 CFE v1.8, CFE core v1.6, Endian Mode: Little
Build Date: Fri Jan 23 21:50:11 2009 (Rance@Rance-AsusU5F)
Copyright (C) Broadcom Corporation.

CPU speed: 297MHz
Total memory: 256MB
Total flash: 32MB

Total memory used by CFE: 0x87000000 - 0x87044890 (280720)
Initialized Data: 0x8703C990 - 0x87044548 (31672)
BSS Area: 0x87044548 - 0x87044890 (840)
Local Heap: 0x87044910 - 0x87A44910 (10485760)
Stack Area: 0x87A44910 - 0x87A46910 (8192)
Text (code) segment: 0x87000000 - 0x8700F264 (62052)

flash0.splash=1FCC0000
JPEG size=42494, mode=1
JPEG decoding
Decode done
Splash Width = 720 Height = 480
Loader:elf Filesys:raw Dev:flash0.kernel File: Options:root=/dev/mtdblock0 ro
Loading: 0x80001000/3219589 0x80313085/139143 Entry address is 0x802f3000
total= bytes
Starting program at 0x802f3000
<5>Linux version 2.6.12-4.2-brcmstb build version 2612-4.2 (root@localhost.localdomain) (gcc version 3.4.6) #2 Thu Jun 18 18:20:20 CST 2009
c->processor_id == 00020000
MIPs 7401 id = 20000
Before: firmhandl=8704c410, firmentry=8701da34, seal=43464531,bootParmsAddr=803145a8
The cmdline args were:
@803145a8=root=/dev/mtdblock0 ro
Done initializing UARTC at b0400b00
HI WORLD!!!
gathering mode: 0x00000264 at 0x0xb000040c
split mode: 0x00000001 at 0xb0000410
board_init_once: regval=44a16102, ddr_strap=3, 4 chips, pci_size=2
Detected 256 MB on board
cfeBootParms ===> root=/dev/mtdblock0 ro
Number of Nand Chips = 0
Kernel boot options: root=/dev/mtdblock0 ro console=ttyS0,115200
gFlashSize=00000000, query[0]=0051, [1]=0052, [2]=0059
**********BOOTEDFROMFLASH, Base=1e000000
Initial CP0 22 value : 0x00010020
Updated CP0 22 value : 0x00000020
CP0 reg 22 sel 0 to 5: 0xe3800000 0x00000020 0x00000000 0x00000020 0x00000000 0x00000020
Sundry 0xb0404000, chipId 0x00007401, bcm7401Cx 0x21
CPU revision is: 00020000
Determined physical RAM map:
memory: 10000000 @ 00000000 (usable)
Using 128MB for memory, overwrite by passing mem=xx
User-defined physical RAM map:
node [00000000, 08000000: RAM]
node [08000000, 08000000: RSVD]
<4>bootmem_init: map 0 type 1
<4>bootmem_init: curr_pfn 0x00000336 last_pfn 0x0000ffff max_low_pfn 0x00010000
<4>bootmem_init: Done
<7>On node 0 totalpages: 65536
<7> DMA zone: 65536 pages, LIFO batch:31
<7> Normal zone: 0 pages, LIFO batch:1
<7> HighMem zone: 0 pages, LIFO batch:1
Before resource_init
After resource_init
Built 1 zonelists
<5>Kernel command line: root=/dev/mtdblock0 ro console=ttyS0,115200
before init RAC 0x02a00000 0x00000000
after init RAC 0x02a0000f 0x0fff0000
Primary instruction cache 32kB, physically tagged, 2-way, linesize 16 bytes.
Primary data cache 32kB, 2-way, linesize 16 bytes.
MIPS_CACHE_ALIASES = ON
end of ld_mmu_r4xx0
end of local_tlb_init
Wired: 17
Index: 0 pgmask=16Mb va=d0000000 asid=00
[pa=d0000000 c=2 d=1 v=1 g=1]
[pa=d1000000 c=2 d=1 v=1 g=1]

Index: 1 pgmask=16Mb va=d2000000 asid=00
[pa=d2000000 c=2 d=1 v=1 g=1]
[pa=d3000000 c=2 d=1 v=1 g=1]

Index: 2 pgmask=16Mb va=d4000000 asid=00
[pa=d4000000 c=2 d=1 v=1 g=1]
[pa=d5000000 c=2 d=1 v=1 g=1]

Index: 3 pgmask=16Mb va=d6000000 asid=00
[pa=d6000000 c=2 d=1 v=1 g=1]
[pa=d7000000 c=2 d=1 v=1 g=1]

Index: 4 pgmask=16Mb va=d8000000 asid=00
[pa=d8000000 c=2 d=1 v=1 g=1]
[pa=d9000000 c=2 d=1 v=1 g=1]

Index: 5 pgmask=16Mb va=da000000 asid=00
[pa=da000000 c=2 d=1 v=1 g=1]
[pa=db000000 c=2 d=1 v=1 g=1]

Index: 6 pgmask=16Mb va=dc000000 asid=00
[pa=dc000000 c=2 d=1 v=1 g=1]
[pa=dd000000 c=2 d=1 v=1 g=1]

Index: 7 pgmask=16Mb va=de000000 asid=00
[pa=de000000 c=2 d=1 v=1 g=1]
[pa=df000000 c=2 d=1 v=1 g=1]

Index: 8 pgmask=16Mb va=e0000000 asid=00
[pa=e0000000 c=2 d=1 v=1 g=1]
[pa=e1000000 c=2 d=1 v=1 g=1]

Index: 9 pgmask=16Mb va=e2000000 asid=00
[pa=e2000000 c=2 d=1 v=1 g=1]
[pa=e3000000 c=2 d=1 v=1 g=1]

Index: 10 pgmask=16Mb va=e4000000 asid=00
[pa=e4000000 c=2 d=1 v=1 g=1]
[pa=e5000000 c=2 d=1 v=1 g=1]

Index: 11 pgmask=16Mb va=e6000000 asid=00
[pa=e6000000 c=2 d=1 v=1 g=1]
[pa=e7000000 c=2 d=1 v=1 g=1]

Index: 12 pgmask=16Mb va=e8000000 asid=00
[pa=e8000000 c=2 d=1 v=1 g=1]
[pa=e9000000 c=2 d=1 v=1 g=1]

Index: 13 pgmask=16Mb va=ea000000 asid=00
[pa=ea000000 c=2 d=1 v=1 g=1]
[pa=eb000000 c=2 d=1 v=1 g=1]

Index: 14 pgmask=16Mb va=ec000000 asid=00
[pa=ec000000 c=2 d=1 v=1 g=1]
[pa=ed000000 c=2 d=1 v=1 g=1]

Index: 15 pgmask=16Mb va=ee000000 asid=00
[pa=ee000000 c=2 d=1 v=1 g=1]
[pa=ef000000 c=2 d=1 v=1 g=1]

Index: 16 pgmask=16Mb va=f0000000 asid=00
[pa=f0000000 c=2 d=1 v=1 g=1]
[pa=f1000000 c=2 d=1 v=1 g=1]

$$$$$$$$$$ 1394 dev id ffffffff
$$$$$$$$$$ mini slot dev id ffffffff
$$$$$$$$$$ external dev id ffffffff
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
timer irq 67 end 57
PID hash table entries: 2048 (order: 11, 32768 bytes)
mips_counter_frequency = 148000000 from Calibration, = 148500000 from header(CPU_MHz/2)
Using 148.500 MHz high precision timer.
Console: colour dummy device 80x25
################## brcm_serial_console_init, sercon=802ce88c
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
free_all_bootmem_core: Free allocator bitmap
Memory: 125060k/262144k available (2577k kernel code, 136836k reserved, 434k data, 128k init, 0k highmem)
Mount-cache hash table entries: 512
get_RSVD_size: Returning Size 0x08000000
Checking for 'wait' instruction... available.
NET: Registered protocol family 16
usbcore: registered new driver usbfs
usbcore: registered new driver hub
squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
Broadcom serial driver version 1.00 (2000-11-09) with SERIAL_PCI enabled
Serial: 8250/16550 driver $Revision: 1.90 $ 1 ports, IRQ sharing disabled
ttyS0 at MMIO 0x0 (irq = 66) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
loop: loaded (max 8 devices)
Broadcom BCM740121 Ethernet Network Device v1.0 Jun 18 2009 18:17:59
: Reading MAC address from BFFFF824, FLASH_BASE=be000000
: MAC address 00:1E:58:B3:11:23 fetched from addr BFFFF824
: MAC Address: 00:1E:58:B3:11:23
SUNDRY revision = 74010021, have IP Hdr Opt=1
init_buffers: 104 descriptors initialized
init_buffers: 00000068 descriptors initialized, from flowctl
BCMINTMAC: 100 MB Full-Duplex (auto-neg)
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
PPP BSD Compression module registered
NET: Registered protocol family 24
BCM97XXX flash device: 0x 2000000 at 0x1e000000
Broadcom 9xxxx mapped flash: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0040
fixup_use_write_buffers
Broadcom 9xxxx mapped flash: CFI does not contain boot bank location. Assuming top.
fixup_use_erase_chip
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Creating 10 MTD partitions on "Broadcom 9xxxx mapped flash":
0x00000000-0x01200000 : "a0_rootfs"
0x01200000-0x01400000 : "html"
0x01400000-0x01600000 : "vmlinux"
0x01600000-0x017c0000 : "a0_kernel"
0x017c0000-0x01c00000 : "b0_rootfs"
0x01c00000-0x01cc0000 : "cfe"
0x01cc0000-0x01d40000 : "splash"
0x01d40000-0x01fc0000 : "a0_config"
0x01fc0000-0x01fe0000 : "variable"
0x01fe0000-0x02000000 : "misc"
usbmon: debugs is not available
ehci_hcd_brcm_init: Initializing 1 EHCI devices
10 Dec 2004 USB 2.0 'Enhanced' Host Controller (EHCI) Driver (EHCI-brcm-0)
drivers/usb/host/ehci-brcm.c: starting brcm EHCI USB Controller
- USB h/w setup mode
- USB power enable set for active LOW mode
- Resetting at b0480310
<-- brcm_ehci_hw_init brcm-ehci brcm-ehci.0: BRCM EHCI brcm-ehci brcm-ehci.0: new USB bus registered, assigned bus number 1 brcm-ehci brcm-ehci.0: irq 62, io mem 0x10480300 brcm-ehci brcm-ehci.0: park 0 brcm-ehci brcm-ehci.0: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0:1.0: USB hub found hub 1-0:1.0: 2 ports detected 2004 Nov 08 USB 1.1 'Open' Host Controller (OHCI) Driver (OHCI-brcm-0) drivers/usb/host/ohci-brcm.c: starting brcm OHCI USB Controller - Resetting at b0480408 <-- brcm_start_hc brcm-ohci-0 brcm-ohci-0.0: BRCM OHCI brcm-ohci-0 brcm-ohci-0.0: new USB bus registered, assigned bus number 2 brcm-ohci-0 brcm-ohci-0.0: irq 63, io mem 0x10480400 hub 2-0:1.0: USB hub found hub 2-0:1.0: 2 ports detected pegasus: v0.6.13 (2005/11/13), Pegasus/Pegasus II USB Ethernet driver usbcore: registered new driver pegasus drivers/usb/net/rtl8150.c: rtl8150 based usb-ethernet driver v0.6.2 (2004/08/27) usbcore: registered new driver rtl8150 usbcore: registered new driver asix NET: Registered protocol family 2 IP: routing cache hash table of 2048 buckets, 16Kbytes TCP established hash table entries: 16384 (order: 5, 131072 bytes) TCP bind hash table entries: 16384 (order: 4, 65536 bytes) TCP: Hash tables configured (established 16384 bind 16384) NET: Registered protocol family 1 NET: Registered protocol family 17 VFS: Mounted root (cramfs filesystem) readonly. free_initmem: init_begin=802f3000, init_end=80313000 Freeing unused kernel memory: 128k freed Algorithmics/MIPS FPU Emulator v1.5 Restore RW directories Mount /proc fs Mount /dev/pts Mount /etc/sysmgmt Mount /html Mount /tmp Mount /sys Mount /proc/bus/usb Cleaning up utmp and wtmp Start syslog daemon Start USB service SCSI subsystem initialized NTFS driver 2.1.22 [Flags: R/W MODULE]. Initializing USB Mass Storage driver... usbcore: registered new driver usb-storage USB Mass Storage support registered. usbcore: registered new driver usbhid drivers/usb/input/hid-core.c: v2.01:USB HID core driver insert module usbhid success Configure Network interface start services telnetd: starting port: 23; interface: any; login program: /bin/login start user services Creating nodes in /dev ln: dsp: File exists Done Press any key to return to linux prompt total words=13710 DEFINED: xcinrc path=tabs/xcinrc open data path=tabs open_data=sys.tab open_data=phone.tab Input method is ê`í¦ rmmod: bcmdriver: No such file or directory rmmod: bcm7401: No such file or directory rmmod: bcmkni: No such file or directory bcmdriver: module license 'Proprietary' taints kernel. Initializing bcmdriver version $ 25 $ MCK - Using Interrupt Definition for 7402c0 (uname -a) chipConfigs[5].maxNumIrq = 65 Global Interrupt Mask Low: 0xD15F7FFF, High: 0x1C0C11F3 Initialization complete... Apply : idle=0 UTL_Init>
UTL_Pars_Init>
Apply : dec=0 hex=0 string=(null) none=
UTL_Sys_Init: Timer Initialize...

sema_id=010DC100, mutex=010DC130OS_Task_CreateThread: Thread timer_task(1026) has been created!

UTL_Dbg_Init>
DRV_Adpt_Init...
Copying /etc/sysmgmt/bak_config.xml to /tmp/user_config.xml ...OK!
User_Config.XML Size=2163
Loading config file /tmp/user_config.xml(2163 byte)
no config at all, create root
cmdstr=killall syslogd

###### sys_kill PID=197, Signal=15 ######

cmdstr=syslogd -b 0
cmdstr=dhcpcd -HDd eth0 -i DIB120
===================== timer_task / PID=316 =====================
eth0 Link UP.
DRV_Adpt_Init - Open display device... 2afcaf74 OK!
DRV_Adpt_Init - Open graphics device... 2afc1374 OK!
DRV_Adpt_Init - Open component device... 2afa20e0 OK!
DRV_Adpt_Init - Open composite device... 2afa20d8 OK!
DRV_Adpt_Init - Open S-Video device... 2afa20c8 OK!
DRV_Adpt_Init - Open DVI/HDMI device... 2afa2040 OK!
DRV_Adpt_Init - Open RF device... 2afa2030 OK!
DRV_Adpt_Init - Open S-PDIF device... 2afc133c OK!
Create ConfigDB Semaphore

sema_id=0111F7D8, mutex=0111F808FB Handler 111fc98 has been created!
[INIT_Graphics_Mode]Surface 720x1080 scale to 720x576
[INIT_Graphics_Mode]Clip 720x576 to display
Can't get data from file
Can't get addr & port from dhcp, try get from config
Can't open /etc/sysmgmt/update.ini
Fail to read mtd default ip and port, use hardcode
ipAddr = 224.0.42.251
port = 23301
block_name = a0_rootfs
version = 00403013
img_len = 13000704
chksum = 5aac8d8579079c80dc66656260b496f4
addr_port = fb2a00e0065b
block_name = kernel
version = 00403013
img_len = 1602649
chksum = 26dcb331769b2b7e93bd738dfdbcab03
addr_port = fb2a00e0075b
block_name = cfe
version = 00403013
img_len = 279876
chksum = 731608c42f9de1276c5521bda7c75c4f
addr_port = fb2a00e0085b
block_name = a0_config
version = 00403013
img_len = 2621440
chksum = a393ecfb0faf563ccf7f5e6064e5c275
addr_port = fb2a00e0095b
block_name = splash
version = 00403013
img_len = 37617
chksum = 728cf99079d637377971361a597b947b
addr_port = fb2a00e00a5b
block_name = html
version = 00403013
img_len = 4096
chksum = 49be98c398ed146cd1c6a301886c4d1a
addr_port = fb2a00e00b5b
encounter reserver field
224.0.42.251 : given address is multicast, leave group==< DRV >== GUI fb mem=36b65a40
Graphics [720x576:720]
identifier 0x4d42 filesize 159510 offset 54
height 151 width 352 planes 1 pixels 24
format 0 size 159456
Execute external sh /etc/hotplug/mount_device
Jan 1 00:00:13 IP-STB[308]: Execute external sh /etc/hotplug/mount_device

Execute external sh /etc/link_drm.sh
mkdir: Cannot create directory `/data/share/': Read-only file system
tar: chdir(/data/share/security): No such file or directory

INP_Init>
INP_Eng_Init>OS_Task_CreateThread: Thread inp_eng_task(7176) has been created!
OS_Task_CreateThread: Thread inp_tty_task(8201) has been created!

DB_Init>
DB_Epg_Init>
sema_id=01121238, mutex=01121268CONTROL_Init - Initialize
Set Volume................0=>SET volume:0
OK(O)
CONTROL_Config_Init() end

sema_id=0112A140, mutex=01121288
sema_id=0112A170, mutex=0112A1A0
sema_id=0112A1C0, mutex=0112A1F0
=== DRV_SA_Init ===
@@@ SA_SETUP_FILE=/etc/sysmgmt/VERIMATRIX.INI SA_SETUP_DEFAULT=/etc/def_sa_VM.ini

###### sys_kill PID=308, Signal=5 ######

###### sys_kill PID=308, Signal=5 ######

=== DRV_SA_Init: init finished ===
PLY_Init>
play_task>OS_Task_CreateThread: Thread play_task(10251) has been created!
BGRA32 format selected
Graphics [720x576:720]
[opera_alarm_basetime_init] TimeTick Per Second: 100
[opera_alarm_basetime_init] System starup tick: 429468260
==< DRV >== GUI fb mem=36b65a40

sema_id=01138AF8, mutex=01138B28===================== inp_eng_task / PID=341 =====================
===================== inp_tty_task / PID=342 =====================

sema_id=01137CF8, mutex=010DEAD8adding font: /usr/bin/fonts/albw.ttf
adding font: /usr/bin/fonts/san_m_21.ttf
===================== play_task / PID=344 =====================

DRV_Resrc_Init...

sema_id=0115B6C0, mutex=0115B6F0
sema_id=0115B710, mutex=0115B740
sema_id=0115B760, mutex=0115B790adding font: /usr/bin/fonts/san_p_21.ttf
adding font: /usr/bin/fonts/srf_m_21.ttf
adding font: /usr/bin/fonts/srf_p_21.ttf
OS_Task_CreateThread: Thread browser_task(11276) has been created!
Can't read data from /etc/dhcpc/dhcpcd-eth0.infoCan't read data from /etc/dhcpc/dhcpcd-eth0.infoOS_Task_CreateThread: Thread NTP_Task(12301) has been created!

FWUP_Init>==< DRV >== GUI fb mem=36b65a40
framebuf = 36b65a40
OS_Task_CreateThread: Thread fwup_eng_task(13326) has been created!

Input key simulation: "help" for more information
Command: ===================== browser_task / PID=345 =====================
Setting input mode to raw
===================== NTP_Task / PID=346 =====================
NTP server hostname error!
NTP server hostname error!
-NTP- Connecting to pool.ntp.org
===================== fwup_eng_task / PID=347 =====================
OSD_VOL_CHANGE(1)
OSD Inited()
@@@@@@@@@@@ Checking Customer HTML @@@@@@@@@
Checking Customer HTML...............OK ['/html/index.htm' exists]
----Use [ CUSTOMER ] Page!----
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
-NTP- Time: Sat Jul 18 2:52:40 2009
OS_Task_TerminateThread: Thread NTP_Task(346) has been terminated!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Set Result:0Same timezone .No need to change time
OS_Task_TerminateProcess: Thread NTP_Task(346) has been terminated!
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
Can't read data from /etc/dhcpc/dhcpcd-eth0.infoCan't read data from /etc/dhcpc/dhcpcd-eth0.infoOS_Task_CreateThread: Thread NTP_Task(14349) has been created!
cmdstr=killall syslogd

###### sys_kill PID=324, Signal=15 ######

cmdstr=killall syslogd
killall: syslogd: no process killed
cmdstr=syslogd -b 0
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
CONTROL_EventDispatcher - Command 12 received!
Set Content Mode to 0
SAVE OSD:display-[7 7 16 7 0]
SAVE OSD:prefermode-[-1 -1]
SAVE OSD:video-[11 11 11 11 11]
SAVE Volume:[0]
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
CONTROL_EventDispatcher - Command 12 received!
Set Component Type to 0
SAVE OSD:display-[7 7 16 7 0]
SAVE OSD:prefermode-[-1 -1]
SAVE OSD:video-[11 11 11 11 11]
SAVE Volume:[0]
Copying /tmp/user_config.xml to /etc/sysmgmt/bak_config.xml ...OK!
===================== NTP_Task / PID=356 =====================
NTP server hostname error!
NTP server hostname error!
-NTP- Connecting to pool.ntp.org
-NTP- Time: Sat Jul 18 2:52:41 2009
Jul 18 02:52:41 IP-STB[356]: -NTP- Time: Sat Jul 18 2:52:41 2009

OS_Task_TerminateThread: Thread NTP_Task(356) has been terminated!
OS_Task_TerminateProcess: Thread NTP_Task(356) has been terminated!

Кучу косяков видно сразу, но самый главный — это то, что splash подгружается ДО полной инициализации CFE, когда можно с клавиатуры нажать Ctrl-C и творить что угодно. В итоге, если splash дохлый или не дай Бог — с JPEG, который сохраняли в прогрессиве, — то все. Финита. У меня один такой уже лежит. Очевидно, только JTAG’ом поднимать. Жесть, одним словом. Кто их учил писать загрузчики — неизвестно.

Интерфейс для просмотра IPTV-каналов на D-Link DIB-120

Update -> http://skylord.ru/2010/07/19/interfejs-dlya-iptv-stb-d-link-dib-120-s-onlajn-servisom/

Более-менее продакшн. Пусть и с минимальными функциями (прямо скажем — не Нетрис), но с интерфейсами московских контент-агрегаторов вполне может поконкурировать. 🙂

Видео записал на скорую руку — просто чтобы было.

Основной функционал показан, отдельно отмечу пару нюансов:

  • все находится внутри приставки, снаружи она подгружает только перечень каналов (чтобы можно было их оперативно менять без смены прошивки) и программу передач.
  • интерфейс поддерживает скины. Пока есть только один, т.к. не хотелось время тратить на рисование, но программно все подготовлено — достаточно нарисовать картинки, написать css и добавить пункт меню для смены скина. 🙂
  • главное меню и меню настроек не мудрствуя лукаво позаимствовал из оригинальной прошивки. Надо будет тоже переделать, конечно…. Хотя мне и так нравится…
  • каналы листаются по одному и страницами (чтобы быстро куда-то дойти). Быстрый переход к номеру канала цифровыми кнопками. Возврат к предыдущему каналу кнопкой back.
  • программа передач подгружается раз в несколько часов с сервера, где стоит скрипт и ее генерирует
  • у меня сейчас вещается только три канала, а остальные в список просто для красоты загнал.