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

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

最简单的基于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”button之后,程序会依据输入的命令进行转码。

比如对于上述截图的情况。就会将/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平台的最简单程序


转载于:https://www.cnblogs.com/blfbuaa/p/7204950.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php去除英文和标点,php 过滤英文标点符号及过滤中文标点符号代码_php技巧

php 过滤英文标点符号 过滤中文标点符号 代码function filter_mark($text){if(trim($text))return ;$textpreg_replace("/[[:punct:]\s]/", ,$text);$texturlencode($text);$textpreg_replace("/(%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|%2A|%28|%29|%2B|%7C|…

java调用js匿名函数参数,js匿名函数作为函数参数详解

由衷的感叹&#xff0c;js真是烦。学到现在&#xff0c;渐渐理解了什么是&#xff1a;语言都是通用的&#xff0c;没有好不好&#xff0c;只有擅长不擅长。继承&#xff0c;多态&#xff0c;甚至指针&#xff0c;c能实现&#xff0c;c&#xff0c;java有&#xff0c;javascript…

php 顺序结构,顺序存储结构php实现

// php实现顺序存储$arr [1,3];ListInsert($arr, 2, 6);var_dump($arr);$e GetElem($arr, 2);var_dump($e);// 顺序存储结构的插入function ListInsert(Array &$arr, int $i, int $e){$count count($arr);if($i < 1 || $i > $count 1){throw new Exception(‘数据…

PHP_CodeIgniter _remap重新定义方法

如果controller定义了_remap方法&#xff0c; 在_remap中重新定义方法 class Test extends CI_Controller{public function index(){echo "hello world";}//index.php/Test/success/id/1aapublic function _remap($method,$params){if($methodsuccess){$method . 2; …

php20个字,北京人会说不会写的20个字,第一个我就跪了

这20个字你们都会写吗?扽■ 【读音】dn■ 【释义】拉&#xff0c;猛拉&#xff0c;使伸直或平整。■ 【举例】快来人啊&#xff0c;我扽不住他啦!熥■ 【读音】tēng■ 【释义】把已经熟了的食物再加热。■ 【举例】馒头凉了&#xff0c;熥熥再吃。皴■ 【读音】cūn■ 【释义…

EC2的维护更新

&#xfeff;&#xfeff;2014年9月28日 近期几天。我们收到了一些客户关于我们即将进行维护更新的问题。下面是AWS全球Blog网站对这个问题的说明&#xff0c;供客户參照。 我们已经開始通知那些受影响的客户&#xff0c;关于我们即将实施的安全和维护的更新。我们须要在全球范…

matlab写函数进行坐标正反算,基于matlab的坐标正反算

《基于matlab的坐标正反算》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《基于matlab的坐标正反算(6页珍藏版)》请在人人文库网上搜索。1、基于 matlab 的坐标正反算测量程序设计实验报告实验名称 : 坐标正反算实验三坐标正反算一、实验目的编写坐标正反算程序 , 并…

【洛谷2986】【USACO10MAR】伟大的奶牛聚集

题面 题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of course, she would like to choose the most convenient location for the gathering to take place. Each cow lives in one of N (1 < N < 100,000) differ…

工作73:获取id值

this.$route.params,id取值

hdu 5785 Interesting(manacher+前缀和)

题目链接&#xff1a;hdu 5785 Interesting 题意&#xff1a; 有一个长度为n的串&#xff08;n<10^6&#xff09;&#xff0c;对 1 < i < j < k < length(s) . 如果[i&#xff0c;j]和[j1,k]都是回文串。则对答案的贡献为 i*k ,求贡献和。 题解&#xff1a; 详细…

php 获取流文件大小,php获取文件大小详解

本文主要和大家分享php获取文件大小详解&#xff0c;希望能帮助到大家。通过filesize函数可以取得文件的大小&#xff0c;文件大小是以字节数表示的。$filename /data/webroot/usercode/code/resource/test.txt;$size filesize($filename);如果要转换文件大小的单位&#xff…

工作74:vue带参数跳转其他页面

1.准备好两个vue文件 panda.vue travel.vue 2.写index.js配置文件 import travel from /components/travel1{path: /travel/:id,name: 测试页面,component: travel}3.编写跳转前的页面 这是一个点击事件 gettravel(id) {this.$router.push({path: /travel/ id,})}},1234567 …

tomcat学习笔记——lifecycle(容器)启动都干了什么

待写。。。 转载于:https://www.cnblogs.com/zjc-cnblogs/p/7217272.html

整数规划matlab实例,整数规划matlab

整数规划matlabTag内容描述&#xff1a;1、例已知非线性整数规划为max zx12x223x324x422x52-8x1-2x2-3x3-x4-2x5s.t.0xi99,i1,2,5x1x2x3x4x5400x12x22x3x46x58002x1x26x3200x3x45x5200(1)编写M文件mengte.m,定义目标函数f和约束向量函数g&#xff0c;程序如下&#xff1a;funct…