欧洲杯2024直播_欧洲杯在线无插件观看_zhibo8

Youtube直播转IPTV源 - 咸鱼的小鱼塘

Youtube直播转IPTV源 - 咸鱼的小鱼塘

  Youtube 是个大宝库!

  Youtube 直播上有很多好东西,比如各大电视台喜欢在油管上直播自己的新闻频道。

  比如海量台湾电视新闻台都在油管上搞了直播,我整理了一下这些。

  我曾经想过用 Golang 自己写一套 Youtube 解析算法,但是考虑到我可能没有精力随时维护解析算法,所以还是要用现成的第三方库来弄。

  Github 有个非常出名的第三方 Youtube 工具,youtube-dl。能在开源世界上拿到 65.6k 的 star 非常不容易, 也侧面证明了这个工具的靠谱程度。通过查看 的帮助,可以知道 能解析到 Youtube 的 M3U8。

  在 Golang 中调用程序并获取输出内容,可以这么做:

  首先需要检查要调用的程序有没有,免得出问题。 会检查能否找到程序,在 时,证明可以调用到程序。 使用 指定调用的命令行, 会运行并输出程序运行内容。需要考虑的是,运行程序可能会卡住,尤其是 国内的神奇网络,如果没有扶墙,可能会无限卡下去。所以,必须增加超时。通过指定超时 , 设定 10 秒的延迟。所以这个时候需要把 换成 ,超时之后会自动取消。

  Kodi 之类的 IPTV 客户端,都只能使用 M3U8 地址。所以需要一个 Go 程序提供 Youtube 直播地址转换到 M3U8 功能。用 Gin 可以非常容易的写一个 Web 服务。

  正常的油管 M3U8 在电视之类没扶墙的环境是不能播放的,所以代理是很有必要的。如何代理可以参看 RTHK 那篇博文。

  这种代理就是简单的读取,转发。只是 M3U8 里面的连接也跟着替换一下,注意必须保持扩展名 , 要不然 VLC 之类的会无法播放。

  实际使用的时候,会发现一个很大的问题。比如 Kodi 换台的时候,首先会访问设定的地址,然后调用一次 , 解析个6-7秒返回结果,再加上 Kodi 需要去真实的直播源加载数据,每次换台需要卡顿 8-10s 左右。

  考虑到频道列表是固定的,所以可以提前使用 加载一下。要缓存数据,最好的方法是使用 redis 之类的工具。 不过为了这个简单的缓存引入 redis 实在不值当,所以直接使用内置类型 map 会很方便,高并发环境下需要使用 防止冲突 panic。

  具体实现可以参考 https://github.com/zjyl1994/livetv/blob/master/m3u8cache.go 文件。

  在进行 Youtube 地址转换获取 M3U8 的时候,先行访问快取,如果命中快取就直接用快取中获取。获取不到再去用真实的 获取连接。

  当程序启动的时候,快取中没有任何数据,所以程序启动时需要逐个获取连接放入快取。

  Youtube 生成的 M3U8 中有过期时间,一般是6小时。如果想要保持随时可看的状态,就得经常更新。 编写一个更新函数,从频道定义文件里获取 Youtube 链接,然后更新一下所有频道的 M3U8。 然后使用 遍历所有的链接,清理掉过期的链接,只要2-3小时抓取一次即可。

  本次的程序使用多配置文件模式,具体可以参考 https://github.com/zjyl1994/livetv/blob/master/README-zh.md。

  这次折腾完了,就可以用 Kodi 看香港台,台湾台,等等各种直播频道,配置好之后就享受观影吧。

分享:
扫描分享到社交APP