使用kplayer实现无人直播

Kplayer官方介绍

kplayer为你提供最小化成本搭建视频推流功能的工具,最优的推流方案OBS或其他软件依赖与xWindow或图形化界面的需要,不适合在服务端与云服务器上进行部署。KPlayer无需依赖图形化界面,您可以使用任意一款你喜欢的发行版本即可实现多视频资源无缝推流的方案。

只需要定义您的配置文件,针对定制化的修改。即可达成想要的结果。并且可以24小时无人值守的方式运行它。

image-20240422205450337

其优势:

  • 支持多视频多平台推流
  • 支持添加图片水印字幕文字等功能
  • 内置视频缓存机制 对低配置机器比较友好
  • 自带后台运行
  • 免费开源

GitHub : 点击进入

官方文档 : 点击进入

无人直播前置需求

  • 云服务器一台 或者24开机联网运行的本地电脑
  • ffmpeg
  • 推流地址 (B站、抖音、斗鱼…)
  • 准备好不涉及侵权的视频内容

开始上手

  1. 安装Kplayer

    1
    curl -fsSL get.kplayer.net | bash

    执行完成之后输出下载进程与完整的文件列表

    1
    2
    3
    4
    5
    6
    7
    > curl -fsSL get.kplayer.net | bash
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 24.4M 100 24.4M 0 0 7377k 0 0:00:03 0:00:03 --:--:-- 7379k
    kplayer/
    kplayer/kplayer
    kplayer/config.json.example

    该指令默认下载最新版本, 如果你想下载旧版本 可以使用以下指令:

    1
    w get http://download.bytelang.cn/kplayer-v0.5.6-linux_amd64.tar.gz

    只需对版本号进行修改即可

  2. 修改配置文件

    kplayer安装完毕后 会有默认的配置文件kplayer/config.json 里面默认格式如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {
    "version": "2.0.0",
    "resource": {
    "lists": [
    "/video/example_1.mp4",
    "/video/example_2.mp4"
    ]
    },
    "output": {
    "lists": [
    {
    "path": "rtmp://127.0.0.1:1935/push"
    }
    ]
    }
    }

    resource->lists中填写需要进行播放的视频output->lists填写需要推流的平台 这里支持多平台推送

    由于我需要对视频进行循环播放 因此在配置文件中需要对此进行声明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    {
    "version": "2.0.0",
    "resource": {
    "lists": [
    "/video/example_1.mp4",
    "/video/example_2.mp4"
    ]
    },
    "output": {
    "lists": [
    {
    "path": "rtmp://127.0.0.1:1935/push"
    }
    ]
    },
    "play": {
    "play_model": "loop",
    "cache_on": true,
    "encode": {
    "video_width": 854,
    "video_height": 480,
    "video_fps": 25,
    "audio_channel_layout": 3,
    "audio_sample_rate": 44100,
    "bit_rate": 0,
    "avg_quality": 0
    }
    }

    }

    参数解释:

    • play_model : 设置播放模式 这里我选择loop循环播放
    • cache_on : 是否开启缓存模式 开启后降低机器资源占用 提升推流性能
    • encode: 视频编码配置 比如帧率、码率、声音音质等等
  3. 运行kplayer开始推流

    1
    ./kplayer play start

    将会看到以下输出信息并保持程序继续运行,即成功推流

    1
    2
    3
    4
    5
    6
    7
    8
    9
    kplayer for golang v0.5.8 Copyright(c) 2019-2023 the ByteLang Studio (https://kplayer.bytelang.cn)
    libkplayer version: v1.5.5 plugin version: 1.5.1 license version: v1
    toolchains GNU(10.3.1) C++ Standard 17 on Linux-x86_64-5.18.14-arch1-1
    build with build-chains cmake(3.22.3) type with Release
    Hope you have a good experience.
    -------------------------------------------------------------------------------------------------------------------
    INFO[2022-08-23 15:25:05] grpc server listening address=127.0.0.1 port=5157
    INFO[2022-08-23 15:25:05] http server listening address=127.0.0.1 port=5156
    INFO[2022-08-23 15:25:05] output add success
  4. 效果测试

    此时 我们能看到已经可以接收到直播内容了

    image-20240429182957862

点击进入直播间

后台运行kplayer

当我们退出终端时, 推流会被终端 为了确保24小时推流 我们需要将kplayer放在后台运行

这里kplayer已经给我们提供了后台运行的方式 只需加一个--daemon参数即可:

1
./kplayer play start --daemon

运行后将会输出成功日志:

1
INFO[2022-08-23 00:47:26] kplayer start success on daemon mode

当使用daemon模式后,所有的日志输出将会重定向到log/kplayer.log中,你可以查看这个文件来确定是否有异常情况发生

除了使用自带的方式之外 ,我们还可以使用第三方工具 比如nohupsystemctlscreentmux

关闭KPlayer的运行

  1. 使用前台运行方式时,按下Ctrl+c结束运行
  2. 使用后台Daemon模式时,执行以下命令来结束KPlayer 的后台运行
1
./kplayer play stop

使用相关问题

关于视频推流卡顿的问题

如果出现视频卡顿 在无法提升带宽的前提下 最有效的方法就是降低视频分辨率

比如将分辨率设置为854x480 超过这个分辩率的视频会进行压缩 低于这个分辩率的 按照原视频分辩率

由于大部分直播平台使用的是1920x1080比例 所以如果视频需要铺满全屏的话需要按照这个比例等比进行放大或者缩小

关于视频推流kplayer报错checked play resource

当我们查看日志发现报错:level=info msg="checked play resource"

这种情况一般是视频本身的问题 可以考虑使用剪辑软件对视频重新进行编码导出

如果使用压缩工具 未必能解决问题 因为这个我已经试过了 没啥用👀

关于水印修改后不生效的问题

当我们修改水印文字之后会发现只有新增的视频有效 而旧视频依然还是原来的那个水印 这主要是缓存导致 只需要前往/kplayer/cache目录清除相应的视频缓存即可

关于多个视频推流衔接处花屏的问题

这个是底层框架的问题 暂时无解 最好的办法就是用剪辑软件将多个视频合成一个视频

个人使用感受

相比ffmpeg来说Kplayer功能更加丰富 但性能和稳定性不如ffmpeg 视频卡顿频繁 也可能是我还没把Kplayer摸索透

个人感觉FFmpeg>>Kplayer>>Ant Media Server

相关文章

使用Ant Media实现无人直播

使用ffmpeg实现无人直播

使用Docker安装kplayer实现无人直播

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%