MG--音視頻采集

  • 代碼下載

直播喵播MGMiaoBo下載

一、視頻的開始采集和停止采集

  • 開始采集步驟:

    • 1.創(chuàng)建捕捉會(huì)話
          // 1.創(chuàng)建捕捉會(huì)話
          let session = AVCaptureSession()```

  - 2.給捕捉會(huì)話設(shè)置輸入源(攝像頭)
![獲取device的幾種方法.png](http://upload-images.jianshu.io/upload_images/1429890-7f1a13d562b94904.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    // 2.獲取捕捉會(huì)話的輸入源
    // 2.1獲取攝像頭設(shè)備
    guard let devices = AVCaptureDevice.devices(withMdeiaType: AvMediaTypeVideo) as? [AVCaptureDevice] else { return } 
    guard let device = devices.filter({ $0.position == .fornt }).first else { return } 
    
    // 2.2通過device創(chuàng)建AVCaptureInput對(duì)象
    guard let videoInput = AVCaptureDeviceInput(device: device) else { return } 
    
    // 2.3將input添加到會(huì)話中
    session.addInput(videoInput)```
  • 3.繪制捕捉會(huì)話的輸出源
        // 3.給捕捉會(huì)話設(shè)置輸出源
        let videoOutput = AVCaptureVideoDataOutput()
        videoOutput.setSamoleBufferDelegate(self,queue: DdispatchQueue.global())
        session.addOutput(videoOutput)```
  - 4.給用戶設(shè)置一個(gè)可以看到的圖層(可選)
    // 4.給用戶看到一個(gè)預(yù)覽圖層
    let preViewLayer = AVCaptureVideoPreviewLayer()
    preViewLayer.frame = view.bounds
    view.layer.addSubLayer(preViewLayer)```
  • 5.開始采集
        // 5.開始采集
        session.startRunning()```
***

- ###停止采集步驟
  - 1.讓session停止采集
  - 2.移除預(yù)覽圖層
![](http://upload-images.jianshu.io/upload_images/1429890-cb496322af8b5670.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- ###設(shè)置代理,執(zhí)行代理方法
  ![](http://upload-images.jianshu.io/upload_images/1429890-c2e79b26c692d1ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- ###iOS 10在info.plist設(shè)置攝像頭權(quán)限
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1429890-5b39ea6ea3a0541f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 參考代碼(設(shè)置視頻采集) 
  - ```
func setVideoCapture()
    {
        // 1.創(chuàng)建捕捉會(huì)話
        let session = AVCaptureSession()
        
        // 2.獲取捕捉會(huì)話的輸入源
        // 2.1獲取攝像頭設(shè)備
        guard let devices = AVCaptureDevice.devices(withMdeiaType: AvMediaTypeVideo) as? [AVCaptureDevice] else { return } 
        guard let device = devices.filter({ $0.position == .fornt }).first else { return } 
        
        // 2.2通過device創(chuàng)建AVCaptureInput對(duì)象
        guard let videoInput = AVCaptureDeviceInput(device: device) else { return } 
        
        // 2.3將input添加到會(huì)話中
        session.addInput(videoInput)
        
        // 3.給捕捉會(huì)話設(shè)置輸出源
        let videoOutput = AVCaptureVideoDataOutput()
        videoOutput.setSamoleBufferDelegate(self,queue: DdispatchQueue.global())
        session.addOutput(videoOutput)
        
        // 4.給用戶看到一個(gè)預(yù)覽圖層
        let preViewLayer = AVCaptureVideoPreviewLayer()
        preViewLayer.frame = view.bounds
        view.layer.addSubLayer(preViewLayer)
        
        // 5.開始采集
        session.startRunning()
    }  ```

##注意: 會(huì)話session和預(yù)覽圖層使用強(qiáng)引用,懶加載屬性即可(截圖展示)
![完整代碼展示.png](http://upload-images.jianshu.io/upload_images/1429890-567e605f6a2da472.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***
***
***
#二、音頻的開始采集和停止采集
步驟和視頻一樣,這里貼出不同之處的核心代碼
![音頻的開始采集](http://upload-images.jianshu.io/upload_images/1429890-3466060f97306469.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- ###iOS 10在info.plist設(shè)置攝像頭權(quán)限
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1429890-5b39ea6ea3a0541f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##注意: 由于音視頻的代理方法相同,我們根據(jù)connection區(qū)分音視頻
![](http://upload-images.jianshu.io/upload_images/1429890-6e9e20fc010aac59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![connection.png](http://upload-images.jianshu.io/upload_images/1429890-475f592d5dda5969.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1429890-a72edccba3ef2641.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**至此,完成簡單的音視頻采集**
***
***
***

- ###切換攝像頭
![切換攝像頭.png](http://upload-images.jianshu.io/upload_images/1429890-a8d1585ff272b3a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- ###保存視頻
  - 添加寫入文件的output(在開始采集視頻的時(shí)候開始寫入)
![](http://upload-images.jianshu.io/upload_images/1429890-1758391661189181.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  - 代理,可監(jiān)聽什么時(shí)候開始寫入(在停止采集視頻的時(shí)候停止文件寫入)
![寫入.png](http://upload-images.jianshu.io/upload_images/1429890-60e3dc1a8d053cb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![代理](http://upload-images.jianshu.io/upload_images/1429890-06646f76e7c75aae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![停止錄制](http://upload-images.jianshu.io/upload_images/1429890-80c7ffcf2e2d3ac3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

####后續(xù)會(huì)放上完整代碼補(bǔ)充、



***
***
***

- #github

|  項(xiàng)目  |  簡介    |  
    | : | : |
    |  [MGDS_Swif](https://github.com/LYM-mg/MGDS_Swift)  |  逗視視頻直播 |
    |  [MGMiaoBo](https://github.com/LYM-mg/MGMiaoBo)  |  喵播視頻直播 |  
    |  [MGDYZB](https://github.com/LYM-mg/MGDYZB)  |  斗魚視頻直播 |
    |  [MGDemo](https://github.com/LYM-mg/MGDemo)  |  n多小功能合集 |  
    |   [MGBaisi](https://github.com/LYM-mg/MGBaisi)   |  高度仿寫百思   | 
    |   [MGSinaWeibo](https://github.com/LYM-mg/MGSinaWeibo)   | 高度仿寫Sina   | 
    |   [MGLoveFreshBeen](https://github.com/LYM-mg/MGLoveFreshBeen)   |  一款電商App   | 
    |   [MGWeChat](https://github.com/LYM-mg/MGWeChat)   |  小部分實(shí)現(xiàn)微信功能   | 
    |  [MGTrasitionPractice](https://github.com/LYM-mg/MGTrasitionPractice)   |  自定義轉(zhuǎn)場練習(xí)   | 
    |  [DBFMDemo](https://github.com/LYM-mg/DBFMDemo)  |  豆瓣電臺(tái)   | 
    | [MGPlayer](https://github.com/LYM-mg/MGPlayer)  |  一個(gè)播放視頻的Demo   | 
    |  [MGCollectionView](https://github.com/LYM-mg/MGCollectionView)  |  環(huán)形圖片排布以及花瓣形排布   | 
    |  [MGPuBuLiuDemo](https://github.com/LYM-mg/MGPuBuLiuDemo)  |  瀑布流--商品展   | 
    |  [MGSlideViewDemo](https://github.com/LYM-mg/MGSlideViewDemo)  |  一個(gè)簡單點(diǎn)的側(cè)滑效果,仿QQ側(cè)滑   | 
    | [MyResume](https://github.com/LYM-mg/MyResume)  |  一個(gè)展示自己個(gè)人簡歷的Demo   | 
    |  [GoodBookDemo](https://github.com/LYM-mg/GoodBookDemo) |  好書   | 

   - #[1、直播喵播MGMiaoBo下載](https://github.com/LYM-mg/MGMiaoBo)
   - #[2、逗視:逗你玩的直播App,可下載試玩](https://github.com/LYM-mg/MGDS_Swift)
  - >#看下效果
![逗視介紹1.gif](http://upload-images.jianshu.io/upload_images/1429890-ecd25e08d367c32e.gif?imageMogr2/auto-orient/strip)
![逗視介紹2.gif](http://upload-images.jianshu.io/upload_images/1429890-91b427263bc09abd.gif?imageMogr2/auto-orient/strip)
***
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容