自托管视频共享平台Clipable

Posted 杨浦老苏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自托管视频共享平台Clipable相关的知识,希望对你有一定的参考价值。

什么是 Clipable ?

Clipable 是一个自托管视频共享平台,为个人和组织提供了一种简单高效的方式来托管、共享和管理他们的视频内容。受 StreamableYouTube 等流行平台的启发,Clipable 提供了一个简单直观的用户界面,使任何人都可以轻松上传、共享和观看视频。Clipable 专注于隐私和安全,为那些寻求更受控制和自力更生的视频托管解决方案的人提供了另一种选择。无论您是内容创作者、企业主,还是只是想与朋友和家人分享视频的人,Clipable 都能提供您自信地管理视频内容所需的所有功能。

官方提供了演示站点:https://clipable.net/

镜像下载

官方的镜像发布在 ghcr.io
地址:https://github.com/clipable/clipable/pkgs/container/clipable

SSH 客户端登录到群晖后,执行下面的命令

# 拉取镜像,目前只发布了一个版本
docker pull ghcr.io/clipable/clipable:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/clipable/clipable:latest

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/clipable/clipable:latest ghcr.io/clipable/clipable:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/clipable/clipable:latest

下载完成后,可以在 映像 中找到

安装容器

docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '2.1'

services:
  postgres:
    image: postgres:14
    container_name: clipable-db
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - ./pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 1s
      timeout: 5s
      retries: 5

  minio:
    image: minio/minio
    container_name: clipable-minio
    volumes:
      - ./minio_data:/data
    # ports:
    #   - 9001:9001
    environment:
    #  - "MINIO_ACCESS_KEY=minio"
    #  - "MINIO_SECRET_KEY=myminiokeythatishouldchange123"
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=myminiokeythatishouldchange123
    command: server /data --console-address ":9001"

  createbuckets:
    image: minio/mc
    container_name: clipable-mc
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc alias set clipable http://minio:9000 minio myminiokeythatishouldchange123;
      /usr/bin/mc mb clipable/clips;
      exit 0;
      "
  clipable:
    image: ghcr.io/clipable/clipable:latest
    container_name: clipable-web
    # All of these environment variables are documented here: https://github.com/clipable/clipable/wiki/Environment-Variables
    environment:
      #DEBUG: "true"
      MAX_UPLOAD_SIZE: 5GB
      ALLOW_REGISTRATION: "true"
      FFMPEG_CONCURRENCY: 1 
      FFMPEG_THREADS: 0
      FFMPEG_PRESET: medium
      FFMPEG_TUNE: film
      DB_HOST: postgres
      DB_PORT: 5432
      DB_USER: postgres
      DB_PASSWORD: postgres
      DB_NAME: postgres
      DB_IDHASHKEY: mydbidkeythatishouldchange123
      COOKIE_KEY: mycookiekey12345
      COOKIE_DOMAIN: 192.168.0.197
      S3_BUCKET: clips
      S3_ACCESS: minio
      S3_SECRET: myminiokeythatishouldchange123
      S3_ADDRESS: minio:9000
      S3_SECURE: "false"
    ports:
      - 8190:80
    depends_on:
      postgres:
        condition: service_healthy

参数比较多,就不一一说明了,有兴趣可以去看官方文档:https://github.com/clipable/clipable/wiki/Environment-Variables

上面的参数必须要修改的只有 COOKIE_DOMAIN

  • 如果你是在局域网使用,请修改为群晖主机的 IP
  • 如果你反代后使用,请修改为域名,即便你没有备案,也不要带端口,例如:实际访问时使用的是 https://clipable.laosu.ml:444,这里就填 clipable.laosu.ml

COOKIE_DOMAIN 设置不正确的现象是,点login 按钮登录之后又回到 login

其他的参数比如密码,如果局域网使用,改不改无所谓,毕竟数据库 postgres和存储 minio 都没有把接口暴露出来,鉴于数据库采用的方式,务必不要添加端口

现在开始依次执行下面的命令

# 新建文件夹 clipable 和 子目录
mkdir -p /volume2/docker/clipable/minio_data,pg_data

# 进入 clipable 目录
cd /volume2/docker/clipable

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

需要注意的是,在启动完成后, 容器clipable-mc 是会停止的

在它的日志中,你会看到已经成功创建了 bucket,所以不用理会

运行程序

在浏览器中输入 http://群晖IP:8190 就能看到主界面

注册一个用户

注册成功后会多出 upload 按钮

上传一个视频

有个转码的过程

完成后就可以播放了

回到首界面

参考文档

clipable/clipable: A simple, self-hosted, alternative to Streamable
地址:https://github.com/clipable/clipable

Clipable - A self-hosted Streamable alternative : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/11qj12a/clipable_a_selfhosted_streamable_alternative/

带有自定义控件的视频无法在 iOS 上播放(Safari 和 Chrome)

【中文标题】带有自定义控件的视频无法在 iOS 上播放(Safari 和 Chrome)【英文标题】:Video with custom controls not Playing on iOS (safari & chrome) 【发布时间】:2021-09-23 00:25:22 【问题描述】:

我正在使用 Django 开发一个平台,该平台托管直接上传到服务器上的视频。 我正在测试应用程序,我得到的结果是视频在桌面上可以正常播放,但不能在移动 iOS(safari 和 chrome)上播放,而是在使用 android 10 的移动设备上播放。视频格式正确(mp4) 和编码标准(H264、AAC)。

我已经阅读了不同的主题,这些主题讨论了在 iOS 上触发和播放视频 (ex.1ex.2) 的正确方法,但即使我遵循本指南,我也无法触发视频按下播放按钮时播放。我不知道它有什么问题。

代码如下:

     <div class="c-video">

      <video class="video" id="video" src=" video.video.url " type='video/mp4' poster=" video.image.url "> </video>

      <div class="controls">
        <div class="bar">
          <div class="dragger"></div>
          <div class="barline"></div>
        </div>
        <div class="buttons">
          <button id="play-pause"></button>
        </div>
        <div class="volume-slider">
          <input id="vol-control" type="range" min="0" max="100" step="1" oninput="SetVolume(this.value)" onchange="SetVolume(this.value)"></input>
        </div>
      </div>
     </div>


    <script>

    var video = document.getElementById("video");
    var btn = document.getElementById("play-pause");

    btn.addEventListener('click', function(e) 
        if (video.paused || video.ended) video.play();
        else video.pause();
    );
    </script>

我也尝试直接从按钮触发播放事件,但没有任何改变:

   <div class="buttons">
   <button id="play-pause" onclick="togglePlay();"></button>
   </div>

   <script>

     var video = document.getElementById("video");
     var btn = document.getElementById("play-pause");

     function togglePlay() 
       if (video.paused || video.ended)
         video.play();
       else
         video.pause();
      

   </script>

【问题讨论】:

你能提供一个示例视频的链接吗?问题可能在于视频本身的编码,因为移动设备可能不支持它 @Mick 视频的编码是 H264(视频)AAC(声音),CBR 15 和 MPEG-4 格式 并非所有移动设备都支持所有 H.264 配置文件。如果您可以添加一个 ffprobe 输出,这将有助于消除此问题。 @Mick 我已经在其中一个文件上运行了 ffprobe。我已经发布了输出作为答案,应该从中假设什么? 如果您现在想更新它,实际上最好将 ffprobe 输出添加到问题中,而不是作为单独的答案。该文件看起来不错(请参阅此处的信息:***.com/a/59733769/334402)。如果您能够分享指向不起作用的示例视频的链接,那也会很有帮助。过去,某些 iOS 设备不支持您的视频的“主要”配置文件,尽管我不确定情况是否仍然如此。如果您有“高”或“基线”版本,您可以尝试一下 - 基线将提供更好的 Android 兼容性。 【参考方案1】:

正如@Mick 所建议的,问题可能出在视频文件的编码上,这是在上传到应用程序的视频文件之一上运行 ffprobe 时的输出结果:

ffprobe version 4.4 Copyright (c) 2007-2021 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANCHO_LUA.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2021-06-13T02:23:50.000000Z
  Duration: 00:07:48.07, start: 0.000000, bitrate: 10305 kb/s
  Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 9984 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2021-06-13T02:23:50.000000Z
      handler_name    : ?Mainconcept Video Media Handler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      creation_time   : 2021-06-13T02:23:51.000000Z
      handler_name    : #Mainconcept MP4 Sound Media Handler
      vendor_id       : [0][0][0][0]

【讨论】:

【参考方案2】:

我正在处理一个类似的问题,问题不在于视频格式,而是我的 API 不支持 iOS 设备所需的 HTTP Range Requests。根据ticket 判断默认情况下,Django 开发服务器似乎不支持范围请求,但是如果您设置 apache 或 nginx 来提供视频文件,它应该可以正常工作。

我通过将视频上传到 AWS S3 并使用预签名 URL 直接从那里提供它们来解决了这个问题。该解决方案为我提供了 iOS 支持和视频访问控制。

【讨论】:

你是对的。我也偶然发现了那张票,现在我已经完成了我的应用程序,我可以向它保证这是真的。使用 apache 部署应用程序后,问题不再出现,并且视频在桌面和移动设备上的 safari chrome 中都可以正常播放。谢谢你的回答

以上是关于自托管视频共享平台Clipable的主要内容,如果未能解决你的问题,请参考以下文章

群晖emby突然无法投屏了

使用乐视tv观看群晖ds218play中的视频

群晖nas迁移共享文件中途可以退出吗

群晖NFS 共享权限设置

群晖NAS教程第五节:如何备份 Synology NAS

群晖安装Docker