Vitamio

一,Vitamio 是什麼?html

Vitamio 是一款 Android 與 iOS 平臺上的全能多媒體開發框架,全面支持硬件解碼與 GPU 渲染。Vitamio 憑藉其簡潔易用的 API 接口贏得了全球衆多開發者的青睞。到目前,全球已經有超過 一萬 種應用在使用 Vitamio,覆蓋用戶超過 5億 。java

Vitamio 可以流暢播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常見格式的視頻,還能夠在 Android 與 iOS 上跨平臺支持 MMS, RTSP, RTMP, HLS(m3u8) 等常見的多種視頻流媒體協議,包括點播與直播。android

流媒體支持 

Vitamio 支持各類常見的流媒體協議,能夠點播或者直播音頻和視頻,例如以下常見協議均能無縫支持:ios

  • MMS
  • RTSP (RTP, SDP), RTMP
  • HTTP progressive streaming
  • HLS - HTTP live streaming (M3U8)

音頻和視頻格式 

Vitamio 使用了 FFmpeg 作爲媒體解析器和最主要的解碼器,同時開發了針對不一樣移動平臺的硬解碼方案,可以完美支持 H.264/AVC、H.26三、 MPEG4 等常見的視頻編碼,覆蓋上百種多媒體格式。下表只是一些最多見的視頻格式支持,除特殊標明,所有支持硬件加速:nginx

  • DivX/Xvid
  • WMV (通常只有軟解碼)
  • FLV
  • TS/TP
  • RMVB (只有軟解碼)
  • MKV
  • MOV
  • M4V
  • AVI
  • MP4
  • 3GP

字幕支持 

Vitamio 對字幕的支持很優秀,包括各類常見外掛字幕與不少視頻格式的內嵌字幕,同多個字幕等特性的支持也很是完善。好比:git

  • SubRip(.srt)
  • Sub Station Alpha(.ssa) / Advanced Sub Station Alpha(.ass)
  • SAMI(.smi/.sami)
  • MicroDVD(.sub/.txt)
  • SubViewer2.0(.sub)
  • MPL2(.mpl/.txt)
  • Matroska (.mkv) 內置字幕

更多特性 

除了上面列出的常見功能以外,Vitamio 還作了至關多人性化的工做:github

  • 多音軌與字幕支持
  • 細緻的 CPU 與 GPU 優化
  • 支持手機到平板各類設備
  • 流媒體播放緩衝支持
  • 播放畫面比例大小隨手調節
  • 自動文字編碼檢測,拒絕亂碼

還有更多新特性沒有被列出,請參考開發文檔。web

二,Vitamio 新手入門編程

Vitamio項目發展迅猛,官方羣突破800位開發者,基於Vitamio的項目突破1000個,使用Vitamio提供優質播放體驗的用戶超過1億。也歡迎你們分享你的Vitamio使用經驗,本文將進一步介紹Vitamio的簡單使用方法。vim

下載 

目前Vitamio的項目託管在Github上面:https://github.com/yixia/VitamioBundle
提示:Github支持Git、SVN和直接下載(右側Download Zip)。

簡介 

Vitamio的中文名稱爲「維他蜜」
Vitamio 是一款 Android 平臺上的全能多媒體開發框架。Vitamio 憑藉其簡潔易用的 API 接口贏得了全球衆多開發者的青睞。到目前,全球已經有超過 1000 種應用在使用 Vitamio,覆蓋用戶超過 2億。

Vitamio 可以流暢播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常見格式的視頻,還能夠在 Android 上支持 MMS, RTSP, RTMP, HLS(m3u8) 等常見的多種視頻流媒體協議,包括點播與直播。
支持 ARMv6 和 ARMv7 兩種 ARM CPU,同時對 VFP, VFPv3, NEON 等指令集都作相應優化。

支持 Android 2.1+ 系統,支持超過 95% 的 Android 市場。同時 Android 2.1 以前的系統也基本支持,不過沒作詳細測試。

更多Vitamio的介紹參照這裏。

導入使用 

一、導入。下載回來後你們可能發現沒有.project工程文件,能夠經過File -> Import -> Android -> Existing Android Code Into Workspace來導入工程,而後改一下工程名稱便可。

二、將VitamioBundle工程做爲Android Library引入Demo工程使用便可。

注意:
     若是是Windows用戶,請將VitamioBundle與Demo工程放在同一個文件夾下,不然添加Android Library可能失敗,其餘問題通常clean一下從新編譯一下就行了。其餘問題請參考錯誤大全。

關注Vitamio 

官方微博:http://weibo.com/vitamio

官方網站/論壇:vitamio.org

Vitamio QQ 3羣:283274315

其餘 

一、官方建議以Android Library方式使用Vitamio插件,以便後續方便升級。

二、 Vitamio最新版本爲4.2.1,極力推薦使用新版本。

三、 基於Vitamio僅支持ARMv6+以上的CPU,95%以上的視頻格式支持,說明:

a). 沒法播放的問題。使用VPlayer來測試連接,若是VPlayer沒有問題那Vitamio確定也沒有問題。

b). 各類找不到so文件的狀況只有兩種狀況:不支持設備、沒有執行解壓解碼包。

四、Vitamio最終全部權爲炫一下(北京)科技有限公司。

三,Vitamio測試網絡視頻地址

Vitamio支持多種流媒體格式,如下是一些視頻地址片斷案例,提供給你們測試使用:

HLS - Apple HTTP live streaming - m3u8 

http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8
http://live.3gv.ifeng.com/zixun.m3u8 (直播)
 

HTTP 

http://www.modrails.com/videos/passenger_nginx.mov
http://wsmp32.bbc.co.uk/

RTSP 

http://m.livestream.com (site)
rtsp://xgrammyawardsx.is.livestream-api.com/livestreamiphone/grammyawards

MMS 

mms://video.fjtv.net/setv
mms://ting.mop.com/mopradio
mms://112.230.192.196/zb12

四,Vitamio 錯誤大全

Vitamio沒法使用的錯誤 

Error loading libs
java.lang.UnsatisfiedLinkError: Library …  libstlport_shared.so not found

java.lang.UnsatisfiedLinkError: Couldn't load vinit: findLibrary returned null 

java.lang.UnsatisfiedLinkError: unloadOMX_native

Native libs libffmpeg.so not exists!

凡是此類錯誤,通常只有如下幾種狀況:
一、Vitamio只支持ARMv6+以上的CPU,若是報以上錯誤,說明不支持你的機器。(注意:模擬器要使用4.0以上)
二、沒有調用檢測解碼包的代碼(即沒有解壓解碼包,Vitamio會根據當前CPU的類型自動解壓相應平臺的庫),使用方法參照DEMO:

// ~~~ 檢測Vitamio是否解壓解碼包
if (!LibsChecker.checkVitamioLibs(this)) return; 

三、沒有以Library的方式使用Vitamio,漏拷貝了VitamioBundle裏面的類庫或代碼,例如libvinit.so、libarm.so等。
四、若是您有本身的so,請參考Vitamio的libs文件夾(armeabi、armeabi-v7a、x86)將so拷貝、新建相應的文件夾。
五、若是您是從舊版本Vitamio升級過來,尤爲是早期以集成方式使用的,而如今又以Library方式使用,請刪除相關的類和文件(res/raw/libarm.so、libs下面的libvinit.so、io.vov.vitamio下面相應的類文件),最後改一下當前項目的versionCode(Vitamio根據當前項目的版本自動從新解壓升級)。最後能夠嘗試卸載以前的app從新安裝。強烈建議下載最新版本,先跑通官網例子,沒有問題再本身集成,最後搞不定還能夠直接在官網例子上修改。
六、極少數幾款設備,好比華爲S8600、三星GT-S5830(CPU是ARMv6+,可是沒法使用)

視頻沒法播放的錯誤 

avformat_open_input: I/O error

一、確保視頻沒有問題。先拿VLC、系統自帶的播放器或者PC上的播放器,測試一下連接,確保視頻是能夠播放的。
二、確保調用方法沒有問題。參考官方的例子,先用官網例子測試一個能夠播放的連接,而後再不改動其餘的代碼狀況下僅更改播放地址進行測試。
三、確保測試環境一致。好比拿能上網的PC測試完後拿沒法上網的手機測試,那確定不行。
四、前面都確保沒有問題後最後使用VPlayer來進行測試,若是VPlayer可以播放,那Vitamio必定能播放,不然只有一種狀況:不支持!

java.io.FileNotFoundException: No content provider 

這個不是錯誤,是正常的處理。如今播放視頻是這樣作的:先把 URL 當作一個 ContentProvider 來打開,若是打不開,就直接當作 URL 來打開

java.lang.SecurityException:Not allowed to bind to service Intent … VitamioService 

若是手機上安裝了VPlayer而且使用了舊版本(3.0之前)的Vitamio,可能會報這個錯,能夠簡單理解爲衝突,因此後續VitamioService這個類在3.0之後就沒有了,還有相關的MediaScannerService也沒有了。

java.lang.NoClassDefFoundError: io.vov.vitamio.R$raw 

Vitamio 3.0默認以Android Library的方式使用,對raw的引用使用的io.vov.vitamio.R,若是不是以這種方式使用好比簡單的拷貝合併就報這個錯。建議以Android Library方式使用,便於後續升級。若是仍然堅持要拷貝合併,能夠經過在本工程新建包名io.vov.vitamio,新建R類來實現:

package io.vov.vitamio;

public class R {
    public static final class raw {
        public static final int libarm = com.nmbb.oplayer.R.raw.libarm; public static final int pub = com.nmbb.oplayer.R.raw.pub; } }


Fatal signal 11 (SIGSEGV) at 0xb77ea280 (code=1), thread 1243 (ov.vitamio.demo)

相似Fatal signal崩潰的問題,通常是MediaPlayer的生命週期沒有使用正確。好比尚未prepare就去調用isPlaying等其餘方法都會致使這個問題,使用系統的MediaPlayer也會拋出IllegalStateException的異常。建議去Android官網看文檔:http://developer.android.com/reference/android/media/MediaPlayer.html。尤爲是MediaPlayer的狀態圖。

五,Vitamio產品大全

 酷6視頻

酷6視頻 Ku6Video 是酷6網竭力打造的手機視頻客戶端。酷6網做爲國內最大的短視頻網站,其客戶端覆蓋了資訊、娛樂、搞笑、拍客、時尚等多個頻道的海量視頻資源,集播放、下載、上傳、分享等全新功能,讓手機受衆盡享視頻饕鬄盛宴


 CNTV

CNTV中國網絡電視臺爲中國網絡電視臺官方推出的安卓客戶端。 匯聚CCTV和CNTV精彩資源,提供最全面最豐富的中國電視直播、點播服務,全天24小時滾動更新。 精品資訊細分:國家大事、社會熱點新聞,盡收眼底 實時直播頻道:王牌電視節目,隨時隨地看直播 精彩專題推薦:新聞、時政、經濟、人文和熱播影視劇在內的新聞熱點聚焦 趕忙下載玩轉2013年指尖上的春晚,CNTV中國網絡電視……


 視訊中國

是一款裝機必備的免費高清電影軟件。海量收錄新片,愛情,動做,動漫,驚悚,喜劇等元素的高清電影,爲所欲爲的在線觀看和下載。專爲Android手機訂製的視頻娛樂客戶端產品,爲用戶提供能了流暢便捷的客戶端視頻播放體驗。


 321影音

321影音是android手機上功能最多、性能最好的多媒體播放軟件,集視頻播放、音頻播放、電視直播、廣播電臺於一身,支持幾乎全部流行的視頻、音頻格式,它將讓您的android手機變成您的掌上享樂中心!


 廈門音樂廣播

廈門音樂廣播伴隨着新世紀的到來,廈門人民廣播電臺加速發展,目前已造成了智能化控制管理的高速寬帶多媒體信息網絡,技術裝備水平在全國城市電臺中位居前列,電波覆蓋範圍包括廈門、泉州、龍海、南安、晉江、石獅以及金門等地區,覆蓋人口達六百多萬,收聽人數、收聽率節節上升。


 聽世界

聽世界,是一款專業的有聲做品播放器,免費提供各種精彩的有聲小說、廣播劇、相聲評書、聲音故事、有聲教材、幽默笑話等內容,解放您的雙眼,讓您愛上聽的感受!


 酷雲TV

酷雲TV是北京十分科技有限公司出品的一款電視互動產品,它可使電視節目變得更加有趣。


  FPlayer

Questo è un lettore video usato principalmente da TVItaliane.
Cerca AllMyTv peravere la tv nel tuo smartphone!
TV Italiane.
FPlayer non contiene pubblicità in modalità push e non ne conterrà mai.

 TVGOO Live Tv

You can watch free online tv channels all over the world with tvgoo application. Updating countries and channels automaticaly.
Tags: online tv, live tv, tv list, free, watch, stream, mobile tv
Available Countries: turkey, france, germany, russia, greece, italia, italy, spain, ukraine, brazil, azerbaijan, albania, armenia, egypt, estonia, bulgaria, finland, uk, usa, belgium, india, netherlands, egypt, hungary, japan, china, macedonia, kosovo, norway, romania, usa

 酷狗音樂

酷狗音樂手機版是最受歡迎的音樂播放器,有強大的音樂搜索和高速下載功能、 全球最全音樂曲庫,最專業的音頻解碼核心技術,完美實現各類音頻格式的高保真播放。


 每天動聽

每天動聽手機版是一款功能強大、徹底免費的手機音樂播放軟件,[3]支持歌詞和歌曲圖片下載,皮膚隨心更換,更有炫麗震撼的可視化效果,同時預置豐富的均衡器效果,支持音效加強,簡潔人性化的操做,給追求音樂品質的呢帶來了手機聽歌的全新體驗。數據代表,每天動聽已經成爲拇指一族必備的音樂播放工具!

六,Vitamio不支持特性列表
這裏列舉目前Vitamio不支持或支持不夠好的功能:
  • 1. 不支持ARMv6如下的CPU(支持ARMv6+,大部分沒法播放的問題均是此問題,注意模擬器請使用4.0以上版本)
  • 2. 不支持加密(例如DRM)視頻、嵌套的m3u8(若是m3u8中有沒法播放的干擾連接也會中止而不會跳過)( Vitamio4.2.0已經解決)
  • 3. 不支持獲取Audio SessionId對象
  • 4. 不支持視頻縮略圖截圖(但支持對正在播放的視頻截圖,函數名:getCurrentFrame)
  • 5. 不支持setSurface方法(Vitamio 4.2.1已經解決)
  • 6. 設置字幕(subPath)必須是本地的字幕文件
  • 7. 有些機型硬解碼不夠成熟,建議讓用戶手動切換軟解/硬解(VPlayer,MX player等主流播放器也是這樣處理的)。
  • 8. 不支持華爲S8600等少數幾款機型,具體表現爲沒法解壓解碼包(一直停留在解壓界面)。
  • 9. 不支持Logcat信息輸出屏蔽(so裏面輸出的,但應用層能夠屏蔽掉)
  • 10. 不支持自定義網絡協議(大家須要修改咱們公開的 FFmpeg 代碼,在其中添加相應的 libavformat 模塊就能夠了,與加密和內存中數據處理是同樣的或者經過代理來轉換協議
  • 11. 目前不支持兩個視頻同時播放
  • 12. 若是mp3包含了1幀視頻(好比mp3專輯圖片),此mp3將當成視頻處理,播完這一幀就會立刻結束。(Vitamio會先檢測是否包含視頻,若是包含視頻(大於0幀)即當視頻處理,不然當音頻處理)。(Vitamio 4.2.1已解決)
  • 13.因爲Youku的m3u8不標準,致使Vitamio對Youku視頻支持很差,具體表現爲拖拽進度條無效、忽然中斷。在Vitamio 4.0中已經解決)
  • 14. rmvb不支持硬解,2.1如下的也不支持硬解(硬件限制)
  • 15. hls 不支持可變碼率(在Vitamio 4.0中已經解決)
  • 16. 不支持swf,但支持flv(建議安裝Adobe,而後用WebView播放)

七,Vitamio FAQ

Vitamio名字的由來 

Vitamio的中文名稱爲「維他蜜」。
Vitamio 來源於英文單詞Vitamin(維他命),但願Vitamio對於安卓多媒體開發者的重要性,就像Vitmain之於人體同樣不可缺乏。

Vitamio與VPlayer什麼關係? 

Vitamio基於VPlayer開發,因此VPlayer能播放的Vitamio也能。

Vitamio支持哪些指令集的CPU? 

支持 ARMv6 和 ARMv7 兩種 ARM CPU,同時對 VFP, VFPv3, NEON 等指令集都作相應優化。

Vitamio支持的Android版本 

支持 Android 2.1+ 系統,支持超過 95% 的 Android 市場。同時 Android 2.1 以前的系統也基本支持,不過沒作詳細測試。

E/Vitamio(1557): java.io.FileNotFoundException: No content provider 

這個不是錯誤,是正常的處理。如今播放視頻是這樣作的:先把 URL 當作一個 ContentProvider 來打開,若是打不開,就直接當作 URL 來打開。

爲何會彈出提示框要求安裝Vitamio Plugin? 

由於你下載和使用的是較早的Vitamio版本!

視頻/視頻流(rtp、rtsp等)播放不了的問題! 

可能存在如下幾種狀況:

  • 視頻自己就存在問題,你能夠用其餘播放器播放一下,是否能正常播放。
  • 本地網速不給力/設備自己配置太低。
  • 視頻源卡,自己帶寬不夠,直接訪問也很慢。
  • 嵌套了m3u8地址
  • 視頻被加密了

建議先使用VPlayer和其餘播放器來測試視頻,確保排除外在因素。

如何調用VPlayer來播放視頻? 

1
2
3
4
5
6
7
8
private void startPlayer(String url, String title) {
     Intent i = new Intent();
     i.setComponent( new ComponentName( "me.abitno.vplayer.t" , "me.abitno.vplayer.VideoActivity" ));
     i.setAction( "me.abitno.vplayer.action.VIEW" );
     i.setData(Uri.parse(url));
     i.putExtra( "displayName" , title);
     startActivity(i);
}

 

在混淆時如何忽略Vitamio相關類庫的混淆? 

1
2
-keep class io.vov.utils.** { *; }
-keep class io.vov.vitamio.** { *; }

 

播放時拖動進度條,拖動進度不許確? 

這是正常現象,不是播放器的問題。默認seek要到最近的關鍵幀,不能保證任什麼時候間戳上都有關鍵幀,除非你是intra-only 的編碼方式。

如何開啓硬解碼? 

實例化MediaPlayer時啓用第二個參數。
 

1
public MediaPlayer(android.content.Context ctx, boolean preferHWDecoder)

 

爲何每次軟件升級都會從新解壓解碼包? 

爲確保與當前升級軟件中Vitamio的版本保持一致。Vitamio Java層的代碼都已經公開,你能夠本身改邏輯。

八,VCamera SDK Android用戶手冊

VCamera SDK Android版(短視頻拍攝SDK)是炫一下(北京)科技有限公司官方推出的Android平臺使用的軟件開發工具包,爲Android開發者提供簡單、快捷的接口,幫助開發者實現Android平臺上的短視頻應用開發。

SDK提供視頻錄製、實時濾鏡、後期強大的FFMPEG命令行支持,可實現水印、音量控制等諸多功能。

本文檔面向全部使用該SDK的開發人員、測試人員,要求有必定的Android編程經驗。

 

SDK下載地址

https://www.vitamio.org/VCamera_SDK_Android_1.1.0.zip

SDK功能說明

SDK提供拍攝錄製、分段回刪、實時濾鏡、靜態/動態水印、聲音合成、本地圖片、視頻導入等功能。

 

SDK使用說明

1.1 運行環境

  • Android 4.0及以上的全部系統(注意Demo中使用了TextureView,要支持更低版本的Android請自行修改替換成SurfaceView)
  • 僅支持ARM v7的CPU

 

1.2 初始化

1
VCamera.initialize( this );

建議在Application 的onCreate 中調用,參考Demo 中的VCameraDemoApplication

 

開發前準備

若是您新開發一個的項目,我建議您直接在Demo上進行修改,修改AndroidManifest.xml中的package便可。

1.1 添加SDK到App工程

  • 建立一個Android工程
  • 將vcameralibrary.jar添加到App工程的libs目錄下
  • 將libvcamera.so添加到App工程的libs目錄下的armeabi-v7a目錄
  • 從Demo中拷貝須要的類、圖片等資源到App工程下

 

1.2 權限聲明

1.3 初始化SDK

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//設置拍攝視頻緩存路徑
if (DeviceUtils.isZte()) {
     if (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ DCIM).exists()) {
         VCamera.setVideoCachePath(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera/VCameraDemo/" );
     } else {
         VCamera.setVideoCachePath(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath().replace( "/sdcard/" , "/sdcard-ext/" ) + "/Camera/VCameraDemo/" );
     }
} else {
     VCamera.setVideoCachePath(Environment.getExternalStoragePublicDir ectory(Environment.DIRECTORY_DCIM) + "/Camera/VCameraDemo/" );
}
//開啓log輸出,ffmpeg輸出到logcat
VCamera.setDebugMode( true );
//初始化拍攝SDK,必須
VCamera.initialize( this );

1.4 初始化MediaRecorder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOnErrorListener( this );
if (NetworkUtils.isWifiAvailable( this )) {
     mMediaRecorder.setVideoEncodingBitRate(MediaRecorder.VIDEO_BITRAT E_MEDIUM);
     //WIFI下800碼率
     } else {
     mMediaRecorder.setVideoEncodingBitRate(MediaRecorder.VIDEO_BITRATE_NORMAL);
     //3G、2G下600碼率
}
String recordFile = VCamera.getVideoCachePath() + System.currentTimeMillis();
// 生成文件名;
mMediaRecorder.setOutputDirectory(recordFile);
// 設置輸出路徑
mMediaRecorder.setSurfaceView(mSurfaceView);
mMediaRecorder.setCameraFilter(MediaRecorder.CAMERA_FILTER_NO);
//重置濾鏡
mMediaRecorder.prepare();

1.5 後期處理

UtilityAdaptert提供FFmpegRun方法用於執行ffmpeg命令

 

 

API說明

1.1 拍攝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/** 視頻碼率400kbps */
public static final int VIDEO_BITRATE_LOW = 400 ;
/** 視頻碼率600kbps */
public static final int VIDEO_BITRATE_NORMAL = 600 ;
/** 視頻碼率800kbps(默認) */
public static final int VIDEO_BITRATE_MEDIUM = 800 ;
/** 視頻碼率1024kbps */
public static final int VIDEO_BITRATE_HIGH = 1024 ;
/* 設置碼率,參數範圍在400    ~   1024之間,建議WIFI下800K,其餘狀況600K */
public void setVideoEncodingBitRate( int bitRate)
/*  切換先後攝像頭,默認後置攝像頭  */
public void switchCamera()
/* 切換閃光燈,默認關閉 */
public boolean toggleFlashMode()
/**
* 設置視頻臨時存儲文件夾
*
*@param key 視頻輸出的名稱,同目錄下惟一,通常取系統當前時間
*@param path 文件夾路徑
*@return 錄製信息對象
*/
public MediaObject setOutputDirectory(String key, String path)
/* 是否支持前置攝像頭 */
public static boolean isSupportFrontCamera()
/* 拍攝完成,開始轉碼合成mp4臨時文件 */
public boolean startEncoding()
/* 開始準備 */
public void prepare()
/* 開始錄製,返回視頻分塊信息,與stop()成對使用 */
public MediaPart start()
/* 中止錄製,與start()成對調用,可屢次調用實現分段拍攝 */
public void stop()
/*  錄製完成,釋放資源    */
public void release()

1.2 MediaRecorderFilter支持實時濾鏡的錄製類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** 沒有濾鏡 */
public static final String CAMERA_FILTER_NO = "" ;
/** 黑白濾鏡 */
public static final String CAMERA_FILTER_BLACKWHITE = "blackWhite" ;
/** 銳化濾鏡 */
public static final String CAMERA_FILTER_SHRRPEN = "pro" ;
/** 老照片 */
public static final String CAMERA_FILTER_OLD_PHOTOS = "oldFilm" ;
/** 霓虹燈 */
public static final String CAMERA_FILTER_NEON_LIGHT = "edge" ;
/** 反色濾鏡 */
public static final String CAMERA_FILTER_ANTICOLOR = "antiColor" ;
/** 穿越濾鏡 */
public static final String CAMERA_FILTER_THROUGH = "radial" ;
/** 馬賽克濾鏡 */
public static final String CAMERA_FILTER_MOSAICS = "earlyBird" ;
/** 懷舊濾鏡 */
public static final String CAMERA_FILTER_REMINISCENCE = "lomo" ;

1.3 FFMpegUtils FFmpeg工具類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/** 音量 100% -vol 100 */
public static final float AUDIO_VOLUME_HIGH = 1F;
/** 音量 66% */
public static final float AUDIO_VOLUME_MEDIUM = 0 .66F;
/** 音量 33% */
public static final float AUDIO_VOLUME_LOW = 0 .33F;
/** 音量 關閉 */
public static final int AUDIO_VOLUME_CLOSE = 0 ;
/**
* 視頻截圖
*
* @param videoPath  視頻路徑
* @param outputPath 截圖輸出路徑
* @param wh  截圖畫面尺寸,例如84x84
* @param ss  截圖起始時間
* @return
*/
public static boolean captureThumbnails(String videoPath, String outputPath, String wh, String ss)
/**
* 綜合轉碼
*
* @param mMediaObject 視頻數據存儲對象,涵主題、小部件和視頻片斷
* @param targetPath 目標路徑
* @param videoWidth 視頻寬度
* @param complexWatermark 是否合併主題(預覽頁主題和主題音樂)
* @return
*/
public static boolean videoTranscoding(MediaObject mMediaObject, String targetPath, int videoWidth, boolean complexWatermark)
/**
* 圖片轉視頻(用於圖片導入)
*/
public static boolean convertImage2Video(MediaPart part)

1.4 UtilityAdapter 底層工具類

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 執行ffmpeg命令
*
* @param strtag 任務的惟一標識,若是標識爲""或NULL,以阻塞方式運行,不然以
異步方式運行
* @param strcmd 命令行
* @return 返回執行結果
*/
public static native int FFmpegRun(String tag, String cmd);
/** 獲取當前轉碼完成時間 */
public static native int FFmpegVideoGetTransTime( int flag);
/** 獲取當前轉碼完成時間 */
public static native int VideoGetMetadataRotate(String filename);

 

開發指南

1.1 拍攝流程圖


上面是通常的拍攝流程,目前Demo只有手動拍攝(後續版本會補上本地導入),開發者可自行用ffmpeg命令行實現其餘的功能和流程。

 

1.2 拍攝錄製模式

SDK支持三種錄製模式:

 

1.2.1 支持實時濾鏡的錄製模式(MediaRecorderFilter)

默認模式(也是秒拍當前使用的模式)輸出yuv裸視頻數據和pcm裸音頻數據,以下流程圖:

本模式下支持實時濾鏡,能直接輸出480x480的yuv數據,而且已經旋轉好視頻畫面,無須額外裁剪。

 

1.2.2 普通錄製模式(MediaRecorder)

與6.2.1相似,可是輸出的是640x480的yuv數據,後期處理須要本身增長裁剪和旋轉的命令,例如-vf "transpose=1[tran];[tran]crop=480:480:0:0"。

 

1.2.3 系統錄製模式(MediaRecorderSystem).

待完善.

 

ffmpeg命令行

1.1 視頻疊加水印(建議添加與視頻大小一致而且透明的水印,如480x480)

1
2
3
4
5
6
// 單水印
ffmpeg -i in .mp4 watermark1.png -filter_complex "overlay=x=0:y=0" -f mp4 out.mp4
// 動態水印,2張圖片間隔200毫秒
ffmpeg -i in .mp4 watermark1.png –i watermark2.png -filter_complex "overlay=x= 'if(eq(floor(mod(t*5,2)),0), 0, -500)':y=0, overlay=x= 'if(eq(floor(mod(t*5,2)),1), 0, -500)':y=0" -f mp4 out.mp4
// 視頻疊加gif
ffmpeg -y -i in .mp4 -i in .gif -filter_complex "overlay=0:0" -t 10 -acodec copy out.mp4

1.2 視頻裁剪

1
2
// 裁剪0秒到10秒視頻
ffmpeg -i in .mp4 -ss 0 -t 10 -vcodec copy -acodec copy out.mp4

1.3 格式轉換

1
2
3
4
//yuv 轉mp4
ffmpeg -y -f rawvideo -pix_fmt yuv420p -s 480x480 -r 15 -i in .yuv -vcodec libx264 -profile: v baseline -preset ultrafast out.mp4
// 靜態圖片轉mp4
ffmpeg -y -loop 1 -f image2 -i Goddess.png -vcodec mpeg4 -r 15 -t 10 Goddess.mp4

1.4 其餘

1
2
3
4
5
6
7
8
9
// 加速視頻
ffmpeg -i input.avi -vf "setpts=0.5*PTS" output.avi
// 放慢視頻
ffmpeg -i input.avi -vf "setpts=2.0*PTS" output.avi
// 刪除視頻文件的旋轉信息
-metadata:s: v rotate=\"\"
  // 提取視頻的yuv和pcm數據
  ffmpeg -i in .mp4 -ss 0 -t 10 -vn -acodec pcm_s16le -f s16le -ar 44100
-ac 1 a.pcm -ss 0 -t 10 -an -vcodec rawvideo -f rawvideo -s 640x480 -pix_fmt nv21 a.yuv

※更多關於ffmpeg的用法請參考, www.ffmpeg.org

 

FAQ

    • SDK是否收費?

    • 我的免費,企業收費(商務sales@yixia.com,電話座機010-6482 8682)
    • 最終解釋權

    • 最終解釋權歸炫一下(北京)科技有限公司全部。
    • so的包很大,能優化減小嗎
    • 咱們也意識到了這個問題,後續版本會進行裁剪。
    • 拍攝界面能和秒拍作成同樣的嗎?

    • 能。歡迎爲用戶提供一致的體驗!但僅限於拍攝的相關界面。
    • 何時推出IOS版本的拍攝SDK?

    • 若是你已經在上線的產品中使用了Android版的拍攝上傳SDK,能夠聯繫咱們申請IOS版的拍攝SDK試用
相關文章
相關標籤/搜索