之前我都一直使用 [[Plex]] 来同步看视频,基本上可以做到秒级别的共享观看。今天看 GitHub 的时候发现一款叫做 SyncTV 的应用,也是可以通过同步的方式了共享观看视频流,那这样就可以一起看视频,看直播了。原来 Plex 的因为放在了一台欧洲的服务器上,在国内播放的时候总是会出现卡顿,一来是带宽限制,二来是经常发现有转码,所以常常需要我预先转码为低码率的视频才能流畅播放,出现的这个 SyncTV ,我可以搭配一台地理位置比较好的,比如日本的机器,然后通过代理的方式播放,不知道会不会提升一下使用体验。

SyncTV 使用同步的功能,确保了观看视频的人都在同一个时刻,并且可以暂停,回退,快进,每一个人的状态也都是同步的。SyncTV 也支持直播流。SyncTV 也提供了一个私密的 Theater,可以在其中进行聊天,实时交流。

h9p9

SyncTV

SyncTV 是一个可以让用户远程一起观看电影或者直播的程序,SyncTV 使用 Go 语言编写。它提供了同步观看,在线聊天的功能。使用 SyncTV 可以与朋友和家人一起观看视频和直播。

SyncTV 可以保证所有观看的人都在同一个时间点上,这意味着暂停、回退或者快进视频都可以同步到其他人,SyncTV 不仅可以添加视频流,还添加直播流。

功能:

  • 同步观看
  • 直播同步
  • 聊天
  • 弹幕

hAO6

安装

[[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