天天看點

使用系統界面拍攝視訊及系統問題

目前,将視訊捕獲內建到你的應用中的最簡單的方法是使用 uiimagepickercontroller。這是一個封裝了完整視訊捕獲管線和相機 ui 的 view controller。用uiimagepickercontroller可以自定義系統提供的界面來拍攝并儲存視訊和照片。

source type :

這個參數是用來确定是調用攝像頭還是調用圖檔庫.

<code>uiimagepickercontrollersourcetypecamera</code> : 提供調用攝像頭的界面來拍攝照片視訊。

<code>uiimagepickercontrollersourcetypephotolibrary</code> 調用圖檔庫作為uiimagepickercontroller資料源。

<code>uiimagepickercontrollersourcetypesavedphotosalbum</code> ios裝置中的膠卷相機的圖檔.作為uiimagepickercontroller資料源

mediatypes:

nsarray數組。拍攝時:這個屬性決定uiimagepickercontroller界面模式是拍照還是錄像.檢視已儲存多媒體資料,可決定展示的是照片還是視訊。

<code>kuttypeimage</code> 表示靜态圖檔, <code>kuttypemovie</code>表示錄像.把空數組傳給這個屬性會報異常。在設定此屬性前,需要用<code>availablemediatypesforsourcetype:</code>類方法判斷這種多媒體類型是否被支援。

editing controls :

用來指定是否可編輯.将<code>allowsediting</code> 屬性設定為yes表示可編輯,no表示不可編輯.

delegate

<code>id &lt;uinavigationcontrollerdelegate, uiimagepickercontrollerdelegate&gt; delegate</code>:

使用 uiimagepickercontroller,必須提供遵守uiimagepickercontrollerdelegate和uinavigationcontrollerdelegate協定

的delegate對象.uiimagepickercontrollerdelegate提供了兩個方法來在照相完成後,與uiimagepickercontroller對象界面進行互動。

<code>imagepickercontroller:didfinishpickingmediawithinfo:</code> delegate使用拍攝的照片或者視訊的處理邏輯.

<code>imagepickercontrollerdidcancel(_:)</code> 取消picker view。

1.首先要檢查裝置是否支援相機錄制, 否則裝置不支援相機時,會crash 。

2.檢查在 source type中支援的多媒體類型,并設定mediatypes

如果隻想讓攝像頭隻能攝像,而不能拍照,那應該設定mediatypes

cameraui.mediatypes = [[nsarray alloc] initwithobjects: (nsstring *) kuttypemovie , nil];

kuttypeimage 對應拍照

kuttypemovie 對應攝像

這要導入mobilecoreservices.framework,然後再

<code>#import &lt;mobilecoreservices/utcoretypes.h&gt;</code>

3.設定delegate,定義拍攝完成後的互動事件處理

viewcontroller.m

appdelegate.m

橫向拍攝視訊,完成拍攝後點選“使用視訊”,攝像頭被打開,背景出現攝像流。

使用系統界面拍攝視訊及系統問題

bug.png

裝置和系統:

iphone6plus 9.1 ,上述情況

iphone5s 8.3 , 上述情況

iphone4s 7.1.1, 上述情況,但是顯示是已拍攝視訊的最後一幀。

問題原因:

調用系統錄影機錄像時,uiimagepickercontroller視圖有兩個關鍵子view,<code>cmkvideopreviewview</code>和<code>plavplayerview</code>。

plavplayerview 用來播放已錄制的視訊。

cmkvideopreviewview 負責展示攝像頭實時拍攝的視訊流。 previewview在不同系統版本有不同的名字:

9.1系統的類名是cmkvideopreviewview;

8.3系統是camvideopreviewview;

7.1系統是 plvideopreviewview)

<code>視圖層次結構</code>:cmkvideopreviewview在下,plavplayerview 在上。橫屏拍攝視訊,完成拍攝後,由于uiimagepickercontroller官方隻支援豎屏模式,系統自動轉為豎屏模式并更新plvideoposterframeview的uiimageview(已錄制視訊的快照)的frame為 (0, 212,75, 414, 310,5),是以原本被遮擋的cmkvideopreviewview就顯示出來了。

使用系統界面拍攝視訊及系統問題

paste_image.png

解決方案:

<a href="https://developer.apple.com/library/ios/documentation/audiovideo/conceptual/cameraandphotolib_topicsforios/articles/takingpicturesandmovies.html#//apple_ref/doc/uid/tp40010406" target="_blank">taking pictures and movies</a>

<a href="http://objccn.io/issue-23-1/" target="_blank">ios裝置上捕獲視訊</a>

<a href="http://www.jianshu.com/p/2ac85aca4468" target="_blank">文檔翻譯</a>

繼續閱讀