看了一些 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] 指定的檔案. 然後讀取該檔案的頻道設定.
大大
你知道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
後就沒下文了!
不知哪裡出問題!
感謝!
這個沒研究過, 不是很清楚.
hi,
我在streaming的時候會變成快轉的@@
速度變快 聲音尖銳
不知道有沒有什麼建議呢?
用 helix producer 嗎? 聲音是用 saa7134-alsa 這個 device 嗎?
我只有在使用 saa7134-alsa 才會有類似的問題. 如果用一般的音效卡, 沒碰過有發生聲音快轉的情形.
對 我是用 helix producer 跟 saa7134-alsa 這個 module
我有看到你的解法(把電視卡的聲音output接到音效卡line-in) 但是我這張電視卡沒有聲音output port
現在不知道怎麼解決orz
那你可能要改用別的方法了.
mplayer/mencoder 上頭可以用 audiorate=32000 就可以正常使用.
試試看 VLC 吧, 用這個來做 streaming 似乎也不難.
我用 sox 解決了!!
感謝你的幫忙:)
請問你有辦法一邊 streaming 一邊換台嗎?
我只要一跑 v4lctl 畫面/聲音就會消失,就算是調音量或是單純跑 list 都一樣:|
sox 的作法是? 我之前看過 v4l wiki 上頭 saa7134-alsa 的那一篇有提到, 不過當初試不出來.
至於 streaming 中, 我使用 v4lctl 並不會有問題. (除了傳輸造成的 delay 外)
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