aws ffmpeg+ lambda来完成视频stream的截图 python 版

这篇具有很好参考价值的文章主要介绍了aws ffmpeg+ lambda来完成视频stream的截图 python 版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何使用aws 的serverless 的lambda 来实现ffmpeg的截图

## 描述:
	业务需求在aws云上面实现直播,随机截取直播流进行截图,上传到S3桶里面去。
	业务其实很简单,难点是在如何在serverless的lambda来部署ffmpeg,因为lambda的无状态特性,所以我们无法直接在lambda上安装ffmpeg的安装包。
这就让我们在aws的lambda上部署ffmpeg变的困难起来,但是方法总比困难多,我有两个解决方案:
1. 通过docker 部署到aws 的lambda 
2. 通过自定义层的方法部署到lambda
今天这里我只讲第二种方法,因为第二种方法及其的简单高效,还可以看到自己写的代码,比docker友好很多,本篇文章分两段前面一段是用来介绍如何用lambda搭建ffmpeg,后面一段是用来用来介绍ffmpeg如果截取视频流。

通过自定义层的方式来部署ffmpeg到lambda

准备事项:
  1. 准备一台与lambda系统相同的ec2(临时使用用完就可以delete掉了)
  2. 创建一个lambda用的layer
  3. 创建一个lambda

1.准备一台与lambda系统相同的ec2

aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
上图是与lambda版本相同的linux系统

这台ec2是用来下载ffmpeg,解压重新压缩ffmpeg,是为lambda准备ffmpeg层的,这些任务结束后这个ec2就可以删除掉了

上命令:

这4条命令是用来下载ffmpeg和使用md5来检查文件和解压ffmpeg安装包

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz.md5
md5sum -c ffmpeg-release-amd64-static.tar.xz.md5
tar xvf ffmpeg-release-amd64-static.tar.xz

FFmpeg 二进制文件位于文件夹“ffmpeg-4.3.1-amd64-static”中
为 Lambda 层创建一个 ZIP 包,如下所示:

mkdir -p ffmpeg/bin
cp ffmpeg-4.3.1-amd64-static/ffmpeg ffmpeg/bin/
cd ffmpeg
zip -r ../ffmpeg.zip .

好!我们可以通过WinSCP讲ffmpeg.zip下载到本地或通过aws cli 上传到指定的s3中

2.创建lambda的layer

aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
填写完名称和描述,上传我们压缩好的ffmpeg.zip文件,选择兼容运行的version,层的许可证避免被函
好那么我们的最重要的一点层就创建出来了。

3.创建一个lambda函数

创建一个lambda函数来运行我们和ffmpeg相关的代码
1). 创建一个lambda函数
aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
2.绑定我们在第一步创建的lambda layer
aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
3. build我们的代码到指定的lambda函数上面
aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
好!到此我们的lambda部署ffmpeg的步骤就全部说完了,我们接下来介绍一下我们是如何实现截取直播流截图的

通过lambda + ffmpeg 来实现视频流截图

    我们的直播途径是aws ivs(Amazon Interactive Video Service),不的不说这是一个非常快的来实现直播的一种方案,当我们开始直播的时候
ivs会给我们一个m3u8的直播连接。这时候我们可以通ffmpeg来读取直播stream,获取stream里面的指定/随机的一帧进行截图。
下面是一个简单直播的架构图:

aws s3 视频截帧,ffmpeg,aws,aws,音视频,云计算
在这里插入图片描述接下来我就简单的介绍一下这个简单的架构图
cloudfront: CND 全球边缘站点用于缓存直播图片等信息
api gateway: 他可以使我们通过internet 对lambda中的api 进行访问
vpc: 我们的所有服务都在aws的vpc下进行部署
video_lambda: 直播api 应用层lambda 用于调用ivs负责 用户登录注册,ivs开播、下播,数据的存储
ffmpeg_lambda: 开播后负责对直播stream进行截图
factor_lambda: 对图片进行动态的分辨率的改变

    今天我们讲的就是inplay_ffmpeg这个lambda,这个lambda的视频流url是通过lambda的event来传递给该lambda的,该lambda获取到event中的url
会通过ffmpeg对视频流进行截图,下面我们介绍一下ffmpeg命令
/opt/bin/ffmpeg -probesize 32768 -i {pull_stream_url} -y -t 0.001 -ss 1 -f image2 -r 1 -
/opt/bin/ffmpeg :是ffmpeg的执行开头,为什么要加opt/bin呢,是因为在lambda中我们的执行package在 /opt/bin文件夹下面的
-probesize 32768:以字节为单位设置探测大小,即分析获取流信息的数据大小
-i: 输入
-y: 无需询问即可覆盖输出文件
-t: 当用作输入选项(之前-i)时,限制从输入文件读取数据 的持续时间。我这里设置的是0.001秒
-ss:开始时间。
-f:强制输入或输出文件格式。 
image2: 图像文件解复用器。
-r:  提取图像的频率
-: 输出

以上命令的意思是当ffmpeg获取到m3u8的视频stream链接的时候通过我设定的开始时间和截取频率对stream进行截图并按照指定的格式进行输出,最后获取到stream上传到s3桶里面。
code 如下:

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0 (https://spdx.org/licenses/MIT-0.html)

import json
import os
import subprocess
import shlex
import boto3
import time

S3_DESTINATION_BUCKET = "inplay-video-image"

def lambda_handler(event, context):

    if not event:
        print("event is null")
        return False
    time.sleep(30)
    s3_client = boto3.client('s3')
    file_name = "{file_path}/covers.jpeg".format(file_path = event.get('user_id'))

    ffmpeg_cmd = "/opt/bin/ffmpeg -probesize 32768 -i {pull_stream_url} -y -t 0.001 -ss 1 -f image2 -r 1 -".format(pull_stream_url = event.get("pull_stream_url"))
    print(ffmpeg_cmd)
    command1 = shlex.split(ffmpeg_cmd)
    p1 = subprocess.run(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print(p1.stdout)
    resp = s3_client.put_object(Body=p1.stdout, Bucket=S3_DESTINATION_BUCKET, Key=file_name)

    return {
        'statusCode': 200,
        'body': json.dumps('Processing complete successfully')
    }

这种方案并不是唯一的解决方案,所以并不是绝对正确的,这个文章主要讲如何用lambda + ffmpeg 快速部署一个具有ffmpeg层的lambda 来实现serverless的一种方法。文章来源地址https://www.toymoban.com/news/detail-832344.html

到了这里,关于aws ffmpeg+ lambda来完成视频stream的截图 python 版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 将AWS iot消息数据发送Kinesis Firehose Stream存向S3

    观看此文章之前,请先学习AWS iot的数据收集: 使用Linux SDK客户端向AWS Iot发送数据-CSDN博客 1.1 规则 规则可让您的设备与 AWS 服务进行交互。分析规则并根据物品发送的消息执行操作。您可以使用规则来支持任务,例如补充或筛选从设备接收的数据。 1.2 目的地 目的地是定义规

    2024年01月25日
    浏览(40)
  • python botos s3 aws

    https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html AWS是亚马逊的云服务,其提供了非常丰富的套件,以及支持多种语言的SDK/API。 本文针对其S3云储存服务的Python SDK(boto3)的使用进行介绍。 :AWS,S3,Python,boto3,endpoint,client AWS是一整套亚马逊云服务套

    2024年04月15日
    浏览(33)
  • Python文件上传 S3(AWS) 简单实现

    建立aws账户,进入到S3界面  点击 \\\"Create bucket\\\" 一系列操作之后——这里给bucket命名为csfyp python需要先: 这两个包含一些连接python和s3 连接的api 然后直接上代码

    2024年02月03日
    浏览(51)
  • Opencv+ffmpeg摄像头视频处理(还在完成中)

    最近在搞qt监控软件的需求,经查资料发现可以通过opencv来实现图像的处理,先将opencv以及相关事件做一记录。 下图是本设计中关于C/S交互分布图,暂做记录 greenBambooMonitoring_20230202 opencv 读取视频帧cpu占用很高 Mat 图像的存储容器。 完成一个video设备录像的关键步骤 打开vid

    2023年04月23日
    浏览(45)
  • ESP32-CAM 使用 MicroPython 完成视频网络服务器 (Web Video Stream)

    ESP32-CAM 是安信可发布小尺寸的摄像头模组。该模块可以作为最小系统独立工作,尺寸仅为2740.54.5mm。 ESP32-CAM可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、人脸识别以及其它物联网应用,是物联网应用的理想解决方案。 ESP32-CAM采用DIP封装,

    2024年02月13日
    浏览(39)
  • 用Qt开发的ffmpeg流媒体播放器,支持截图、录像,支持音视频播放,支持本地文件播放、网络流播放

    本工程qt用的版本是5.8-32位,ffmpeg用的版本是较新的5.1版本。它支持TCP或UDP方式拉取实时流,实时流我采用的是监控摄像头的RTSP流。音频播放采用的是QAudioOutput,视频经ffmpeg解码并由YUV转RGB后是在QOpenGLWidget下进行渲染显示。本工程的代码有注释,可以通过本博客查看代码或者

    2024年02月03日
    浏览(97)
  • 基于WebCodecs的网页端高性能视频截帧

    web投稿页是B站的主要投稿来源,有很多高粉UP主使用web端进行投稿。 封面部分是投稿过程中耗时占比较高的步骤,因此在过去,web投稿页已上线了自动的封面截取推荐功能,有效提升了用户体验。同时在此过程中有了一定的技术积累。 自动封面功能依赖于对用户上传视频进

    2024年02月21日
    浏览(44)
  • Linux下搭建安防视频监控系统(NGINX+ffmpeg完成整体项目开发)

    Linux系统下搭建搭建RTMP流媒体服务器(完成推流、拉流、回放、转流等功能) 在Linux(ubuntu18.04 64位)下利用NGINX搭建RTMP流媒体服务器,完成视频推流上传、拉流播放、视频缓存,回放功能,HLS-HTTP协议支持(浏览器可以直接播放). 本篇文章教大家完成6件事: (1)购买ECS云服务器

    2024年02月03日
    浏览(43)
  • ios中关于video标签poster属性兼容问题(ios视频截帧)

    需求如下 移动端h5页面(微信浏览器下)需要上传视频并回显封面,用户点击中间的播放三角可以进行视频的预览;问题就出现在ios手机上使用video的poster属性并不能显示出视频封面,而安卓手机可以正常显示视频的第一帧; 效果图 问题分析: 在ios系统中有个保护机制, 如果

    2024年02月05日
    浏览(48)
  • 【AWS系列】第八讲:AWS Serverless之S3

    目录 序言 1.基础介绍 1.1 概念介绍 1.2 原理介绍 1.3 应用场景 1.3.1 构建数据湖 1.3.2 备份和还原关键数据 1.3.3 以最低成本存档数据 1.3.4 运行云原生应用程序 1.4 S3 的功能 1.4.1 存储类 1.4.2 存储管理 1.4.3 访问管理 2 使用方法 2.1 创建存储桶 ​2.2 配置 CORS 规则 3 投票 三言两

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包