=====================================================
最簡單的基於FFmpeg的移動端例子系列文章列表:
最簡單的基於FFmpeg的移動端例子:Android HelloWorld
最簡單的基於FFmpeg的移動端例子:Android 視頻解碼器
最簡單的基於FFmpeg的移動端例子:Android 視頻解碼器-單個庫版
最簡單的基於FFmpeg的移動端例子:Android 推流器
最簡單的基於FFmpeg的移動端例子:Android 視頻轉碼器
最簡單的基於FFmpeg的移動端例子附件:Android 自帶播放器
最簡單的基於FFmpeg的移動端例子附件:SDL Android HelloWorld
最簡單的基於FFmpeg的移動端例子:IOS HelloWorld
最簡單的基於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
* [email protected]
* 馬小雨 Ma Xiaoyu
* [email protected]
* 中國傳媒大學/數字電視技術
* 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在手機上運行後的結果如下圖所示。
下載
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
[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平臺的最簡單程序