2013-01-09 116 views
3

这是一个初学者的问题,因为我是iOS新手(我今天开始),所以请原谅我的无知和缺乏iOS知识。如何将命令行参数传递给iOS中的FFMpeg

在构建并成功使用FFMpeg for Android之后,我想对iOS做同样的事情。 所以我成功地为iOS构建了FFMpeg,通过以下这个link,但是在经历了所有这些让我感到困惑的是如何在iOS中使用FFMpeg,我的意思是如何将命令行参数传递给libffmpeg.a文件?

我假设必须有一种方法来将.a文件作为可执行文件运行,然后传递命令行参数并希望FFMpeg能够做到这一点,我在Android中做了同样的事情,并且它的工作非常好。

我也知道我可以使用ffmpeg.c类并使用它的主要方法,但问题仍然存在;我如何传递这些命令行参数?

有没有什么我应该在这里知道的,是我现在正在做的事情是正确的还是我在我的方法上不足?

我想混合两个音频文件,所以这样做的命令将是ffmpeg -i firstSound.wav -i secondSound.wav -filter_complex amix=inputs=2:duration=longest finalOutput.wav,我该如何做到这一点在iOS?

有人可以请说一说吗?

回答

2

您不会将参数传递给.a文件,因为它是库文件。这是您构建应用程序的一些内容,可让您访问由ffmpeg库提供的功能。我不确定Android的状态是什么,但它可能会生成一个命令行可执行文件。

查看ffmpeg文档,可能有一种方法可以对库执行所需的操作,但是将ffmpeg作为独立的传入参数二进制文件进行构建和运行是不太可能的。

+0

所以在ffmpeg.c类中没有可以接受命令行参数的处理程序? –

+0

不,ffmpeg.c文件本质上是一个源文件,库不需要它们只提供功能的参数。你在Android上拥有的东西很可能是ffmpeg的二进制文件,你在这里有一个库。 .a文件是一个“静态库”,请参阅:http://en.wikipedia.org/wiki/Static_library –

2

你可以在你的main.c,当然你不会硬编码ARGS这些都只是为了说明

我你的使用ffmpeg播放,因为你的演奏与iframeextractor假设,什么是真正的目标是什么你试图去做。

/* Called from the main */ 
int main(int argc, char **argv) 

int flags, i; 
/* 
argv[1] = "-fs"; 
argv[2] = "-skipframe"; 
argv[3] = "30"; 
argv[4] = "-fast"; 
argv[5] = "-sync"; 
argv[6] = "video"; 
argv[7] = "-drp"; 
argv[8] = "-skipidct"; 
argv[9] = "10"; 
argv[10] = "-skiploop"; 
argv[11] = "50"; 
argv[12] = "-threads"; 
argv[13] = "5"; 
//argv[14] = "-an"; 
argv[15] = "http://172.16.1.33:63478/hulu-f4fa0821-767a-490a-8cb5-f03788760e31/1-hulu-f4fa0821-767a-490a-8cb5-f03788760e31.mpg"; 
argc += 14; 
*/ 


/* register all codecs, demux and protocols */ 
avcodec_register_all(); 
avdevice_register_all(); 
av_register_all(); 


parse_options(argc, argv, options, opt_input_file); 

. .. mo 
} 
+0

也看看这个看看如何调用https://github.com/mooncatventures-group/RTSPPlay/ blob/master/uikit/SDL_uikitappdelegate.m –

+0

我想混合两个音频或视频文件,我有一个命令,但不知道如何在iOS中执行此操作 –

+0

可能不会使用ffmpeg在iOS中混合音频文件,iOS中的音频工具箱api要好得多,需要单独解码两个流并定义一个音频单元。请参阅apple portal上的音频混音器示例。对于视频混音,IOS支持标准c调用约定,但您需要像使用播放器一样使用静态ffmpeg库。 –

相关问题