之前我都一直使用 [[Plex]] 来同步看视频,基本上可以做到秒级别的共享观看。今天看 GitHub 的时候发现一款叫做 SyncTV 的应用,也是可以通过同步的方式了共享观看视频流,那这样就可以一起看视频,看直播了。原来 Plex 的因为放在了一台欧洲的服务器上,在国内播放的时候总是会出现卡顿,一来是带宽限制,二来是经常发现有转码,所以常常需要我预先转码为低码率的视频才能流畅播放,出现的这个 SyncTV ,我可以搭配一台地理位置比较好的,比如日本的机器,然后通过代理的方式播放,不知道会不会提升一下使用体验。
SyncTV 使用同步的功能,确保了观看视频的人都在同一个时刻,并且可以暂停,回退,快进,每一个人的状态也都是同步的。SyncTV 也支持直播流。SyncTV 也提供了一个私密的 Theater,可以在其中进行聊天,实时交流。
SyncTV
SyncTV 是一个可以让用户远程一起观看电影或者直播的程序,SyncTV 使用 Go 语言编写。它提供了同步观看,在线聊天的功能。使用 SyncTV 可以与朋友和家人一起观看视频和直播。
SyncTV 可以保证所有观看的人都在同一个时间点上,这意味着暂停、回退或者快进视频都可以同步到其他人,SyncTV 不仅可以添加视频流,还添加直播流。
功能:
- 同步观看
- 直播同步
- 聊天
- 弹幕
安装
[[SyncTV]] 因为是 Go 语言实现,所以可以直接通过脚本二进制安装,我这里则使用 Docker 安装,详细的配置可以参考我的 dockerfile。
安装完成之后可以通过 [[Nginx Proxy Manager]] 或其他工具反向代理端口。
因为我安装的时候把目录映射到了 ~/synctv
下, 所以可以修改该目录下的配置文件来配置 SyncTV。
配置
可以简单看一下默认的配置文件
❯ cat ~/synctv/config.yaml
log:
enable: true
# can be set: text | json
log_format: text
# if it is a relative path, the data-dir directory will be used.
file_path: log/log.log
# max size per log file
max_size: 10
max_backups: 10
max_age: 28
compress: false
server:
http:
listen: 0.0.0.0
port: 8080
# enable http3/quic need set cert and key file
quic: true
cert_path: ""
key_path: ""
rtmp:
enable: true
listen: "" # default use http listen
port: 0 # default use server port
jwt:
secret: rN
expire: 48h
database:
# support sqlite3, mysql, postgres
type: sqlite3 # default: sqlite3
# when type is not sqlite3, and port is 0, it will use unix socket file
host: ""
port: 0
user: ""
password: ""
# when type is sqlite3, it will use sqlite db file or memory
db_name: synctv # default: synctv
# mysql: true, false, skip-verify, preferred, <name> postgres: disable, require, verify-ca, verify-full
ssl_mode: ""
# when not empty, it will ignore other config
custom_dsn: ""
# sqlite3 does not support setting connection parameters
max_idle_conns: 4
max_open_conns: 64
conn_max_lifetime: 2h
conn_max_idle_time: 30m
oauth2:
providers:
github:
client_id: 55a
client_secret: 3ea33
redirect_url: ""
google:
client_id: 2382
client_secret: GOC
redirect_url: ""
plugins: []
rate_limit:
enable: false # default: false
period: 1m
limit: 300
# configure the limiter to trust X-Real-IP and X-Forwarded-For headers. Please be advised that using this option could be insecure (ie: spoofed) if your reverse proxy is not configured properly to forward a trustworthy client IP.
trust_forward_header: false # default: false
# configure the limiter to use a custom header to obtain user IP. Please be advised that using this option could be insecure (ie: spoofed) if your reverse proxy is not configured properly to forward a trustworthy client IP.
trusted_client_ip_header: ""
vendor:
# default use local vendor
bilibili: {}
默认使用 sqlite3 作为数据库,自己用也差不多可以了。
使用
启动之后,进入网页,非常简洁,因为配置了使用 GitHub OAuth2,所以直接使用 GitHub 登录。
登录之后可以创建房间,然后在设置中添加播放的地址,视频直链,或者直播源,或者 Bilibili 视频,因为 B 站视频最简单,我就尝试了一下,但是发现 SyncTV 只能解析 480P 的视频源,还是有一些影响观感的。
如果不想看了依旧可以左下角删除房间,这些操作需要房主才可以操作,其它人只能播放或者暂停。
如果要添加视频直链,可以考虑一下使用 [[AList]] 或者直接 Nginx 共享一个出来。
reference
- https://synctv.wiki/
- https://github.com/synctv-org/synctv/blob/main/README-CN.md