在上節(jié)課,根據(jù)模板文件我們對(duì)在Android環(huán)境中使用FFmpeg和openCV進(jìn)行開(kāi)發(fā)有了一個(gè)初步的體驗(yàn),這節(jié)課,我們來(lái)具體看一下其工作流程。
1.程序的入口
與VS2013程序開(kāi)發(fā)類似,Android程序開(kāi)發(fā)也有一個(gè)入口,在這個(gè)模板中,它的入口文件是MainActivity.java,具體路徑是:E:\jPro\demo\src\com\example\demo\MainActivity.java。我們打開(kāi)MainActivity.java,會(huì)看到項(xiàng)目的主類:public class MainActivity extends Activity {},這個(gè)就是程序的入口了,與VS2013開(kāi)發(fā)類似,在這個(gè)類中我們可以定義各種變量,也可以定義各種方法。其中的onCreate()函數(shù)類似于MFC中的OnInitDialog()函數(shù),會(huì)在界面初始化完成后執(zhí)行。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
formatBtn=(Button)findViewById(R.id.formatBtn);
codecBtn=(Button)findViewById(R.id.codecBtn);
filterBtn=(Button)findViewById(R.id.filterBtn);
configBtn=(Button)findViewById(R.id.configBtn);
msgTxt=(TextView)findViewById(R.id.msgTxt);
msgTxt.setMovementMethod(ScrollingMovementMethod.getInstance());
}
2.為了能使用FFmpeg和openCV的相關(guān)功能,我們需要先把.so動(dòng)態(tài)鏈接庫(kù)加載進(jìn)來(lái)并定義四個(gè)與C++有關(guān)的native函數(shù),這四個(gè)函數(shù)在demo.cpp中實(shí)現(xiàn)并被java調(diào)用。
static {
System.loadLibrary("opencv_java3");
System.loadLibrary("x264.161");
System.loadLibrary("avcodec");
System.loadLibrary("avdevice");
System.loadLibrary("avfilter");
System.loadLibrary("avformat");
System.loadLibrary("avutil");
System.loadLibrary("postproc");
System.loadLibrary("swresample");
System.loadLibrary("swscale");
System.loadLibrary("demo");
}
public native String avformatinfo();
public native String avcodecinfo();
public native String avfilterinfo();
public native String configurationinfo();
3.通過(guò)按鈕調(diào)用相關(guān)函數(shù)
雙擊打開(kāi)布局文件,路徑為:/demo/res/layout/activity_main.xml。
雙擊其中的config按鈕會(huì)看到configBtn單擊時(shí)會(huì)觸發(fā)名為Config的java方法
<Button
android:id="@+id/configBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/filterBtn"
android:layout_alignBottom="@+id/filterBtn"
android:layout_alignRight="@+id/formatBtn"
android:onClick="config"
android:text="Config" />
/>
而名為Config的java方法則位于MainActivity.java中,而且調(diào)用了一個(gè)名為configurationinfo()的C++ native函數(shù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-801078.html
public void config(View view){
msgTxt.setText(configurationinfo());
}
4.demo.cpp中的configurationinfo()函數(shù)則是通過(guò)下面這種方式被java調(diào)用執(zhí)行的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801078.html
JNIEXPORT jstring JNICALL Java_com_example_demo_MainActivity_configurationinfo(
JNIEnv *env, jobject obj) {
char info[10000] = { 0 };
//av_register_all();
sprintf(info, "%s\n", avcodec_configuration());
//printf("%s", info);
return env->NewStringUTF(info);
}
到了這里,關(guān)于第19課 在Android環(huán)境中使用FFmpeg和openCV進(jìn)行開(kāi)發(fā)的一般步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!