【分享】DIY 個人雲端HD數位電視

因為喜歡寫些有的沒有的程式

又愛看電視 有了小孩之後下班 房間電視根本不可能開啟

所以曾經寫了一個TV類比訊號的電視棒串流到網頁伺服器的程式

隨著最近高畫質節目越來越多台

看著原本的類比訊號真是慘不忍睹 聯絡了第四台業者 安裝了數位機上盒

然後開始了這次的作業

事前GOOGLE了一下 目前市面上已經有類似的產品

NetTV5 跟 Slingbox SB500

曾經用過NetTV4 所以TV5先跳過

SB500則是需要破萬元專門買這台來似乎不太划算(而且同時間觀看只能一人)



先分析一下需求

我的需求是在平板、手機或是PC上看數位機上盒的內容

然後開始準備軟硬體部分

硬體部分:




【分享】DIY 個人雲端HD數位電視

有線電視數位機上盒

一台PC(我是用平常在掛網的驢子機) cpu : i3-2365m

USB 3.0 HDMI擷取卡 (平常接wiiu在筆電上玩GAME的擷取卡)

(我自己有兩張一個是XI100DUSB-HDMI 一個是圓剛的CV710 後者比較便宜

因為我沒有桌機所以沒有pcie的卡不過我想應該也是可以使用的)

【分享】DIY 個人雲端HD數位電視
【分享】DIY 個人雲端HD數位電視

HDMI 1對2分接 網拍隨便買的

【分享】DIY 個人雲端HD數位電視

USB IR TOY (紅外線收發器) 香港網站買的支援WinLirc 一個七百台幣左右 放在機上盒前方

【分享】DIY 個人雲端HD數位電視

這個也可以自製音波遙控器替代 音波的可以參考這篇

[DIY]便宜好用-使用耳機孔的IR遙控器





接法==>數位機上盒 ==> HDMI分接器

===> 1. HDMI擷取卡===> PC
===> 2. 電視

軟體部分:

IIS (c#)
WinLirc 處理紅線遙控器
ffmpeg 擷取電視內容 編碼 串流
asp.net自己寫選台器及播放介面
域名/固定ip (從外面連回家中觀看用)


作法:

首先iis建立一個網站路徑是c:\tv\


本方案的核心就是用ffmpeg的HLS功能

分享一下我的參數如下

解析度是設成1280x800主要是我那台PC CPU不夠力 , 然後上傳的頻寬只有5Mb 權衡之下設定的

ffmpeg -f dshow -ss 0 -video_size 1280x800 -rtbufsize 10000k -async 2 -vsync 1 -i video="XI100DUSB-HDMI Video":audio="數位音效介面 (XI100DUSB-HDMI Audio)" -vcodec h264_qsv -movflags faststart -strict experimental -ac 2 -b:a 64k -ar 44100 -c:v libx264 -pix_fmt yuv420p -tune zerolatency -preset ultrafast -b:v 3500k -f hls -hls_list_size 3 -hls_time 2 -hls_flags delete_segments -hls_segment_filename c:\\tv\\tvd.ts c:\\tv\\tv.m3u8

FFmpeg dshow參數使用文件
FFmpeg 視訊參數
FFmpeg HLS參數說明

1280x800 可換成 1920x1080 看你擷取卡有無支援

b:v 3500k 這個是編碼後的視訊流量 可以自己調整成你要的數字 看你電腦的效能而定 越高畫質越好

這邊的 video="":audio="" 換成你的設備

要取得設備的名稱可以使用以下這個指令

ffmpeg -list_devices true -f dshow -i dummy

有的擷取卡沒有分音訊跟視訊 都是同個名字


這個c:\tv 就是網站的路徑

執行ffmpeg之後會自動產生.ts跟m3u8的播放清單

執行玩這個應該完成90%了


遙控器部分就是用Winlirc錄製一個數位機上盒的遙控器檔 例如bbtv.cf

最後需要做一個網站介面來控制 遙控器

以及作為觀賞的介面

主要是執行ffmpe及遙控器而已

這邊放一些關鍵的代碼


//用Winlirc裡面的transmit來送訊號code是錄製的按鈕名
//發送遙控器訊號
Process exeProcess = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "transmit.exe";
// startInfo.WorkingDirectory = @"C:\\WinLIRC\\";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = @"c:\Winlirc\bbtv.cf " + code;



html部分 android, ios 直接用這個html5的tag就能撥了 pc也要能播的話要另外使用videojs

<video id="video"
class="video-js vjs-default-skin"
height="800"
width="1280" x-webkit-airplay="allow"
controls autoplay>
<source src="tv.m3u8"
type="application/x-mpegURL">
</video>


自己DIY的優缺點如下:

優點:

1.可以自己調整畫質流量
2.可以N台機器同時觀看只要你的頻寬夠 區網的話應該可以更多台
3.不必經由外部伺服器再連回家中減少LAG機會
4.以後不看了設備都可以轉作其他用途
5.不需要安裝任何APP 任何一個裝置只要開瀏覽器輸入網址就能看
6.因為是原生html5所以 iPad ios9 支援子母畫面功能

缺點:

1.轉台DELAY 5秒
2.設定複雜
3.需要懂點程式網路設定


最後附上完成的照片

PC播放畫面
【分享】DIY 個人雲端HD數位電視

遙控器部分 隨便亂用先這樣XD
【分享】DIY 個人雲端HD數位電視

PC ipad android 同時觀看同一頻道
【分享】DIY 個人雲端HD數位電視

iPad子母畫面觀看
【分享】DIY 個人雲端HD數位電視

iPad子母畫面
【分享】DIY 個人雲端HD數位電視


心得:

裡面最難搞的應該是遙控器部分

其他只要有心都不難解決

那個收發器從香港網站買的還要配合自己寫的程式控制

這部分最麻煩

其他部分只要有點c# asp.net應該不難解決


然後意外發現iPad ios 9.0 後支援的子母畫面功能 爽度更是大增 XD

器材部分因為小孩都睡了 很晚了所以都沒拍照

有時間再來補照片


付一段影片參考

PC比較慢是因為有按到暫停的關係

2016-03-03 1:35 發佈
USB 3.0 HDMI擷取卡
可以請問使用的是哪個產品嗎
目前打算用hd72a處理
自己回 XD
XI100DUSB 不菲啊...
s824679s wrote:
自己回 XDXI10...(恕刪)


我手上還有另一個圓剛的cv710 也可以用 現在要3千多

如果手上已經有其他的話可以直接試試

CV710的話改 video 跟audio 就好了

ffmpeg -f dshow -ss 0 -video_size 1280x800 -rtbufsize 10000k -async 2 -vsync 1 -i video="AVerMedia U3 Video Capture":audio="AVerMedia U3 Video Capture" -vcodec h264_qsv -movflags faststart -strict experimental -ac 2 -b:a 64k -ar 44100 -c:v libx264 -pix_fmt yuv420p -tune zerolatency -preset ultrafast -b:v 3500k -f hls -hls_list_size 3 -hls_time 2 -hls_flags delete_segments -hls_segment_filename c:\\tv\\tvd.ts c:\\tv\\tv.m3u8



可以先用這個指令列出你的設備 打在 video ="" 這裡面

ffmpeg -list_devices true -f dshow -i dummy

下圖的"AVerMedia U3 Video Capture" 是我的設備名稱

GL310 這台有硬壓跟rtsp不知道效果會不會比較好,不過是usb2.0的
bon362 wrote:
GL310 這台有硬...(恕刪)


rtsp應該是用不到 手機瀏覽器原生只吃HLS這種方式

不過有硬壓應該是可以減少編碼成H.264的動作 對低階的PC來說是一大幫助

我這台電腦開啟ffmpeg後 CPU都要跑到 50-60%

應該也對轉台Delay有幫助
過了一年多 自己回XD

發現原本買的 USB IR TOY 來遙控數位電視盒的效果很差

USB IR TOY 大約使用個一天自己會當掉 需要重新插拔才會在正常一下 買的兩片都有這個情形

最近受不了決定換掉 換了個 IGUANAWORKS 的 USB IR Transceiver



好處是裝的驅動有內附發送的小程式 只要呼叫那個程式就能發送按鍵 所以順便也把WINLIRC給廢了

目前遙控都正常

會寫點小程式有興趣DIY可以參考 XD
既然你會寫程式為何遙控器不使用arduino自己做,成本不到100塊,便宜又好用

ironThomas wrote:
既然你會寫程式為何遙...(恕刪)


因為硬體方面我不熟悉

你現在說我才知道有這東西

有機會可以來玩玩看

先謝謝您 , 無私地分享 !! 讚 !!

想請教 : 您這方式 , 在外使用 4G 連線 , 如在訊號較落時 , 影像可不可以像 slingbox 自動降低解析度 , 繼續持續順暢的播放 呢 !? 煩請賜教 !!

內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?