FFmpeg被广泛应用于音/视频流处理领域。对于简单需求我们可以直接运行FFmpeg二进制程序命令可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发文本讨论的是在AWS无服务架构的Lambda上,如何通过自定义部署FFmpeg二进制程序。

1 确定Lambda运行时环境

Lambda运行时决定了其运行的CPU架构操作系统辅助软件不同语言的运行时环境不同相同语言不同版本的运行时不同,所以这步的确认非常重要,否则会造成FFmpeg与Lambda不兼容问题。下面是从AWS官方摘录了运行时信息,仅供参考

1.1 Lambda系统镜像内核版本

系统 镜像 Linux 内核
Amazon Linux 镜像amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2 4.14
Amazon Linux 2 定义 4.14

1.2 运行时

1.2.1 Python

Python 运行时 标识符 AWS Python软件工具包 操作系统 架构
Python 3.9 python3.9 boto3-1.20.32 botocore-1.23.32 Amazon Linux 2 x86_64,arm64
Python 3.8 python3.8 boto3-1.20.32 botocore-1.23.32 Amazon Linux 2 x86_64,arm64
Python 3.7 python3.7 boto3-1.20.32 botocore-1.23.32 Amazon Linux x86_64
Python 3.6 python3.6 boto3-1.20.32 botocore-1.23.32 Amazon Linux x86_64

1.2.2 Java

Java 运行时 标识符 JDK 作系统 架构
Java 11 java11 amazoncorretto-11 Amazon Linux 2 x86_64,arm64
Java 8 java8.al2 amazoncorretto-11 Amazon Linux 2 x86_64,arm64
Java 8 java8 amazoncorretto-11 Amazon Linux x86_64

本例使用Python3.9版本,其操作系统是Amazon Linux 2,Linux内核是“4.14”,架构是“x86_64,arm64”。在这两种CPU架构中,我们选择适用面更广的x86_64。如果选择arm64,后续FFmpeg选择,以及Lambda函数运行时也要做出相应调整。

2 打包FFmpeg

FFmpeg官网的下载页面可以找到Linux Static Builds”。这个链接下的编译结果支持Linux内核3.2.0版本以上的系统,我们只要选择相应的架构就行了。
在上一步中,我们选择了x86_64,对应的是amd64的FFmpeg。至于为什么是这样的对应关系可以参见维基百科的内容。总体来说,就是一个是AMD取得名字一个是Intel取得名字

x86-64(又称x64,即英文词64-bit extended,64位拓展简写)是一个处理器指令集架构,基于x86架构的64位拓展,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩展给x86,称为“AMD64”。其后也为英特尔采用,现时英特尔称之为“Intel 64”,在之前曾使用过“Clackamas Technology” (CT)、“IA-32e”及“EM64T”。
苹果公司和RPM包管理员以“x86-64”或“x86_64”称呼此64位架构。甲骨文公司及Microsoft称之为“x64”。BSD家族及其他Linux发行版使用amd64”,32位版本则称为“i386”(或 i486/586/686),Arch Linux及其派生发行版用x86_64称呼此64位架构。

将对应的包下载下来

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

打包成AWS Lambda的层可以接受的包格式zip(特别需要注意目录层级关系

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

3 创建Lambda的Layer

由于FFmpeg的包不是很大,我们可以直接通过本地文件上传方式提交层的内容。
时要选择好与上步下载的FFmpeg相同架构的“x86_64”。由于从Python3.6到Python3.9都支持x86_64架构,所以这个层可以给这些版本的Python使用
最后注意下,在License填写http://www.ffmpeg.org/legal.html,以确保许可
在这里插入图片描述

4 测试

4.1 创建Lambda函数

选择用于上述创建层的运行时环境(Python3.9)和架构(x86_64)
在这里插入图片描述

4.2 附加FFmpeg

在这里插入图片描述
在这里插入图片描述

4.3 添加测试代码

下面的代码通过查询FFmpeg版本号,以测试上述部署可行性

import subprocess
import shlex

def lambda_handler(event, context):
    if not event:
        return {
            'statusCode': 400,
            'body': json.dumps('event error')
        }
        
    ffmpeg_cmd = "/opt/bin/ffmpeg -version"
    command = shlex.split(ffmpeg_cmd)
    p = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return {
        'statusCode': 200,
        'body': str(p.stdout, encoding='utf-8')
    }

4.4 运行测试

在这里插入图片描述
可以看到上述部署成功的。

参考文献

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

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

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

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

发表回复

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