APP后端处理视频的方案
在当前的app应用中,到处都能看到视频的身影,例如,在社交类的app上,用户可以拍摄属于自己的小视频,并发布到相应得栏目,增加和好友们互动的机会。
后台常见的视频处理有以下几种:
· 视频的截图,很多视频列表上显示的一张图片,这张图片就是通过截取视频的某一帧(通常是第一帧)得到的。
· 视频加水印,出于版权保护的目的,需要添加水印。
· 视频转码,允许用户上传手机上的视频,并转换为app后端支持的格式。
视频的处理对于大多数程序员来说是个很陌生的领域, 这里介绍一个视频处理最常用的工具:ffmpeg。
(1)ffmpeg简介
Ffmpeg的官网(http://ffmpeg.org/)是这样介绍的:Acomplete, cross-platform solution to record, convert and stream audio and video。一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
Ffmpeg是个跨平台的软件,可以在linux下使用,也可以在window,mac下使用。
这个项目最早由FabriceBellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
著名的播放器KMPlayer, 暴风影音,qq影音,都曾经使用过ffmpeg的代码。国内的七牛云存储,音视频处理的核心模块也是ffmpeg。
Ffmpeg可以实现的功能有:
l 视频采集
l 音视频格式转换
l 视频抓图
l 给视频加水印
FFmpeg主要由一下几个部分组成:
libavcodec:包含了所有FFmpeg音视频编解码器的库。 为了保证最优性能和高可复用性,大多数编解码器从头开发的。
libavformat:包含了所有的普通音视格式的解析器和 产生器的库。
三个实例程序:
ffmpeg:命令行的视频格式转换程序(一般就直接调用这个文件)
ffplay:视频播放程序。(需要SDL支持)
ffserver:多媒体服务器
(2)程序调用ffmpeg的功能
使用ffmpeg的进行视频转换很简单,例如,把avi转换为MP4,使用命令行:
ffmpeg -i source.avi -f psp -r 29.97-b 768k -ar 24000 -ab
64k -s 320×240 destination.mp4
那么,在后台语言中,应该怎么调用ffmpeg进行格式转换呢?
一个常见的思路,就用通过构造命令行的方式,把上面命令行构造出来,然后在后台语言中调用ffmpeg执行文件。
有个java调用ffmpeg开源项目 jave (主页:http://www.sauronsoftware.it/projects/jave/)就是这样实现的。
例如,下面的例子是avi转换成flv:
- File source = newFile("source.avi");
- File target = newFile("target.flv");
- AudioAttributes audio = newAudioAttributes();
- audio.setCodec("libmp3lame");
- audio.setBitRate(newInteger(64000));
- audio.setChannels(new Integer(1));
- audio.setSamplingRate(newInteger(22050));
- VideoAttributes video = newVideoAttributes();
- video.setCodec("flv");
- video.setBitRate(newInteger(160000));
- video.setFrameRate(new Integer(15));
- video.setSize(new VideoSize(400,300));
- EncodingAttributes attrs = newEncodingAttributes();
- attrs.setFormat("flv");
- attrs.setAudioAttributes(audio);
- attrs.setVideoAttributes(video);
- Encoder encoder = new Encoder();
- encoder.encode(source,target, attrs);
通过类AudioAttributes和VideoAttributes设置了相关的参数,在类Encoder中把这些参数构造成命令行执行FFmpeg相关的命令。
注意了,视频音频相关的操作一般都是非常耗费CPU资源,例如上面的例子,在avi转换成flv的过程中,系统的相关资源状况如下:
从上图可看出,ffmpeg就占用了CPU差不多90%的资源。
后端要快速地处理视频,需要高性能的服务器集群,但是,对于创业型公司来说,这点支出是非常不合算的。因此,可充分运用云服务,例如,七牛提供的服务就包含音视频格式的转换,调用非常方便。
APP后端处理视频的方案的更多相关文章
- 33.APP后端处理视频的方案
在当前的app应用中,到处都能看到视频的身影,例如,在社交类的app上,用户可以拍摄属于自己的小视频,并发布到相应得栏目,增加和好友们互动的机会. 后台常见的视频处理有以下几种: · ...
- app后端设计--总目录 (转)
特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...
- app后端设计--总目录
做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...
- [置顶] app后端设计--总目录
版权声明:本文为博主原创文章,未经博主允许不得转载. 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,Android客户端,iphone客户端,现就职于app云后 ...
- 15.app后端怎么设计用户登录方案
在很多app中,都需要用户的登录操作.登录,就需要用到用户名和密码.为了安全起见,暴露明文密码的次数越少越好.怎么能最大程度避免泄露用户的密码呢?在登录后,app后端怎么去验证和维持用户的登录状态呢? ...
- **15.app后端怎么设计用户登录方案(API权限安全)
在很多app中,都需要用户的登录操作.登录,就需要用到用户名和密码.为了安全起见,暴露明文密码的次数越少越好.怎么能最大程度避免泄露用户的密码呢?在登录后,app后端怎么去验证和维持用户的登录状态呢? ...
- PHP开发 高可用 高安全App后端(免费)
PHP开发高可用高安全App后端 第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章 本章主要讲解课程的一些准备 ...
- PHP开发高可用高安全App后端☆
第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章本章主要讲解课程的一些准备工作知识.包括工具.环境.模板等. ...
- app 后端技术
app 后端技术 一直以来工作的方向是web server,对app server没有什么了解.虽然没有接触过移动app开发,但对app后端技术还是挺有探索欲望的,app应用和web应用在前端的用户习 ...
随机推荐
- CSV解析
NSString *path = [[NSBundle mainBundle] pathForResource: @"type" ofType:@"csv"]; ...
- 安装nginx的一些注意事项
1.如何彻底屏蔽掉Nginx的banner 为了安全或者某些个人的原因,如果要屏蔽掉nginx的banner,要修改以下几个位置: src/http/ngx_http_header_filter_mo ...
- Elasticsearch 插入地理索引文档一直为空
今天在获取插入索引数据的时候,一直提示插入不成功,尝试了很多方法,原来是因为在插入的时候应该先 插入Latitude后插入longitude修改后的代码如下 public boolean insert ...
- 推荐一个以动画效果显示github提交记录的黑科技工具:Gource
程序员每天都会使用到git的一系列命令.其中用git log命令可以查看提交历史记录: 今天Jerry给大家推荐一款视觉效果非常酷炫的工具,名叫Gource,是一个能够将git代码仓库的提交历史以动画 ...
- 11G RAC环境数据库启动和关闭
一步启动Oracle (1) 启动整个集群 # ./crsctl start cluster -all -all选项启动整个集群. 不加-all选项只能启动本节点的服务. (2) 启动本节点集群 以下 ...
- type和isinstance区别
type只能对类型做直接的判断,主要用于获取未知变量的类型. 在程序中几乎很少用到type. 而isinstance功能比type更强,可以对子类型做出推理判断. isinstance主要用于判断A是 ...
- uva1336 Fixing the Great Wall
用到了kase避免memset超时 #include<cstdio> #include<cstring> #include<cmath> #include<a ...
- poptip 外面 放 input 使用 iview vue
外层套的是 <FormItem prop="name" label="姓名:"> <Input v-model="tFill.nam ...
- 【软件构造】第三章第四节 面向对象编程OOP
第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...
- [BZOJ3940]:[Usaco2015 Feb]Censoring(AC自动机)
题目传送门 题目描述: FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过105的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1…tN.他希望从S中删除这些单词.FJ每次在S中 ...