2012-06-06 35 views
5

我想建立FFmpeg的圖書館在我與NDK Android應用程序使用。原因是因爲我在android中使用本機視頻捕捉功能,因爲我真的不想寫自己的錄像機。但是,本機視頻捕獲僅允許高質量編碼或低質量編碼。我想要介於兩者之間,我相信解決方案是使用FFmpeg庫將高質量視頻重新編碼爲更輕。建設的FFmpeg的Android使用命令行參數

到目前爲止,我已經能夠根據本指南構建FFmpeg庫:http://www.roman10.net/how-to-build-ffmpeg-for-android/以及我已經能夠使其工作的一些調整。

然而,我發現一切似乎是如何編寫自己的編碼器,這似乎有點小題大做了我。我真正想要做的就是將命令行格式的字符串發送到FFmpeg的main()函數,並重新編碼我的視頻。但是,我似乎無法弄清楚我是如何構建FFmpeg來讓我訪問主要方法的。我發現這篇文章:Compile ffmpeg.c and call its main() via JNI哪個鏈接到一個項目做我想要的更少,但對於我的生活,我無法弄清楚發生了什麼事情。這看起來好像他正在編譯的數據比我想要的要多,而且我真的希望儘可能保持我的應用程序的輕量級。

一些額外的方向將是非常有益的。謝謝。

+0

我感興趣的是同樣的事情,但對於音頻捕捉,而不是視頻。類似的原則適用,所以我爲你的問題增加了一筆賞金。 – Brad

+0

@Brad,你能澄清一下:你可以使用上面的指南來構建ffmpg,但是你想知道如何通過從java代碼中調用它來實際使用構建的庫,並將一些參數傳遞給它以用於編碼。這種理解是正確的嗎? – av501

+0

@ av501,我希望能夠使用FFMPEG的Alsa輸入從Android設備上的麥克風捕獲音頻。我相信這是Zargoon想要從攝像頭捕捉視頻時所要做的。但是,這是Zargoon的問題,所以如果這兩件事情是真的不同的話,請專門回答視頻截圖。 – Brad

回答

1

在Android的NDK有在典型意義上的應用程序沒有main(),所以你不能這樣做你想直接的東西。但是,您仍然可以自己調用FFmpeg的main()併爲其提供所有必需的參數。這裏有兩個可能性,以獲取參數:

  1. Android的活動創建後收到的意向。你可以通過意圖傳遞的參數,同時啓動您的活動,然後提取它是這樣的:

    Intent CommandLine = this.getIntent(); 
    Uri uri = CommandLine.getData(); 
    
  2. 你可以閱讀從你的SD卡上的某個地方創建文件參數和傳遞到FFmpeg的。

+0

嘿。我也想在android中運行ffmpeg命令。我怎麼能實現它。你能指導嗎? –

+1

通過這個,我們可以調用位於jni的FFMPEG文件夾中的main()方法,並在我們的本地C文件中傳遞我們的命令。你可以請分享你的知識,以便它也可以幫助我們... –