APP后端处理视频的方案

简介: 在当前的app应用中,到处都能看到视频的身影,例如,在社交类的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:

 

 

[java]  view plain copy
 
  1. File source = newFile("source.avi");  
  2. File target = newFile("target.flv");  
  3. AudioAttributes audio = newAudioAttributes();  
  4. audio.setCodec("libmp3lame");  
  5. audio.setBitRate(newInteger(64000));  
  6. audio.setChannels(new Integer(1));  
  7. audio.setSamplingRate(newInteger(22050));  
  8. VideoAttributes video = newVideoAttributes();  
  9. video.setCodec("flv");  
  10. video.setBitRate(newInteger(160000));  
  11. video.setFrameRate(new Integer(15));  
  12. video.setSize(new VideoSize(400,300));  
  13. EncodingAttributes attrs = newEncodingAttributes();  
  14. attrs.setFormat("flv");  
  15. attrs.setAudioAttributes(audio);  
  16. attrs.setVideoAttributes(video);  
  17. Encoder encoder = new Encoder();  
  18. 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/
目录
相关文章
|
3月前
|
芯片
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
|
26天前
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
APP安全加固怎么做?加固技术、加固方法、加固方案
17 3
|
1月前
uni-app 63egg.js后端用户上线和下线深度剖析
uni-app 63egg.js后端用户上线和下线深度剖析
16 1
|
1月前
|
API
uni-app 25后端api开发和前后端交互(51-60)
uni-app 25后端api开发和前后端交互(51-60)
28 2
uni-app 25后端api开发和前后端交互(51-60)
|
2月前
|
SQL 存储 缓存
后端架构优化方案探讨
【2月更文挑战第6天】在当今互联网时代,后端的稳定性和高效性至关重要。本文从数据库设计、服务器负载均衡、缓存策略等方面,探讨了后端架构优化的方案,旨在提供一些实用性的建议。
|
3月前
|
存储 移动开发 安全
如何实现APP安全加固?加固技术、方法和方案
如何实现APP安全加固?加固技术、方法和方案
413 0
|
3月前
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
APP安全加固怎么做?加固技术、加固方法、加固方案
51 0
|
3月前
|
JavaScript Android开发
Cordova APP 无法访问后端接口
Cordova APP 无法访问后端接口
|
4月前
|
Web App开发 Android开发 ice
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
86 1
|
4月前
|
Java 定位技术 Android开发
【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)
【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)
61 1