又愛看電視 有了小孩之後下班 房間電視根本不可能開啟
所以曾經寫了一個TV類比訊號的電視棒串流到網頁伺服器的程式
隨著最近高畫質節目越來越多台
看著原本的類比訊號真是慘不忍睹 聯絡了第四台業者 安裝了數位機上盒
然後開始了這次的作業
事前GOOGLE了一下 目前市面上已經有類似的產品
NetTV5 跟 Slingbox SB500
曾經用過NetTV4 所以TV5先跳過
SB500則是需要破萬元專門買這台來似乎不太划算(而且同時間觀看只能一人)
先分析一下需求
我的需求是在平板、手機或是PC上看數位機上盒的內容
然後開始準備軟硬體部分
硬體部分:

有線電視數位機上盒
一台PC(我是用平常在掛網的驢子機) cpu : i3-2365m
USB 3.0 HDMI擷取卡 (平常接wiiu在筆電上玩GAME的擷取卡)
(我自己有兩張一個是XI100DUSB-HDMI 一個是圓剛的CV710 後者比較便宜
因為我沒有桌機所以沒有pcie的卡不過我想應該也是可以使用的)


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

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

這個也可以自製音波遙控器替代 音波的可以參考這篇
[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播放畫面

遙控器部分 隨便亂用先這樣XD

PC ipad android 同時觀看同一頻道

iPad子母畫面觀看

iPad子母畫面

心得:
裡面最難搞的應該是遙控器部分
其他只要有心都不難解決
那個收發器從香港網站買的還要配合自己寫的程式控制
這部分最麻煩
其他部分只要有點c# asp.net應該不難解決
然後意外發現iPad ios 9.0 後支援的子母畫面功能 爽度更是大增 XD
器材部分因為小孩都睡了 很晚了所以都沒拍照
有時間再來補照片
付一段影片參考
PC比較慢是因為有按到暫停的關係