本文介绍: 在直播领域我们经常需要视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文章我们将以视频截图为例讲解如何在AWS Lambda中对m3u8视频流进行截图。因为Lambda是无服务架构,其本地存储是不可靠的,于是最后我们需要截图文件上传S3桶。

直播领域我们经常需要视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文章我们将以视频流截图为例讲解如何在AWS Lambda中对m3u8视频流进行截图。因为Lambda是无服务架构,其本地存储是不可靠的,于是最后我们需要将截图文件上传S3桶。

1 部署有FFmpeg功能的Lambda环境

1.1 部署

这块的方案可以《在AWS Lambda上部署标准FFmpeg工具——自定义层的方案》《在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案》

《在AWS Lambda上部署标准FFmpeg工具——Docker方案》也是可以参考的。但是这个要求代码部署时已经完备,而本例会在后面分析代码,所以本文中不参考这套部署方案

1.2 部署代码

1.2.1 FFmpeg指令

我们使用指令是:

ffmpeg -probesize 32768 -i {m3u8_stream_url} -y -t 0.001 -ss 1 -f image2 -r 1 -

其中*{m3u8_stream_url}*是需要替换视频地址。其参数解析见下:

1.2.2 代码

我们使用Python代码来完成这个功能

import json
import subprocess
import shlex
import boto3
import time

S3_DESTINATION_BUCKET = "inplay-video-image"

def lambda_handler(event, context):

    if not event:
        return {
        'statusCode': 200,
        'body': json.dumps('event is null')
    }
		
    # time.sleep(30) # 如果视频流一开始不用,则需要等待下。或者使用FFmpeg做下视频检测再决定当前时机是否可以截屏
    
	# 截屏
    cmd = "/opt/bin/ffmpeg -probesize 32768 -i {m3u8_stream_url} -y -t 0.001 -ss 1 -f image2 -r 1 -".format(m3u8_stream_url = event.get("m3u8_stream_url"))
    ffmpeg_cmd = shlex.split(cmd)
    ffmpeg_result = subprocess.run(ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
	
	# 上S3桶
    s3_client = boto3.client('s3')
	file_name = "{file_path}/covers.jpeg".format(file_path = event.get('user_id')) # 在在event中我们传递user_id标识不同用户用于用户视频截图保存到S3桶下对应user_id目录
    resp = s3_client.put_object(Body=ffmpeg_result.stdout, Bucket=S3_DESTINATION_BUCKET, Key=file_name) # 上传S3桶

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

2 配置Lambda角色权限

2.1 选择角色类型

在这里插入图片描述

2.2 设置权限

案例为了方便,使用了S3桶的全部权限策略
在这里插入图片描述
如果希望严谨,可以按照下图配置一个策略然后赋予给上述创建角色
在这里插入图片描述

2.3 保存角色

我们将上述创建角色名为lambdaffmpeg-role 。
在这里插入图片描述

2.4 绑定角色

将拥有对S3桶进行操作角色绑定到拥有FFmpeg功能的Lambda上,从而确保图片内容上传S3桶的操作成功
在这里插入图片描述

参考文献

原文地址:https://blog.csdn.net/wujiesunlirong/article/details/134804320

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47776.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注