iOS-原生掃碼登錄

AVCaptureDevice

An AVCaptureDevice represents a physical device that provides realtime input media data, such as video and audio.
翻譯:一個AVCaptureDevice代表一個物理設(shè)備,它提供一個實時的輸入媒體數(shù)據(jù),例如:視頻,音頻;

Each instance of AVCaptureDevice corresponds to a device, such as a camera or microphone. Instances of AVCaptureDevice cannot be created directly. An array of all currently available devices can also be obtained using the AVCaptureDeviceDiscoverySession. Devices can provide one or more streams of a given media type. Applications can search for devices matching desired criteria by using AVCaptureDeviceDiscoverySession, or may obtain a reference to the default device matching desired criteria by using +[AVCaptureDevice defaultDeviceWithDeviceType:mediaType:position:].
翻譯:每個AVCaptureDevice實例對象都代表著一個設(shè)備,如:相機,麥克風(fēng);一個AVCaptureDevice實例對象不能被直接創(chuàng)建,可以通過AVCaptureDeviceDiscoverySession獲取當(dāng)前所有可使用的設(shè)備;設(shè)備可以提供一個或者多個給定的的媒體類型的流;應(yīng)用程序可以搜索獲取設(shè)備通過使用AVCaptureDeviceDiscoverySession匹配所需的標(biāo)準(zhǔn),或可能獲得一個引用默認(rèn)設(shè)備通過使用匹配所需的標(biāo)準(zhǔn)通過+[AVCaptureDevice defaultDeviceWithDeviceType:mediaType:position:

AVCaptureSession

AVCaptureSessionAVFoundation的核心類,用于捕捉視頻和音頻,協(xié)調(diào)視頻和音頻的輸入和輸出流;
To perform a real-time capture, a client may instantiate AVCaptureSession and add appropriate AVCaptureInputs, such as AVCaptureDeviceInput, and outputs, such as AVCaptureMovieFileOutput. [AVCaptureSession startRunning] starts the flow of data from the inputs to the outputs, and [AVCaptureSession stopRunning] stops the flow. A client may set the sessionPreset property to customize the quality level or bitrate of the output.
翻譯:執(zhí)行實時捕獲,一個客戶可以實例化AVCaptureSession并添加適當(dāng)AVCaptureInputs,如AVCaptureDeviceInput和輸出,如AVCaptureMovieFileOutput[AVCaptureSession startRunning]啟動從輸入到輸出的數(shù)據(jù)流,[AVCaptureSession stopRunning]停止流单寂⊙悸郑客戶端可以設(shè)置sessionPreset屬性來定制輸出的質(zhì)量級別或比特率逮诲。

AVCaptureInput

AVCaptureInput它是一個抽象類制恍,提供一個實例對象將捕獲到的輸入源鏈接到AVCaptureSession上沪羔。既然是抽象類我們顯然是無法直接使用的赁酝,所以我們只能用其子類AVCaptureDeviceInputAVCaptureScreenInputAVCaptureMetadataInput來創(chuàng)建;

  • AVCaptureDeviceInput:使用該對象從AVCaptureDevice設(shè)備獲取媒體數(shù)據(jù)紊浩,該對象將會被添加給AVCaptureSession管理窖铡。
  • AVCaptureScreenInput:使用該對象從屏幕獲取數(shù)據(jù)(用于錄制屏幕).該對象將會被添加給AVCaptureSeesion管理。
  • AVCaptureMetaDataInput:獲取元數(shù)據(jù)(很少使用).

AVCaptureOutput

AVCaptureOutput:相對應(yīng)于AVCaptureInput坊谁,它也是一個抽象類费彼,用來接收各種輸出數(shù)據(jù),為AVCaptureSession提供一個輸出目標(biāo)接口口芍。所以我們還是只能使用其子類

      AVCaptureStillImageOutput    //使用AVCapturePhotoOutput替代了
      AVCaptureVideoDataOutput     //可以用來處理被捕獲的視頻中未壓縮或壓縮的幀箍铲。
      AVCaptureAudioDataOutput     //可以用來處理從音頻捕獲的未壓縮或壓縮的樣本
      AVCaptureMetadataOutput      //可以用來處理附加連接中的元數(shù)據(jù)對象
      AVCaptureFileOutput          //文件輸出可以開始記錄到一個新的文件使用startRecordingToOutputFileURL:recordingDelegate:方法
      AVCapturePhotoOutput         //它支持照片捕捉生活,preview-sized圖像傳遞,廣泛的顏色,原生,原生+JPG和 原生+ DNG格式

AVCaptureVideoPreviewLayer

AVCaptureVideoPreviewLayer視頻預(yù)覽層,其實可以把它想象成一個畫布鬓椭,我們通過攝像頭拍攝到的畫面就顯示在這個畫布上颠猴。AVCaptureVideoPreviewLayer所呈現(xiàn)的畫面是連續(xù)的,并非單張的靜態(tài)影像小染,當(dāng)然你也可以略過設(shè)定 AVCaptureVideoPreviewLayer 的步驟翘瓮,不顯示攝影機所拍攝到的畫面,這并不會有任何影響裤翩。它是CALayer的子類资盅,它可以實時查看拍照或視頻錄制效果,需要指定對應(yīng)的 AVCaptureSession對象;

基礎(chǔ)使用

//獲取攝像機
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    //創(chuàng)建會話對象
    self.session = [[AVCaptureSession alloc] init];
    //設(shè)置會話采集率
    self.session.sessionPreset = AVCaptureSessionPresetHigh;
    //創(chuàng)建設(shè)備輸入流
    AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//    AVCaptureScreenInput
    //創(chuàng)建數(shù)據(jù)輸出流
    AVCaptureMetadataOutput *metadataOuput = [[AVCaptureMetadataOutput alloc] init];
//    AVCaptureStillImageOutput
//    AVCaptureVideoDataOutput
//    AVCaptureAudioDataOutput
//    AVCaptureMetadataOutput
//    AVCaptureFileOutput
//    AVCapturePhotoOutput
    [metadataOuput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    //創(chuàng)建設(shè)備輸出流
//    AVCaptureVideoDataOutput *videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
//    [videoDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
    //設(shè)置掃描范圍(每一個取值0~1,以屏幕右上角為坐標(biāo)原點)
    metadataOuput.rectOfInterest = CGRectMake(0.05, 0.2, 0.7, 0.6);
    //添加設(shè)備輸入流到會話對象
    if ([self.session canAddInput:deviceInput]) {
        [self.session addInput:deviceInput];
    }
    //添加設(shè)備輸出流到會話對象
    if ([self.session canAddOutput:metadataOuput]) {
        [self.session addOutput:metadataOuput];
    }
//    [self.session addOutput:videoDataOutput];
    //設(shè)置設(shè)備輸出類型;此處為只支持二維碼,需要支持條形碼的再添加AVMetadataObjectTypeCode128Code
    metadataOuput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
    //實例化預(yù)覽圖層, 傳遞_session是為了告訴圖層將來顯示什么內(nèi)容
    self.videoPreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
    // 保持縱橫比呵扛;填充層邊界
    self.videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    self.videoPreviewLayer.frame = CGRectMake(0, 0, K_Screen_Width, K_Screen_Height);
    [self.view.layer insertSublayer:self.videoPreviewLayer atIndex:0];
    
    // 啟動會話
    [self.session startRunning];

//此代理方法為掃碼之后獲取的二維碼信息,在這里可以請求登錄
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末每庆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子今穿,更是在濱河造成了極大的恐慌缤灵,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荣赶,死亡現(xiàn)場離奇詭異凤价,居然都是意外死亡鸽斟,警方通過查閱死者的電腦和手機拔创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富蓄,“玉大人剩燥,你說我怎么就攤上這事×⒈叮” “怎么了灭红?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長口注。 經(jīng)常有香客問我变擒,道長,這世上最難降的妖魔是什么寝志? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任娇斑,我火速辦了婚禮,結(jié)果婚禮上材部,老公的妹妹穿的比我還像新娘毫缆。我一直安慰自己,他們只是感情好乐导,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布苦丁。 她就那樣靜靜地躺著,像睡著了一般物臂。 火紅的嫁衣襯著肌膚如雪旺拉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天棵磷,我揣著相機與錄音账阻,去河邊找鬼。 笑死泽本,一個胖子當(dāng)著我的面吹牛淘太,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蒲牧,長吁一口氣:“原來是場噩夢啊……” “哼撇贺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冰抢,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤松嘶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挎扰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翠订,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年遵倦,在試婚紗的時候發(fā)現(xiàn)自己被綠了尽超。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡梧躺,死狀恐怖似谁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掠哥,我是刑警寧澤巩踏,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站续搀,受9級特大地震影響塞琼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禁舷,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一彪杉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榛了,春花似錦在讶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至战坤,卻和暖如春曙强,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背途茫。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工碟嘴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人囊卜。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓娜扇,卻偏偏與公主長得像错沃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雀瓢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容