将流从 hdhomerun 发送到 AWS EC2 实例

Send stream from hdhomerun to AWS EC2 instance

我正在尝试一些奇怪的事情来获得乐趣。将流从 hdhomerun 发送到 AWS EC2 实例。

第一种方法。使用 ffmpeg 读取流 (本地测试成功)

hdhomerun_config 发现我的设备有 ip 192.168.1.200 所以我以这种方式在路由器上打开端口

<my home public ip>:5005 -> 192.168.1.200:80
<my home public ip>:5004 -> 192.168.1.200:5004

w3m 和 telnet 说一切正常。

但是...

我做的是 EC2 实例

/usr/bin/ffmpeg -y -i 'http://<my home public ip>:5004/auto/v5057?transcode=internet240' -t 12 -vn -acodec pcm_s16le -ar 16000 -ac 1 '/tmp/test.wav'

在 tuner1 中我可以看到...

Virtual Channel none
Frequency   698.000 MHz
Program Number  186
Modulation Lock t8qam64
Signal Strength 89%
Signal Quality  100%
Symbol Quality  100%
Streaming Rate  none
Resource Lock   <EC2 public ip>

在 hdhomerun 系统日志中...

19700102-10:27:25 Tuner: tuner0 tuning 5057 Telecinco (t8qam64:698MHz-186)
19700102-10:27:25 Tuner: tuner0 streaming http to <EC2 public ip>:34124

一切正常,但 ffmpeg 没有得到任何数据。

第二种方法。发送流到 wowza

我在 EC2 实例中有一个 wowza 服务器 运行

从我家的 linux 盒子里。

root# /usr/bin/hdhomerun_config 1250D7B2 scan /tuner1 scan.log
root# /usr/bin/hdhomerun_config 1250D7B2 set /tuner1/channel auto:651000000
root# /usr/bin/hdhomerun_config 1250D7B2 get /tuner1/streaminfo
root# /usr/bin/hdhomerun_config 1250D7B2 get /tuner1/program 190
root# /usr/bin/hdhomerun_config 1250D7B2 set /tuner1/target rtp://<wowza server public ip>:1935/TEST/hdhr
root# echo $?
root# 0

无误结束购买无效 这是一个远景,但是 ....

有什么想法可以做到这一点。

谢谢!!!

HDHomerun 调谐器发送带有 ttl=3 的流,因此它一旦离开路由器就永远不会到达您的 EC2 实例。我通过互联网流式传输的解决方案是在 HDHomerun 位置使用 nginx 反向代理将 5004 转发到调谐器。

最后我就这样使用ffmpeg作为编码器...

/usr/bin/ffmpeg -i http://192.168.1.50:5004/auto/v5055?transcode=internet240 -vn -ar 16000 -ac 1 -f rtsp -rtsp_transport tcp -muxdelay 0.1 rtsp://22.22.22.22/XXX/STREAM

为了守护进程我做了这个...

[Unit]
Description=XXX ffserver incoming stream

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/usr/bin/ffmpeg -i "http://192.168.1.50:5004/auto/v5055?transcode=internet240" -vn -ar 16000 -ac 1 -f rtsp -rtsp_transport tcp -muxdelay 0.1 rtsp://22.22.22.22/XXX/STREAM
[Install]
WantedBy=multi-user.target