LiveStream

Catalogue
  1. 1. Install Screen
  2. 2. Install FFmpeg
  3. 3. Live.sh
  • 参考资料
  • 本文基于FFmpeg编写脚本文件,实现在Linux系统中直播推流的作用,可在B站、抖音、YouTube等视频平台直播

    Install Screen

    • Debian/Ubuntu(基于apt包管理器):
    1
    sudo apt-get update sudo apt-get install screen
    • Fedora/RHEL/CentOS(基于dnf或yum包管理器):

      1
      2
      3
      sudo dnf install screen   
      #或者使用
      sudo yum install screen
    • Arch Linux/Manjaro(基于pacman包管理器):

    1
    sudo pacman -Syu screen
    • openSUSE(基于zypper包管理器):
    1
    sudo zypper install screen

    Install FFmpeg

    • Ubuntu:

      1
      sudo apt update sudo apt install ffmpeg
    • Debian

      1
      2
      sudo apt update 
      sudo apt install ffmpeg
    • CentOS

      1
      2
      sudo yum install epel-release 
      sudo yum install ffmpeg
    • Fedora

      1
      sudo dnf install ffmpeg
    • Arch Linux

      1
      sudo pacman -S ffmpeg
    • openSUSE

      1
      sudo zypper install ffmpeg

    Live.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
    read -p "输入你的视频存放目录 (格式仅支持mp4,并且要绝对路径,例如/opt/video/,路径结尾要接/):" folder
    read -p "输入你的直播菜单名(例如:order):" order

    printf "file '%s'\n" $folder* > $order.txt

    while true

    do

        ffmpeg -re -f concat -safe 0 -i $order.txt -vcodec copy -acodec copy -f flv "${rtmp}"

    done

    Directrly Live Stream

    1
    2
    read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder
    printf "file '%s'\n" $folder* > order.txt
    1
    2
    3
    4
    5
    6
    7
    read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
    while true
    do

        ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}"

    done
    • Entire Edition

      1
      2
      3
      4
      5
      6
      7
      8
      9
      read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder
      printf "file '%s'\n" $folder* > order.txt
      read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
      while true
      do

          ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}"

      done
    • Entire Edition 1.0

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      #!/bin/bash

      # 定义函数
      start_streaming()
      {
      # 获取视频存放目录
      read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/): " folder

      # 生成视频文件列表
      printf "file '%s'\n" "${folder}"* > order.txt

      # 获取推流地址
      read -p "输入你的推流地址和推流码(rtmp协议): " rtmp

      # 开始推流
      while true
      do
      ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}" || break
      done
      }

      # 调用函数
      start_streaming

    • Entire Edition 2.0

      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
      31
      32
      33
      #!/bin/bash

      # 获取视频存放目录
      read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder

      # 检查目录是否存在
      if [ ! -d "$folder" ]; then
      echo "目录不存在,请重新输入!"
      exit 1
      fi

      # 生成视频拼接列表
      printf "file '%s'\n" "$folder"* > order.txt

      # 获取推流地址和推流码
      read -p "输入你的推流地址和推流码(rtmp协议):" rtmp

      # 开始推流
      while true
      do
      # 拼接视频流并推流
      ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}"

      # 检查命令是否执行成功
      if [ $? -ne 0 ]; then
      echo "推流失败,请检查网络连接或推流地址!"
      exit 1
      fi

      # 记录日志
      echo "$(date '+%Y-%m-%d %H:%M:%S') 推流成功!"
      done

    • Entire Edition 3.0

      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
      31
      32
      33
      34
      35
      36
      #!/bin/bash

      # 获取视频存放目录
      read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder

      # 检查目录是否存在
      if [ ! -d "$folder" ]; then
      echo "目录不存在,请重新输入!"
      exit 1
      fi

      # 生成视频拼接列表
      printf "file '%s'\n" "$folder"* > order.txt

      # 获取推流地址和推流码
      read -p "输入你的推流地址和推流码(rtmp协议):" rtmp

      # 开始推流
      while true
      do
      # 拼接视频流并推流
      ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}" \
      -vf "scale=1280:720" \ # 添加视频缩放选项,将视频缩放为1280x720分辨率
      -af "volume=2.0" \ # 添加音频增益选项,将音频增益调整为2倍音量
      -preset fast # 添加编码器选项,使用快速编码器预设

      # 检查命令是否执行成功
      if [ $? -ne 0 ]; then
      echo "推流失败,请检查网络连接或推流地址!"
      exit 1
      fi

      # 记录日志
      echo "$(date '+%Y-%m-%d %H:%M:%S') 推流成功!"
      done

    参考资料