吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6074|回复: 94
收起左侧

[Python 原创] 利用python+ffmpeg实现24小时无人值守直播

    [复制链接]
zhengduimen 发表于 2024-7-22 10:08
本帖最后由 zhengduimen 于 2024-12-3 09:43 编辑

步骤1、可以是自己电脑、最好是闲置的云服务器;
2、安装python3,具体过程不做赘述,搜索方案很多;注:如为云服务器安装的版本或许是python2,目测是不大支持直接卸载安装python3;
3、ffmpeg官网,自行选择对应的系统下载编译安装  这里不同的系统可能会遇到各种问题,这里是详细的安装过程,但每个人遇到的情况不同,自行借助搜索引擎解决 安装编译的东西比较多,这一步应该是最难的,搞定之后一路畅通;
4、安装完ffmpeg之后 验证,出现下方即为成功
$ ffmpeg -version
ffmpeg version N-102343-g4d3474432f Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44)
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs=-lpthread --extra-libs=-lm --bindir=/root/bin --enable-gpl --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
libavutil      57.  0.100 / 57.  0.100
libavcodec     59.  0.100 / 59.  0.100
libavformat    59.  0.100 / 59.  0.100
libavdevice    59.  0.100 / 59.  0.100
libavfilter     8.  0.101 /  8.  0.101
libswscale      6.  0.100 /  6.  0.100
libswresample   4.  0.

5、当ffmpeg安装编译成功之后,以我的服务器举例
cd home
之后创建 任意目录 内部创建一个 存放视频的 目录
例如 home 下 创建videoList
下面是我服务器上的:

[root@iZ0jlcmvdsbq3c2pzlpt2oZ home]# cd huya

[root@iZ0jlcmvdsbq3c2pzlpt2oZ huya]# ls

huya_live.py  nohup.out  videoList

[root@iZ0jlcmvdsbq3c2pzlpt2oZ huya]# pwd

/home/huya
6、直播推流脚本 live.py
import os
import subprocess
import time
import re  # 导入正则表达式模块
push_url = "rtmp://a.rtmp.youtube.com/live2/8hb5-8vze-gpf7-rk0t-dmeh" // 这里拿虎牙举例 ,需要自身是主播 ,在网页端 主播设置中 获取推流地址 ;
video_dir = "/Users/ljj/Downloads/fanqie/video" // 这里 就是视频路径地址 ,这个地址要跟自己创建的 视频目录完全一致
def natural_sort_key(s):
    # 从文件名中提取数字 -- 这里是按照视频中的 数字进行排序 所以 请注意 保证视频中有索引 例如 完美世界1.mp4   ,1代表第一集 ;当然这个是为了保证剧集多的情况下不乱,当播放的是电影的时候 无所谓,随意处理就行;
    numbers = [int(text) for text in re.findall(r'\d+', s)]
    # 如果没有数字,则返回一个非常大的负数
    if not numbers:
        return float('-inf')
    # 返回数字列表的第一个元素用于排序
    return numbers[0]
while True:
    video_list = sorted(os.listdir(video_dir), key=natural_sort_key)
    for video_file in video_list:
        video_path = os.path.join(video_dir, video_file)
        print(f"Processing file: {video_path}")  # 打印正在处理的文件
        cmd = f"ffmpeg -re -i \"{video_path}\" -vcodec copy -acodec copy -f flv '{push_url}'"
        # ffmpeg -loglevel debug -re -i "/Users/ljj/Downloads/fanqie/video/1.mp4" -vcodec copy -acodec copy -f flv "rtmp://a.rtmp.youtube.com/live2/8hb5-8vze-gpf7-rk0t-dmeh"
        print(f"Running command: {cmd}")  # 打印FFmpeg命令
        subprocess.call(cmd, shell=True)
    time.sleep(0.1)


7、将 live.py 存放到刚才创建的与视频目录平级的地址 当然这个不是硬性能找到即可;
8、如何启动推流 :python3 live.py  这个可以启动测试 窗口关掉 则推流断掉;
9、当测试完毕:nohup python3 live_stream.py & 这时候 就可以关掉 命令窗口 无人值守直播 启动完毕;
10、完整的说明描述:https://blog.csdn.net/u014449096/article/details/140034518?spm=1001.2014.3001.5501   
11、演示地址,不保证随时能用,因为我可能会停掉或者切换推流地址:https://www.huya.com/15732718



本地直播推流可执行软件下载:
移除下载链接,没必要用这个,跑一下代码就起来了,这部分代码不多。



免费评分

参与人数 7吾爱币 +13 热心值 +6 收起 理由
jie5201055 + 1 + 1 我很赞同!
angelmean120 + 1 + 1 我很赞同!
guoruihotel + 1 + 1 谢谢@Thanks!
zhuzi77 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
a5436539 + 1 我很赞同!
cm26408 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaomingtt 发表于 2024-8-2 15:47
树莓派上弄好了。树莓派4B,安装最新树莓派OS,自带python3和ffmpeg,代码基本拿过来就能用。
[Python] 纯文本查看 复制代码
import os
import subprocess
import time
import re

push_url = "rtmp://tx.direct.huya.com/huyalive/1299644932728-1299644932728-0-2399289286892-10057-A-1722472914-1?seq=1722472915126&type=simple"
video_dir = "/home/lee/Desktop/video"

def natural_sort_key(s):
    numbers = [int(text) for text in re.findall(r'\d+', s)]
    if not numbers:
        return float('-inf')
    return numbers[0]

while True:
    video_list = sorted(os.listdir(video_dir), key=natural_sort_key)
    for video_file in video_list:
        video_path = os.path.join(video_dir, video_file)
        print(f"Processing file: {video_path}")
        cmd = f"ffmpeg -re -i \"{video_path}\" -c:v libx264 -preset fast -c:a aac -strict -2 -f flv \"{push_url}\""
        print(f"Running command: {cmd}")
        subprocess.call(cmd, shell=True)
    time.sleep(0.1)


一起来练八段锦:珂珂酷酷其他直播直播_珂珂酷酷视频直播 - 虎牙直播 (huya.com)

另外树莓派上连接了带麦克风的USB摄像头,修改一下ffmpeg命令就可以实现摄像头直播。
摄像头视频直播,无音频:
[Asm] 纯文本查看 复制代码
ffmpeg -f v4l2 -i /dev/video0 -r 15 -s 1280x720 \
       -vcodec libx264 -preset veryfast -maxrate 1500k -bufsize 3000k \
       -g 30 -keyint_min 30 -sc_threshold 0 -profile:v main -level 3.1 \
       -pix_fmt yuv420p -f flv '推流地址'

摄像头音视频直播:
[Asm] 纯文本查看 复制代码
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default -r 15 -s 1280x720 \
       -vcodec libx264 -preset veryfast -maxrate 1500k -bufsize 3000k \
       -g 30 -keyint_min 30 -sc_threshold 0 -profile:v main -level 3.1 \
       -pix_fmt yuv420p -acodec aac -strict -2 -ar 44100 \
       -f flv '推流地址'


还是上面的连接,有缘就可以看到我上班摸鱼的画面。
 楼主| zhengduimen 发表于 2024-7-31 13:44
树下彩虹025 发表于 2024-7-31 13:30
不错,特地去虎牙看了。播放的视频必须是本地视频吗?可以转发第三方视频吗?比如放在其他储存服务器或者网 ...

转发 似乎也可以做 不过 估计得改代码。
H721 发表于 2024-7-22 10:50
xiaomiKO 发表于 2024-7-22 10:50
会被判定无人直播吗
sdieedu 发表于 2024-7-22 10:51
这个厉害啊
bypassYing 发表于 2024-7-22 11:07

这个厉害啊 跟随大佬的脚步
 楼主| zhengduimen 发表于 2024-7-22 11:15
xiaomiKO 发表于 2024-7-22 10:50
会被判定无人直播吗

虎牙,斗鱼 、b站本就支持 无人直播 ,其他平台 我没试。
 楼主| zhengduimen 发表于 2024-7-22 11:19
ffmpeg官网 追加的 连接 没了  ,这是官网 下载地址 :https://www.ffmpeg.org/download.html   
https://blog.csdn.net/u014449096/article/details/140034518?spm=1001.2014.3001.5501  这个上半部分 有如何编译ffmpeg的方法,具体编译情况还是要跟自己服务器环境有关。出现问题博客上没有的话,需要自行检索处理方案
huancaixi 发表于 2024-7-22 11:23
抖音可以吗
yuanshang000 发表于 2024-7-22 11:26
感谢分享
 楼主| zhengduimen 发表于 2024-7-22 11:38

抖音 不够1000粉 没试 ;但理论上是可以的 ,只要获取正确的rtmp地址就没问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 11:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表