Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

來看電視了, linux 下自製網路電視
post by tommy @ 31 三月, 2005 15:55
國外待久了, 第四台只有幾台台灣的電視節目, 有點不怎麼好看. 家裡的 ADSL 整天開著, 也沒什麼大的流量, 所以.... 最近打算研究一下, 看看能不能裝個電視卡上去, 然後把訊號送到國外的我來看.

看了一些 V4L 的文件, 看起來這樣的想法在 Linux 上頭並非是不可行的, 只要能找到支援的電視卡, 做起來應該不會很難.

買了一張 saa7133 的電視卡 (啟視錄 M300, 基本上, 目前市面上多數的電視卡似乎都是用這一個晶片), 試了一下, 果然可以使用. 步驟說明如下:

  • 買張你的 linux kernel 支援的電視卡, 然後把這張卡的 driver 編成模組. (建議也把 i2c 加入)
  • 安裝 xawtv 這個軟體, 會包含一些 v4l 的程式, 可以方便我們做設定或選台.
  • 到  helix 開發的社群網站註冊並抓回 Helix DNA Server (servinstplus) 與 Helix DNA Producer.
  • 安裝 Helix DNA Server, 記住你所選擇的 port 與密碼.
  • 到 Helix DNA Server 的安裝路徑, 修改 hlxserverplus.cfg 中有關BroadcastReceiver 的設定. 把註解移除. 設定如下:
<List Name="BroadcastReceiver">
<List Name="Receivers">
<!-- Uncomment the "Anyone" Receiver to begin listening for encoder feeds
on port 30001, adjust setttings to suite. -->
<List Name="Anyone">
<Var FECLevel="20"/>
<Var UseTCPForPullBackchannel="0"/>
<Var OriginSpec="0.0.0.0/0"/>
<Var AcquisitionDataInterval="30"/>
<List Name="Security">
<Var Password="12345678"/>
<Var Type="Basic"/>
</List>
<Var Protocol="udp/unicast"/>
<Var PullSplitEnabled="0"/>
<Var PortRange="30001-30020"/>
<Var ResendSupported="0"/>
</List>
</List>
</List>
設定可以用 port 30001 到 30020 連線 (其實一個就夠了), 連線使用密碼是 12345678.
  • 執行 Bin/hlxserverplus hlxserverplus.cfg & 把 helix server 跑起來.
  • 安裝 Helix DNA Producer, 執行 producer -pd 查看相關的 device.
mail:/usr/local/helix# producer -pd
Helix DNA(TM) Producer 11.0 Build number: 11.0.0.2013

VIDEO

Device 00: Compro VideoMate TV /dev/video0
    Port 00: S-Video
    Port 01: Composite1
    Port 02: Television

AUDIO

Device 00: Realtek ALC655 rev 0 /dev/dsp
    Port 00: vol
    Port 01: line
    Port 02: mic
    Port 03: cd
    Port 04: line1
    Port 05: phin
    Port 06: phout
    Port 07: video

如上, 會抓到相關的 video 與 audio device. 我的 video device 是 00, 而電視是在 port 02. 而電視卡的聲音輸出是用一條線接到音效卡的 line-in. 所以 audio device 是 00, port 是 01.

  •  執行下面的指令, 把電視輸出到 helix server 去做播放:
producer -ac 0 -ap 1 -vc 0 -vp 2 -cs 320x240 -ad 384k -sp :12345678@localhost:30001/tv.rm
參數說明如下:
  • -ac: audio device,  你要抓的聲音 device 編號 (這些參數都由 producer -pd 可得知).
  • -ap: audio port, 你要抓的聲音是那一個 port 產生的.
  • -vc: video device, 你要抓的影像是那個 device 編號.
  • -vp: video port, 你要抓的影像是由那一個 port 產生的.
  • -cs: 畫面輸出的大小.
  • -ad: 頻寬的參數檔. 可以查看 producer 的安裝路徑下的 audiences 目錄內的檔案.
  • -sp: 輸出到 helix server 的指令. 一般為 user:pass@host:port/file.rm, 其中:
  • user: 看你有沒有設定, 以我們上頭 BroadcastReceiver 的設定來看, 並沒有指定 user, 只有設定密碼, 所以上面的指令 user 為空白.
  • pass: BroadcastReceiver 的密碼
  • host: helix server 的主機, 我們是在同一台主機, 所以用 localhost.
  • port: helix server 的 BroadcastReceiver 使用的 port, 我們上頭設定了 30001 到 30020, 選一個來用.
  • file: 外頭要連線來看所用的檔案名.
  • 這樣子處理後, 就可以用 RealPlayer 之類的軟體, 連線到 rtsp://yourhost:554/boradcast/tv.rm 來看電視了 (tv.rm 就是前頭設的檔名).
  • 選台可以用 xawtv 所附的 v4lctl 程式來選台: v4lctl setchannel 33 就表示切換到 33 台.
  • 可以用 v4lctl show 或 v4lctl list 查看目前的設定:
mail:/etc/init.d# v4lctl list
attribute | type | current | default | comment
-----------+--------+---------+---------+-------------------------------------
norm | choice | NTSC | PAL | PAL PAL-BG PAL-I PAL-DK NTSC SECAM PAL-M PAL-Nc PAL-60
input | choice | Televis | S-Video | S-Video Composite1 Television
audio mode | choice | mono | mono | mono stereo lang1 lang2
bright | int | 128 | 128 | range is 0 => 255
contrast | int | 68 | 68 | range is 0 => 127
color | int | 64 | 64 | range is 0 => 127
hue | int | 0 | 0 | range is -128 => 127
volume | int | 0 | 0 | range is -15 => 15
mute | bool | off | off |
Mirror | bool | off | off |
Invert | bool | off | off |
y offset o | int | 0 | 0 | range is 0 => 128
y offset e | int | 0 | 0 | range is 0 => 128
automute | bool | on | on |

如果設定與你的電視訊號不同, 或沒有聲音, 沒有影像, 試著用 v4lctl 來設定:

/usr/bin/v4lctl setnorm NTSC
/usr/bin/v4lctl setinput Television
/usr/bin/v4lctl volume mute off
/usr/bin/v4lctl setattr 'audio mode' stereo
/usr/bin/v4lctl setchannel 56

有時沒有畫面時, 用上頭的指令設定後就可以看到了.


2006/05/23 補充說明: 在使用 v4lctl 切換頻道時, 會讀取 /etc/X11/xawtvrc 及 $HOME/.xawrc 的設定. 其中必須在 freqtab 中指定正確的頻道表:

[global]
freqtab = us-cable

[defaults]
input = Television
norm = NTSC
audio = stereo
capture = grabdisplay

以上面這個設定為例, 在 [global] 中, 指定 freqtab 為 us-cable. 系統會讀取 /usr/share/xawtv/Index.map 的設定, 找到 [us-cable] 指定的檔案. 然後讀取該檔案的頻道設定.

 

 

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

大大

你知道ffserver如何設定成rtsp server以便提供live feed stream嗎?

我目前的setting:

Feed feed1.ffm
Format rtp
NoAudio
VideoCodec mpeg4
VideoFrameRate 30
VideoSize 352x240
VideoBitRate 64
VideoGopSize 30

使用VLC接收
rtsp://ip:554/test.avi
以上

結果ffserver只收到
OPTIONS
DESCRIBE
後就沒下文了!

不知哪裡出問題!

感謝!

commons icon [2] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

這個沒研究過, 不是很清楚.

commons icon [3] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

hi,
我在streaming的時候會變成快轉的@@
速度變快 聲音尖銳
不知道有沒有什麼建議呢?

commons icon [4] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

用 helix producer 嗎? 聲音是用 saa7134-alsa 這個 device 嗎?
我只有在使用 saa7134-alsa 才會有類似的問題. 如果用一般的音效卡, 沒碰過有發生聲音快轉的情形.

commons icon [5] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

對 我是用 helix producer 跟 saa7134-alsa 這個 module
我有看到你的解法(把電視卡的聲音output接到音效卡line-in) 但是我這張電視卡沒有聲音output port
現在不知道怎麼解決orz

commons icon [6] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

那你可能要改用別的方法了.
mplayer/mencoder 上頭可以用 audiorate=32000 就可以正常使用.

試試看 VLC 吧, 用這個來做 streaming 似乎也不難.

commons icon [7] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

我用 sox 解決了!!
感謝你的幫忙:)

請問你有辦法一邊 streaming 一邊換台嗎?
我只要一跑 v4lctl 畫面/聲音就會消失,就算是調音量或是單純跑 list 都一樣:|

commons icon [8] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

sox 的作法是? 我之前看過 v4l wiki 上頭 saa7134-alsa 的那一篇有提到, 不過當初試不出來.

至於 streaming 中, 我使用 v4lctl 並不會有問題. (除了傳輸造成的 delay 外)

commons icon [9] Re:來看電視了, linux 下自製網路電視 [ 回覆 ]

sox -q -c 2 -s -w -r 32000 -t ossdsp /dev/dsp1 -t ossdsp -w -r 32000 /dev/dsp

把dsp1接到dsp 指定sample rate 32000
然後producer去抓 dsp

works for me :p

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 160 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS