幾年前, 自從出國工作後, 就在家裡的機器上, 裝上一張電視卡, 然後利用 Helix 的程式, 讓我可以在國外連線回去看國內的電視節目 (請參考這篇). 雖然運作都很正常, 不過... 每次要打開或關閉或切換頻道時, 總要用 ssh 連回去主機操作, 說實在, 也不怎麼方便. 尤其是這一兩年來, 有許多類似的產品出現, 都可以利用 web 介面來操作. 所以.... 決定動手寫個介面來用, 就這樣, MyTV 就這麼產生了.
檔案可以由這兒抓取: http://www.teatime.com.tw/~tommy/files/mytv-0.0.1.7z
首先, 為了安全起見, 不打算直接用 root 來執行這些程式, 所以, 請在你的 Linux 上頭, 建立一個 mytv 的使用者, 然後把這個使用者加入到 video 與 audio 的群組中 (這是在 Debian 上頭的群組, 也許在不同的系統上頭, 會是不同的名字, 總之, 就是要可以讀寫 /dev/video, /dev/audio 及 /dev/dsp 等設備的權限就可以), 並且把這個使用者的 shell 改成 /bin/false, 不允許登入使用.
這個程式主要分成兩部份, 一個是 web 的介面, 放在 /var/www/mytv/ 下頭, 另一個是用來執行的部份, 放在 /var/spool/tvctrl/ 下頭, 而 web 介面的程式會經由 localhost:9991 與後端的執行程式溝通. (如果你的檔案不是放這些路徑, 或要使用不同的 port 時, 請自行更改路徑與相關 script 的內容)
接著把上頭的檔案解開來, 把 etc/cron.d/tvctrl 放到 /etc/cron.d 下頭, 這是每天用來刪除逾時的 session 與 log.
接著在你的 /etc/inetd.conf 中加上壓縮檔內的 etc/inetd.conf 內容, 如:
9991 stream tcp nowait.1000 mytv /var/spool/tvctrl/tvctrl.php /var/spool/tvctrl/tvctrl.php
然後把壓縮檔的 tvctrl 目錄裡頭的東西, 放到 /var/spool/tvctrl/ 底下, 修改 config.php 的內容:
<?php
// 預設的頻寬使用設定檔, 放在 helix producer 的安裝目錄下頭的 audiences 目錄
$default_bandwidth = '256k DSL or Cable';
// 預設的頻道
$default_channel = '56';
// 預設的畫面大小
$default_size = '320x240';
// 使用的檔名
$server_file = 'mytv.rm';
// session 逾時的秒數
$session_timeout = 86400;
// 使用 smtp auth 來認證, 如果設為 false, 表示用 pop3 來認證
$using_smtp_auth = true;
?>
接著, 修改 scripts/start.sh 的內容:
#!/bin/sh
FILE="mytv.rm"
AD="teatime"
CS="320x240"
if [ "$1" != "" ]; then
AD="$1"
fi
if [ "$2" != "" ]; then
CS="$2"
fi
if [ "$3" != "" ]; then
/usr/bin/v4lctl setchannel $3
fi
if [ "$4" != "" ]; then
FILE="$4"
fi
/usr/bin/v4lctl setnorm NTSC
/usr/bin/v4lctl setinput Television
/usr/bin/v4lctl setattr 'automute' off
/usr/bin/v4lctl volume mute off
/usr/bin/v4lctl volume 15
/usr/bin/v4lctl setattr 'audio mode' stereo
nohup /usr/local/bin/producer -ac 0 -ap 0 -vc 0 -vp 2 -cs "$CS" -ad "$AD" -sp ":livetv@localhost:30001/$FILE" > /dev/null 2>&1 &
把 producer 的 -ac -ap -vc -vp 等參數改成你的機器上所安裝的電視卡與音效卡的設定, 然後把 -sp 的參數改成你的 Helix Server 所設定的使用者與 tcp port.
接著把壓縮檔內的 web 目錄底下的檔案, 放到 /var/www/mytv/ 下頭. 依照你的需求, 更改 channel.dat, bandwidth.dat 與 screensize.dat 的內容. 這些檔案的格式都是每行一筆資料, 有兩個欄位, 用 : 做分隔, 第一個欄位是參數值, 第二個欄位是參數說明.
這樣子處理之後, 就可以利用 web 介面, 來啟動或結束 producer 的動作, 也可以切換頻道 (當然... 通常要等一陣子才會有反應).
另外, 如果你是在 windows 中使用 firefox 的話, 請修改 rtsp.reg 的內容:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\rtsp]
@="URL:RealTime Streaming Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\rtsp\shell\open\command]
@="\"C:\\Program Files\\Real\\RealPlayer\\realplay.exe\" \"%1\""
把上頭的指令改成你所使用的播放器執行檔. 再匯入這個檔案, 這樣 firefox 才能開啟 rtsp:// 的內容.
如果有任何使用上的問題... 請自己研究看看吧, 反正都是一些 php 的東西, 會 php 的應該很容易找出問題來.