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%的资源。
后端要快速地处理视频,需要高性能的服务器集群,但是,对于创业型公司来说,这点支出是非常不合算的。因此,可充分运用云服务,例如,七牛提供的服务就包含音视频格式的转换,调用非常方便。
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 由于演讲时间有限,有关Redis-Cluster,演讲者没做太多介绍,简单的介绍了一些Redis-Cluster概念作用和遇到的两个问题,我们在Redis-Cluster也有很多运维经验,将来的文章会介绍。 但是讲演者反复强调,不要听信网上对于Redis-Cluster的毁谤(实践出真知),对于这一点我很赞同,我们从Redis-Cluster beta版 RC1~4 到现在的3.0-release均没有遇到什么大问题(线上维护600个实例)。 一、Redis-Cluster 有关Redis-Cluster的详细介绍有很多这里就不多说了,可以参考: 1.redis-cluster研究和使用 2. Redis Cluster 3.0.5集群实践 3. 本博客的一些Redis-Cluster的介绍(未更新完毕) 4. Redis设计与实现那本书(作者:黄建宏):非常的推荐看这本书。 总之Redis-Cluster是一个无中心的分布式Redis存储架构,解决了Redis高可用、可扩展等问题。...
- 下一篇
基于Google云存储的开放Maven镜像中央仓库
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/49871715 基于Google云存储的开放Maven镜像中央仓库 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Takari公司,http://takari.io/,也即Maven创始人Jason van Zyl创建的公司,最近宣布在Google Cloud Storage上建立了Maven镜像仓库,开放给全球所有的开发者使用。主流的依赖管理工具如Maven、Apache Ivy、Gradle等都可以使用此中央仓库。 Maven中央仓库时Java社区最重要的资源之一,离开Maven仓库做Java项目开发则难以想象。 Google云存储(Google Cloud Storage)允许用户在其云基础设施上存储无限容量的数据,这些基础设施是称为桶(Bucket)的容器,Google声称它有超快的性能、可靠性极好、以及高可用性,可以用于做Web应用的托管、文...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块