=====================================================

最简单的基于FFmpeg的移动端例子系列文章列表:

最简单的基于FFmpeg的移动端例子:Android HelloWorld

最简单的基于FFmpeg的移动端例子:Android 视频解码器

最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版

最简单的基于FFmpeg的移动端例子:Android 推流器

最简单的基于FFmpeg的移动端例子:Android 视频转码器

最简单的基于FFmpeg的移动端例子附件:Android 自带播放器

最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld

最简单的基于FFmpeg的移动端例子:IOS HelloWorld

最简单的基于FFmpeg的移动端例子:IOS 视频解码器

最简单的基于FFmpeg的移动端例子:IOS 推流器

最简单的基于FFmpeg的移动端例子:IOS 视频转码器

最简单的基于FFmpeg的移动端例子附件:IOS自带播放器

最简单的基于FFmpeg的移动端例子:Windows Phone HelloWorld

=====================================================

本文记录IOS平台下基于FFmpeg的视频转码器。该转码器实际上移植自ffmpeg工程中的ffmpeg.c源代码。有关ffmpeg.c的源代码可以参考文章《ffmpeg.c函数结构简单分析(画图)》,在这里就不重复记录了。

源代码

项目的目录结构如图所示。

下列C语言文件拷贝自FFmpeg源代码:

cmdutils.c
cmdutils.h
cmdutils_common_opts.h
config.h
ffmpeg.h
ffmpeg_filter.c
ffmpeg_opt.c

此外在编译ffmpeg.c的时候,除了需要FFmpeg SDK中的头文件之外,还需要从源代码中拷贝下面头文件。

libavformat/ffm.h
libavformat/network.h
libavformat/os_support.h
libavformat/url.h
libavutil/libm.h

fmpeg_mod.c是修改后的ffmpeg.c文件。ffmpeg.c本身是用于命令行使用的程序,因此在改为类库调用的时候需要对源代码做一些修改。例如去掉一些exit(0),释放一些变量,main()函数改名为ffmpegmain()等。

Objective-C调用FFmpeg的代码位于ViewController.m文件中,内容如下所示。

/*** 最简单的基于FFmpeg的转码器-IOS* Simplest FFmpeg IOS Transcoder** 雷霄骅 Lei Xiaohua* leixiaohua1020@126.com* 马小雨 Ma Xiaoyu* maxiaoyucuc@163.com* 中国传媒大学/数字电视技术* Communication University of China / Digital TV Technology* http://blog.csdn.net/leixiaohua1020** 本程序是IOS平台下的转码器。它移植于ffmpeg.c命令行工具。** This software is a Transcoder in IOS. It is transplanted from ffmpeg.c* command line tools.*/#import "ViewController.h"
#include "ffmpeg.h"int ffmpegmain(int argc, char **argv);@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}- (IBAction)clickRunButton:(id)sender {char command_str_full[1024]={0};NSString *command_str= [NSString stringWithFormat:@"%@",self.command.text];NSArray *argv_array=[command_str componentsSeparatedByString:(@" ")];int argc=argv_array.count;char** argv=(char**)malloc(sizeof(char*)*argc);for(int i=0;i<argc;i++){argv[i]=(char*)malloc(sizeof(char)*1024);strcpy(argv[i],[[argv_array objectAtIndex:i] UTF8String]);}ffmpegmain(argc, argv);for(int i=0;i<argc;i++)free(argv[i]);free(argv);}
@end

运行结果

App在手机上运行后的结果如下图所示。

单击“Run”按钮之后,程序会根据输入的命令进行转码。例如对于上述截图的情况,就会将/Users/leixiaohua1020/Desktop/test.mp4转码为/Users/leixiaohua1020/Desktop/test.mov。生成的视频文件如下图所示。

下载

simplest ffmpeg mobile

项目主页

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_mobile

开源中国:https://git.oschina.net/leixiaohua1020/simplest_ffmpeg_mobile

SourceForge:https://sourceforge.net/projects/simplestffmpegmobile/

CSDN工程下载地址:http://download.csdn.net/detail/leixiaohua1020/8924391

本解决方案包含了使用FFmpeg在移动端处理多媒体的各种例子:

[Android]
simplest_android_player: 基于安卓接口的视频播放器
simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版
simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具
simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序
[IOS]
simplest_ios_player: 基于IOS接口的视频播放器
simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具

simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序

最简单的基于FFmpeg的移动端例子:IOS 视频转码器相关推荐

  1. Android 最简单的基于FFmpeg的移动端例子:Android HelloWorld

    最简单的基于FFmpeg的移动端例子:Android HelloWorld 转载于:https://www.cnblogs.com/zhujiabin/p/6179199.html

  2. 最简单的基于FFmpeg的移动端例子:Windows Phone HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  3. 最简单的基于FFmpeg的移动端例子附件:IOS自带播放器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  4. 最简单的基于FFmpeg的移动端例子:IOS 视频解码器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  5. 最简单的基于FFmpeg的移动端例子:IOS HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  6. 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  7. 最简单的基于FFmpeg的移动端例子:Android 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  8. 最简单的基于FFmpeg的移动端例子:Android 推流器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  9. 最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

最新文章

  1. Eclipse 用Hibernate Tools 生成 .hbm cfg.xml等文件
  2. swift选择类或结构体
  3. 电网操作:线路、主变、母线操作讲解
  4. XMPP协议简单介绍
  5. 01tire+洛谷P4551 最长异或路径
  6. 使用get set方法添减属性_头皮银屑病“克星”使用方法,你GET了吗?
  7. 智能风控中的全场景化的模型组合包括哪些内容
  8. tomcat的acceptCount、maxThreads、connectionTimeout参数调整
  9. 【Shell】for循环
  10. 如何解决 MacBook Pro Touch ID不起作用?
  11. 数字图像处理(MATLAB)(第三版) 冈萨雷斯 中的matlab附录代码工具箱
  12. 博客园9月份第3周51Aspx源码发布详情
  13. 【js练习】简易聊天室
  14. SpringBoot第二特性:Starter启动依赖_01_自己动手写一个Starter组件
  15. 小米无线路由器服务器用户名和密码忘了,小米路由器无线密码(wifi密码)忘记了怎么办? | 192路由网...
  16. oracle 临时表空间语句,oracle的临时表空间
  17. 2020手机CPU性能天梯图
  18. linux系统下搜索文件,Linux系统下搜索文件的方法
  19. rust多行字符串字面量
  20. c语言里函数rand()和srand()的用法

热门文章

  1. HDU2026 首字母变大写【文本处理】
  2. UVA516 POJ1365 LA5533 ZOJ1261 Prime Land【欧拉筛法】
  3. Bailian3711 字符串移位包含问题【字符串循环匹配】(POJ NOI0107-19)
  4. Bailian2766 最大子矩阵【最大子段和+DP】
  5. HDU2551 竹青遍野【数学计算+水题】
  6. POJ NOI MATH-7654 等差数列末项计算
  7. 影响历史进程的三只苹果
  8. 算法 Tricks(四)—— 判断序列中的字符/数值是否交替出现
  9. FTRL —— cross entropy 的导数
  10. 深度学习基础(八)—— 稀疏自编码器