亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

零基礎學習iOS直播之采集

2020-07-26 03:00:22
字體:
來源:轉載
供稿:網友

直播的采集由采集的設備(攝像頭、話筒)不同分為視頻采集和音頻采集,本篇文章會分別介紹。

1.采集步驟

  1. 創建捕捉會話(AVCaptureSession),iOS調用相機和話筒之前都需要創建捕捉對話,把輸入輸出設備添加進對話中。
  2. 往會話中添加視頻輸入對象(AVCaptureDeviceInput)。
  3. 往會話中添加音頻輸入對象(AVCaptureDeviceInput)。
  4. 往會話中添加視頻輸出對象(AVCaptureVideoDataOutput)。
  5. 往會話中添加音頻輸出對象(AVCaptureAudioDataOutput)。
  6. 添加視屏預覽圖層(AVCaptureVideoPreviewLayer)。
  7. 開啟會話。
  8. 推流(以后講)。

2.效果圖

這是后置攝像頭采集的,直播一般用前置攝像頭的,但是我實在沒勇氣放出我的自拍😂。

3.代碼演示

// 采集- (void)setupCaputureVideo { // 1.創建捕獲對話,必須要強引用,否則會釋放 _captureSession = [[AVCaptureSession alloc] init]; // 2.捕獲攝像頭設備,默認前置攝像頭 AVCaptureDevice *videoDevice = [self getVideoDevice:AVCaptureDevicePositionFront]; // 3.獲取聲音設備 AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; // 4.創建對應視頻設備輸入對象 _currentVideoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil]; // 5.創建對應音頻設備輸入對象 AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil]; // 6.添加到會話中 注意:最好要判斷是否能添加輸入,會話不能添加空的 // 6.1 添加視頻 if ([_captureSession canAddInput:_currentVideoDeviceInput]) { [_captureSession addInput:_currentVideoDeviceInput]; } // 6.2 添加音頻 if ([_captureSession canAddInput:audioDeviceInput]) { [_captureSession addInput:audioDeviceInput]; } // 7.捕獲視頻數據輸出設備 AVCaptureVideoDataOutput *videoOutput = [[AVCaptureVideoDataOutput alloc] init]; //7.1 設置代理, 捕獲視頻樣品數據 dispatch_queue_t videoQueue = dispatch_queue_create("Video Capure Queue", DISPATCH_QUEUE_SERIAL); [videoOutput setSampleBufferDelegate: self queue:videoQueue]; // 8.設置音頻數據輸出設備 AVCaptureAudioDataOutput *audioOutput = [[AVCaptureAudioDataOutput alloc] init]; // 8.1 設置代理,捕獲音頻樣品數據 注意:必須是串行隊列才能捕獲到數據,而且不能為空 dispatch_queue_t audioQueue = dispatch_queue_create("Audio Capure Queue", DISPATCH_QUEUE_SERIAL); [audioOutput setSampleBufferDelegate:self queue:audioQueue]; // 9.添加到會話中 注意:最好要判斷是否能添加輸入,會話不能添加空的 if ([_captureSession canAddOutput:videoOutput]) { [_captureSession addOutput:videoOutput]; } if ([_captureSession canAddOutput:audioOutput]) { [_captureSession addOutput:audioOutput]; } // 10.獲取視屏輸入與輸出連接,用于分辨音視頻數據 _videoConnection = [videoOutput connectionWithMediaType:AVMediaTypeVideo]; // 11.添加視屏預覽圖層 _previewdLayer = [AVCaptureVideoPreviewLayer layerWithSession:_captureSession]; _previewdLayer.frame = [UIScreen mainScreen].bounds; [self.view.layer insertSublayer:_previewdLayer atIndex:0]; // 12.開啟會話 [_captureSession startRunning];}// 根據攝像頭方向獲取攝像頭- (AVCaptureDevice *)getVideoDevice: (AVCaptureDevicePosition)position { NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for (AVCaptureDevice *device in devices) { if (device.position == position) { return device; } } return nil;}

分析:

(1)攝像頭:每個手機都有且僅有兩個攝像頭,前置攝像頭和后置攝像頭,包括iPhone 7 Plus,它后面的兩個攝像頭統稱為后置攝像頭。所以獲取的是攝像頭數組,我們根據攝像頭的方向獲取指定的攝像頭。對話里只能有一個攝像頭設備。

(2)攝像頭方向(AVCaptureDevicePosition):是一個枚舉,有三個值可選擇。不過如果選擇

AVCaptureDevicePositionUnspecified,那么是不能調用攝像頭的。typedef NS_ENUM(NSInteger, AVCaptureDevicePosition) { AVCaptureDevicePositionUnspecified = 0, // 不指定 AVCaptureDevicePositionBack = 1, //后置 AVCaptureDevicePositionFront = 2 // 前置}

(3)代理:AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate,分別為視頻和音頻輸出設備對象的代理,兩個代理都有下面的方法:

// 獲取輸出設備數據,有可能是音頻,有可能是視頻- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { if (_videoConnection == connection) { NSLog(@"采集到視屏數據"); }else { NSLog(@"采集到音頻數據"); }}

4.切換攝像頭

#pragma mark - 切換攝像頭- (IBAction)toggleCapture:(id)sender { // 1.獲取當前設備方向 AVCaptureDevicePosition cureentPosition = _currentVideoDeviceInput.device.position; // 2.獲取需要改變的方向 AVCaptureDevicePosition togglePosition = (cureentPosition == AVCaptureDevicePositionFront ? AVCaptureDevicePositionBack : AVCaptureDevicePositionFront); // 3.獲取需要改變的攝像頭設備 AVCaptureDevice *toggleDevice = [self getVideoDevice:togglePosition]; // 4.獲取需要改變的攝像頭輸入設備 AVCaptureDeviceInput *toggleDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:toggleDevice error:nil]; // 5.停止會話,否則會有一瞬間的白屏 [_captureSession stopRunning]; // 6.移除之前的攝像頭輸入設備,否則會崩潰,因為會話里只能有一個攝像頭設備 [_captureSession removeInput:_currentVideoDeviceInput]; // 7.添加新的攝像頭輸入設備 [_captureSession addInput:toggleDeviceInput]; // 8.重新開始會話 [_captureSession startRunning]; // 記錄當前攝像頭輸入設備 //9.重新開始 _currentVideoDeviceInput = toggleDeviceInput;}

demo里還有其他的功能,但是感覺沒什么太大用處,就不講了,有興趣的可以去我的GitHub上下載看看。

demo下載

demo下載地址。下載下來運行,發現報錯。

那是因為我沒有在工程里上傳ijkplayer視屏直播框架,我能上傳上去,但下載太慢了,什么原因大家都懂得。我把ijkplayer視屏直播框架放到百度云上了,沒有密碼,下載下來之后,放到LiveAppDemo-master文件夾里,重新打開就可以運行了。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂2020| 国产午夜精品麻豆| 亚洲国产精品久久91精品| 国产精品96久久久久久又黄又硬| 色噜噜狠狠狠综合曰曰曰88av| 亚洲一区二区国产| 在线国产精品播放| 久久国内精品一国内精品| 高跟丝袜一区二区三区| 国产精品自产拍在线观| 亚洲欧美激情一区| 91九色综合久久| 欧美另类极品videosbestfree| 国产精品久久久久aaaa九色| 国语对白做受69| 国语自产精品视频在免费| 91夜夜未满十八勿入爽爽影院| 亚洲人精选亚洲人成在线| 人人爽久久涩噜噜噜网站| 日韩极品精品视频免费观看| 高清欧美一区二区三区| 国产噜噜噜噜久久久久久久久| 欧美成人免费网| 亚洲日本中文字幕免费在线不卡| 中文字幕综合一区| 播播国产欧美激情| 欧美放荡办公室videos4k| 亚洲自拍中文字幕| 亚洲成色www8888| 亚洲精品国产综合区久久久久久久| 欧美日韩国产成人在线| 亚洲自拍av在线| 欧美一级黑人aaaaaaa做受| 欧美日韩中文在线观看| 国产精品九九久久久久久久| 日韩欧美在线视频观看| 77777少妇光屁股久久一区| 国产精品一区二区久久国产| 国内精品久久久久影院 日本资源| 色婷婷成人综合| 精品久久久国产精品999| 午夜精品久久久久久久久久久久| 一区二区亚洲欧洲国产日韩| 久久久www成人免费精品张筱雨| 国产精品日韩电影| www.欧美精品一二三区| 日本欧美在线视频| 尤物九九久久国产精品的特点| 一本色道久久88综合日韩精品| 亚洲免费视频网站| 国产在线精品成人一区二区三区| 亚洲国产精彩中文乱码av| 黑人狂躁日本妞一区二区三区| 日本aⅴ大伊香蕉精品视频| 一区二区三区www| 亚洲aⅴ日韩av电影在线观看| 精品国产一区二区三区久久久| 国产在线a不卡| 九九久久精品一区| 欧美激情视频在线免费观看 欧美视频免费一| 日韩黄色高清视频| 亚洲人成网站色ww在线| 18一19gay欧美视频网站| 欧美日韩免费在线观看| 国产亚洲精品激情久久| 中文字幕综合在线| 国模极品一区二区三区| 一区二区欧美在线| 久久久久亚洲精品成人网小说| 精品国产成人av| 国产欧美日韩免费| 国产精品久久久久久一区二区| 色狠狠久久aa北条麻妃| 久久国产精品久久久| 国自产精品手机在线观看视频| 91久久精品国产91久久| 欧美电影免费观看高清| 91在线精品视频| 亚州国产精品久久久| 国产精品伦子伦免费视频| 国产精品久久999| 久久精品成人一区二区三区| 精品国产999| 国产一区二区三区四区福利| 欧美视频国产精品| 国产精品免费小视频| 久久久久亚洲精品国产| 国产精品扒开腿做| 亚洲人成绝费网站色www| 国产成人午夜视频网址| 欧美精品在线观看91| 久久久爽爽爽美女图片| 亚洲欧美福利视频| 亚洲a中文字幕| 青青久久av北条麻妃黑人| 久久久精品中文字幕| 伊人一区二区三区久久精品| 7m精品福利视频导航| 亚洲aⅴ男人的天堂在线观看| 7777kkkk成人观看| 日韩欧美一区二区三区久久| 91在线无精精品一区二区| 91av在线免费观看视频| 亚洲欧美在线一区二区| 亚洲国产精彩中文乱码av| 日韩中文字幕在线视频| 亚洲最大福利视频| 久久久www成人免费精品| 成人免费午夜电影| 91视频九色网站| 日韩免费在线播放| 国产91在线播放| 久久久久久91香蕉国产| 日韩不卡在线观看| 91久久嫩草影院一区二区| 久久精品一偷一偷国产| 久久国内精品一国内精品| 一区二区三区国产视频| 欧美亚洲国产精品| 亚洲国产高清福利视频| 精品国产91乱高清在线观看| 国产一区二区三区免费视频| 69久久夜色精品国产69| 色婷婷久久一区二区| 91网在线免费观看| 欧美日韩电影在线观看| 日韩大片免费观看视频播放| 国产在线精品成人一区二区三区| 日本欧美精品在线| 久久成人一区二区| 久久久亚洲国产天美传媒修理工| 日韩在线视频免费观看高清中文| 国产精品久久久久久超碰| 亚洲黄色av女优在线观看| 亚洲人成电影在线观看天堂色| 国产精品91视频| 亚洲精品国产精品乱码不99按摩| 国产成人免费av| 国产一区二区三区欧美| 国产精品福利久久久| 日韩亚洲欧美中文高清在线| 国产有码在线一区二区视频| 色偷偷91综合久久噜噜| 欧美成人在线网站| 国产精品久久久久久久久久久久| 久久九九热免费视频| 黑人精品xxx一区一二区| 日韩综合中文字幕| 91精品成人久久| 欧美日韩激情美女| 欧美色欧美亚洲高清在线视频| 久久福利网址导航| 成人免费视频在线观看超级碰| 亚洲色图美腿丝袜| 亚洲人午夜精品免费| 成人精品久久av网站| 国产亚洲精品va在线观看| 久久久久久91| 亚洲国产精品yw在线观看| 主播福利视频一区| 亚洲欧美精品suv| 亚洲性生活视频在线观看| 91精品啪在线观看麻豆免费| 精品日韩视频在线观看|