Python中定时录制在线网页广播有什么成熟的方案?

有一个想法,有没有办法实现,就是用现在买的云主机,定时录制在线网页广播,有没有什么成熟的方案可以用 请各位大佬指导下。


Python中定时录制在线网页广播有什么成熟的方案?
2 回复

对于定时录制在线网页广播,一个成熟的方案是结合 schedule 库进行任务调度,并使用 ffmpegstreamlink 来捕获和录制音频流。下面是一个完整的示例,展示如何定时录制一个已知流媒体地址的广播。

import schedule
import time
import subprocess
import datetime
import os

def record_stream(stream_url, duration_seconds, output_dir="./recordings"):
    """
    录制指定时长的音频流。
    :param stream_url: 音频流的URL
    :param duration_seconds: 录制时长(秒)
    :param output_dir: 输出目录
    """
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)
    
    # 生成基于当前时间的文件名
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    output_file = os.path.join(output_dir, f"recording_{timestamp}.mp3")
    
    # 使用ffmpeg录制流
    # -i 输入流URL
    # -t 录制时长
    # -acodec copy 直接复制音频编解码器(如果流是MP3格式)
    command = [
        'ffmpeg',
        '-i', stream_url,
        '-t', str(duration_seconds),
        '-acodec', 'copy',
        output_file
    ]
    
    try:
        print(f"开始录制: {timestamp}")
        subprocess.run(command, check=True, timeout=duration_seconds + 10)
        print(f"录制完成,保存至: {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"录制过程中出现错误: {e}")
    except subprocess.TimeoutExpired:
        print("录制超时,强制结束")

def job():
    """定时任务:每天上午8点录制5分钟的广播"""
    stream_url = "http://example.com/radio-stream"  # 替换为实际的流媒体URL
    record_stream(stream_url, duration_seconds=300)

# 设置定时任务:每天8:00执行
schedule.every().day.at("08:00").do(job)

print("定时录制任务已启动,等待执行...")

# 保持脚本运行,检查定时任务
while True:
    schedule.run_pending()
    time.sleep(1)

关键点说明:

  1. 流媒体地址:你需要将 stream_url 替换为实际的广播流URL。通常可以在网页源代码或开发者工具的Network标签中找到。
  2. 录制工具:示例使用了 ffmpeg,它是一个强大的多媒体处理工具,支持大多数音频流格式。如果流是HLS或DASH,ffmpeg也能处理。
  3. 定时调度schedule 库提供了简洁的API来设置定时任务,支持分钟、小时、天等周期。
  4. 输出管理:录制文件会按时间戳命名,避免覆盖,并保存在指定目录中。

依赖安装:

pip install schedule
# ffmpeg需要单独安装,可以从官网下载或使用包管理器:
# Ubuntu: sudo apt-get install ffmpeg
# macOS: brew install ffmpeg
# Windows: 从ffmpeg官网下载并添加到环境变量

如果广播流需要认证或具有动态URL,你可能需要先用 requestsselenium 获取最新的流地址。对于复杂的网页交互(如点击播放按钮),selenium 是更可靠的选择。

总结:用 schedule 定时,ffmpeg 录制。


用 cronjob+rtmpdump ?

回到顶部