EasyAR應(yīng)用之iOS原生掃卡播放視頻

為什么選EasyAR

AR的廣泛應(yīng)用

AR(Augmented Reality)即增強(qiáng)現(xiàn)實(shí),是一種實(shí)時(shí)地計(jì)算攝影機(jī)影像的位置及角度并加上相應(yīng)圖像帽氓、視頻盟猖、3D模型的技術(shù),這種技術(shù)的目標(biāo)是在屏幕上把虛擬世界套在現(xiàn)實(shí)世界并進(jìn)行互動(dòng)方援。

近幾年AR的應(yīng)用越來越廣泛没炒,樣式繁多的AR應(yīng)用場(chǎng)景給app的效果提供了更多的可能,AR的互動(dòng)性體驗(yàn)也逐漸被廣泛接受犯戏,成為用戶十分喜愛并樂于嘗試的功能送火。

主流SDK

  • ARToolKit

  • Vuforia

  • ARKit

  • ARCore

  • HiAR

  • EasyAR

EasyAR的優(yōu)勢(shì)

1. 較完善的中文文檔

1. 云識(shí)別

使用SDK創(chuàng)建EasyAR工程

資源下載與文檔查看

開發(fā)者可以登錄EasyAR官網(wǎng)查看EasyAR的服務(wù)和相關(guān)文檔;

通過資料下載可以下載相關(guān)SDK(含Unity或不含Unity)和示例程序先匪。

注冊(cè)Licence Key添加所需SDK

首先注冊(cè)Licence Key种吸,添加SDK到工程中。

所需添加其他庫如下圖:

添加庫

運(yùn)行示例程序

從官網(wǎng)下載的示例程序必須運(yùn)行在真機(jī)上呀非,且需要將Enable Bitcode設(shè)置為NO坚俗。

設(shè)置Bitcode

實(shí)現(xiàn)掃描實(shí)物播放對(duì)應(yīng)視頻功能

該功能基于模式識(shí)別和AR技術(shù),官方示例程序中的HelloARVideo已經(jīng)實(shí)現(xiàn)了根據(jù)本地圖片識(shí)別播放對(duì)應(yīng)視頻的功能岸裙。在此基礎(chǔ)上猖败,本博客旨在靈活運(yùn)用EasyAR的相關(guān)功能,按類別將所要識(shí)別的目標(biāo)圖片儲(chǔ)存于云端降允,用戶可按需主動(dòng)獲取相關(guān)資源文件恩闻,在獲取目標(biāo)圖片的基礎(chǔ)下實(shí)現(xiàn)識(shí)別并在線播放對(duì)應(yīng)視頻的功能。

code

1. 從服務(wù)端下載目標(biāo)圖片壓縮包并解壓


- (void)downloadFileWithURL:(NSURL *)URL {

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    AFURLSessionManager *mannager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    hud.mode = MBProgressHUDModeAnnularDeterminate;

    hud.label.text = @"正在更新資源包…";

    _downloadTask = [mannager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {

        if (downloadProgress) {

            CGFloat currentProgress = (CGFloat)downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;

            dispatch_async(dispatch_get_main_queue(), ^{

                hud.progress = currentProgress;

                hud.label.text = [NSString stringWithFormat:@"正在更新資源包:%.0f%%\n",currentProgress * 100];

            });

            NSLog(@"%@",[NSString stringWithFormat:@"當(dāng)前進(jìn)度為:%.2f%%",currentProgress * 100]);

        }

    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {

        // 將zip文件下載保存到沙盒的Cache路徑下

        NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

        NSString *path = [cachePath stringByAppendingString:response.suggestedFilename];

        return [NSURL fileURLWithPath:path];

    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {

        [hud hideAnimated:YES];

        NSString *imgFilePath = [filePath path];

        NSFileManager *fileManger = [NSFileManager defaultManager];

        NSString *imgaesPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

        // remove 

        [fileManger removeItemAtPath:imgaesPath error:nil];

        [fileManger createDirectoryAtPath:imgaesPath withIntermediateDirectories:YES attributes:nil error:nil];

        // unzip 將zip文件解壓并保存到Document下

        [SSZipArchive unzipFileAtPath:imgFilePath toDestination:imgaesPath];

        // scan 

        ARViewController *arVC = [[ARViewController alloc] init];

        [self presentViewController:arVC animated:YES completion:nil];

    }];

    [_downloadTask resume];

}

2. 加載targets

helloarinitialize方法中使用loadFromImage方法加載目標(biāo)圖片剧董。


for (int i = 0; i < targetCount; i++) {

        loadFromImage(tracker, imageName,i);

    }

在中loadFromImage修改json生存方法


NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    easyar_ImageTarget * target = [easyar_ImageTarget create];

    NSString * absolutePath = [documentPath stringByAppendingString:[NSString stringWithFormat:@"/targets/%@",name]];

    NSString *uid = [NSString stringWithFormat:@"%d",index];

    NSString * jstr = [@[@"{\n"

        " \"images\" :\n"

        " [\n"

        " {\n"

        " \"name\" : \"", name, @"\",\n"

        " \"image\" : \"", absolutePath, @"\",\n"

        " \"uid\" : \"", uid, @"\"\n"

        " }\n"

        " ]\n"

        "}"] componentsJoinedByString:@""];

    [target setup:jstr storageType:(easyar_StorageType_Assets | easyar_StorageType_Json) name:@""];

    [tracker loadTarget:target callback:^(easyar_Target * target, bool status) {

        NSLog(@"load target (%d): %@ (%d)", status, [target name], [target runtimeID]);

    }];

3. 根據(jù)目標(biāo)圖片uid指定特定視頻鏈接


if (status == easyar_TargetStatus_Tracked) { // 追蹤到目標(biāo)

            int runtimeID = [target runtimeID];

            if (active_target != 0 && active_target != runtimeID) {

                [video onLost];

                video = nil;

                tracked_target = 0;

                active_target = 0;

            }

            if (tracked_target == 0) {

                if (video == nil && [video_renderers count] > 0) {

                    NSString * target_uid = [target uid];

                    NSArray *videoArr = @[@"http://img.dpm.org.cn/Uploads/File/2018/04/19/haitang.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/11/27/wanhean.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/10/30/fxyxd.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/05/03/u5909ad6a125e1.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/05/03/u5909ad888a6c0.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/05/03/repair_new.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21fa8ed99a.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21f1215622.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21f012d948.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21fa8ed99a.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21f1215622.mp4",

                                          @"http://img.dpm.org.cn/Uploads/File/2017/03/22/u58d21f012d948.mp4"];

                    if ([[video_renderers objectAtIndex:[target_uid integerValue]] texid] != 0) {

                        NSString *urlStr = [videoArr objectAtIndex:[target_uid integerValue]];

                        video = [[ARVideo alloc] init];

                        [video openStreamingVideo:urlStr texid:[[video_renderers objectAtIndex:[target_uid integerValue]] texid]];

                        current_video_renderer = [video_renderers objectAtIndex:[target_uid integerValue]];

                    }

Demo已上傳至GitHub

BTW: 由于EasyAR的文檔不盡完善幢尚,且對(duì)iOS的支持不是很好,可嘗試蘋果官方系統(tǒng)庫ARKit的實(shí)現(xiàn)ARKit應(yīng)用之識(shí)別圖像播放視頻

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翅楼,一起剝皮案震驚了整個(gè)濱河市侠草,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犁嗅,老刑警劉巖边涕,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡功蜓,警方通過查閱死者的電腦和手機(jī)园爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來式撼,“玉大人童社,你說我怎么就攤上這事≈。” “怎么了扰楼?”我有些...
    開封第一講書人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長美浦。 經(jīng)常有香客問我弦赖,道長,這世上最難降的妖魔是什么浦辨? 我笑而不...
    開封第一講書人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮流酬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芽腾。我一直安慰自己旦装,他們只是感情好摊滔,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惭载,像睡著了一般。 火紅的嫁衣襯著肌膚如雪描滔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評(píng)論 1 314
  • 那天含长,我揣著相機(jī)與錄音,去河邊找鬼拘泞。 笑死纷纫,一個(gè)胖子當(dāng)著我的面吹牛陪腌,可吹牛的內(nèi)容都是我干的烟瞧。 我是一名探鬼主播,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼参滴,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了砾赔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤暴心,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后杂拨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扳躬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年脆诉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甚亭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贷币。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亏狰,靈堂內(nèi)的尸體忽然破棺而出役纹,到底是詐尸還是另有隱情,我是刑警寧澤暇唾,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布促脉,位于F島的核電站,受9級(jí)特大地震影響策州,放射性物質(zhì)發(fā)生泄漏瘸味。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一够挂、第九天 我趴在偏房一處隱蔽的房頂上張望旁仿。 院中可真熱鬧,春花似錦孽糖、人聲如沸枯冈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尘奏。三九已至,卻和暖如春病蛉,著一層夾襖步出監(jiān)牢的瞬間炫加,已是汗流浹背瑰煎。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琢感,地道東北人丢间。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像驹针,于是被迫代替她去往敵國和親烘挫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

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

  • 昨天柬甥,公司體檢報(bào)告下發(fā)饮六,男同事們只要平時(shí)喝酒還欠缺鍛煉的,基本上都有點(diǎn)亞健康苛蒲。不知怎么卤橄,忽然聊到了年齡,噢臂外,這個(gè)讓...
    方土令閱讀 82評(píng)論 0 0
  • 我喜歡聽雨窟扑,喜歡聽故鄉(xiāng)的細(xì)雨,更喜歡傾聽它那優(yōu)美而又柔和的聲音漏健。 今日初晨的細(xì)雨嚎货,從天空中淅淅瀝瀝地散落下來,一切...
    櫻之熙閱讀 1,105評(píng)論 2 6
  • 覺察與療愈 一蔫浆,看上面第一張圖片殖属,回答以下問題 1.你看到了什么?看到了來自五湖四海的孩子們?cè)跉g呼著 2.什么情境...
    我心安住閱讀 146評(píng)論 0 0