SDK for ios 1
x... 7 x... 7 x... 8 x... 9 x SDK... 10 1x SDK&DEMO... 10 2x... 10 3x ATS... 10 4x... 10 5x Demo... 13 6x framework... 14 x SDK... 14 x APPKEY APPSECRETKEY... 14 x... 15 1x... 15 2x... 15 3x... 15 4x... 15 5x... 15 6x... 16 7x... 16 8x... 16 4x... 16 2
10x... 17 11x... 17 12x... 17 13x... 17 14x... 17 x... 18 1x VHMoviePlayer... 19 2x zrtmp{... 19 3x ( HLS,2.3.4 )... 19 4x ( HLS )... 20 5x... 20 6x... 20 7x... 20 8x... 21 9x /... 21 10x... 21 11x... 21 x zvhallapi.h{... 23 1x... 23 2x... 24 3x... 24 4x... 24 x... 24 1x... 25 3
2x... 25 3x... 25 4x z{... 25 5x z{... 25 x... 25 1x... 26 2x... 26 3x... 26 4x z{... 26 x... 26 1x... 26 2x... 26 3x... 26 4x z{... 27 5x z{... 27 x... 27 1x... 27 2x... 28 3x}... 28 x... 29 1x()... 30 2x VHallLivePublishFilter, VhallLivePublish... 30 3x... 30 4xid <VHallLivePublishFilterDelegate> GPUFilterDelegate... 30 4
x... 31 1x... 31 2x... 31 x... 32 1x(VHallMoviePlayerDelegate)... 32 2x UI... 32 x... 32 1x... 32 2x... 33 3x... 33 4x... 33 5x... 34 x... 34 1x z VhallSurveyDelegate{... 34 2x ID... 35 3x... 35 x... 35 xdemo... 37 x K... 38 a)... 38 b)... 38 c) K... 39 x... 40 5
d) 2.3.0 2.4.0... 40 6
x 2016-04-21 V2.1.2 xy 2016-05-06 V2.2.0 xy 2016-07-26 V2.3.0 lkl 2016-09-27 V2.4.0 xy 2016-11-10 V2.5.0 wxx 20 2016-12-20 V2.5.3 wxx MP4 Https 2017-3-1 V2.6.0 wxx 2017-3-13 V2.7.0 V2.7.0 cy x ajn u N?Fv S>g] y 5 }AAC}H.264 RTMP 352*288/640*480/960*540/1280*720 x / / x ios 8.0 z{ iphone 5sz{ ios7.0 RTMP RTMP: 2-4 7
H.264 HLS MP4 K x znew{ x znew{ znew{ znew{ + znew{ x xxx / y y 8
x 1. Key API&SDK 4006826882 y }App_KeyxApp Secret_Key y 2. SDK uv y Ø http://e.vhall.com/home/vhallapi/authlist API/SDK y Ø y 9
Ø Ø y IOS-SDK BundleID yzbundle Identifier Targets General { xsdk 1x SDK&DEMO github }https://github.com/vhall20/vhallsdk-ios-live/releases 2x ios }ios 7.0 iphone }iphone 5 CPU } armv7, arm64 i386 x86_64 y 3x ATS cnhlsvod01.e.vhall.com cnstatic01.e.vhall.com cdn https 4x QCddN?F } 10
11
12
5x Demo 13
6x framework x SDK VHallApi.h xsdk y * N?F ;i]klifn?f * &INNkiaf_jcQ]ijagf6 xappkey AppSecretKey VHallApi.h * 14
hh hhda[kagf5pd<hhda[kagfhhda[kagf aaafajglf[af_rakjhkagfj5in?a[kagfipdlf[jhkagfj ;hiehhf]pmddhhc]p ;hiehhf]pmddhhj][i]kf]p * &mgai]_ajk]i<hh5innkiaf_hhf]pn][i]kf]p5innkiaf_j][i]kf]p6 x VHallLivePublish.h 1x * ;hiegi_akagf ;i]klif * (aafakrakji_akagf5?]ma[]ji_akagfgi_akagf6 2x * >hkli]qa]g ;hie[hkli]?]ma[]kgjakagf <Q>hkli]?]ma[]Kgjakagf=[c <Q>hkli]?]ma[]KgjakagfAigfk ;i]klif * (=JJGafak>hkli]Qa]g5<Q>hkli]?]ma[]Kgjakagf[hkli]?]ma[]Kgjakagf6 3x (=JJGafak<lag6 4x (=JJGjkik<lag>hkli]6 5x 15
* ;hiehie hieu; a V8D hieu; [[]jjxkgc]f V8 * (mgajkikgam]5in?a[kagfiphie6 6x * jkikgam]jkikgam]jkghgam] * (mgajkghgam]6 7x * ;hie[hkli]?]ma[]kgjakagf ;i]klif * (=JJGjnh>e]ij5<Q>hkli]?]ma[]Kgjakagf[hkli]?]ma[]Kgjakagf6 8x * * (mgaj]kagl[jagafk5>bkgafkf]nkgafk6 4x * ;hieggena] 16
* (mga[hkli]?]ma[]tgge5>badgkggena]6 10x * * (=JJGj]k?]ma[]Ogi[Hg]d5<Q>hkli]Ogi[Hg][hkli]Ogi[Hg]6 11x * * (=JJGi][gff][k6 12x * 'hh * (mgaaj[gff][k6 13x * * (mga]jkgipjzb][k6 14x >e]i@f_af]mkeh?]d]_k] Jh]f>JINON),x * ;hieae_] * (mga^aijk>hkli]de_]5pdde_]ae_]6 * 17
;hiedam]nkklj ;hieaf^g r; [g] 5oo'; [gfk]fk }ooos [g]}*z+',w{[gfk]fk} 'x * (mgahlzdajnkklj5gam]nkkljdam]nkkljnakdf^g5in?a[kagfipaf^g6 *** kph]]^inx@iphafk'gam]nkklj r cgam]nkklj=l^^]iaf_nkik8+'** cgam]nkklj=l^^]iaf_nkgh8,'** cgam]nkkljklj>gff][knl[[]]8-'** cgam]nkkljklj>gff][k@iigi8.'** cgam]nkklj>?i>gff][knl[[]]8/'**>?i cgam]nkklj>?i>gff][k@iigi80'**>?i cgam]nkkljkie@iigi81'** cgam]nkkljm][m@iigi82'** cgam]nkkljn]f@iigi83'** cgam]nkklj?gnfdgnh]]84'** cgam]nkkljphdgnh]]8,+'** cgam]nkklji]kngicnkklj8,,'**98+7+ ** cgam]nkkljb]kpid@iigi8,-'** cgam]nkkljrak<fc]a_k8,.'** cgam]nkklj<lagdf^g8,/** s6 cgam]nkkljb]kpid@iigi 10030 10401 10402 ID 10403 10409 10410 10411 x VHallMoviePlayer.h 18
1x VHMoviePlayer * QCHgma]Kdp]i ;hie]d]_k] ;i]klifqchgma]kdp]i * (afjkf[]kph]afakrak?]d]_k]5a7qcddhgma]kdp]i?]d]_k]9]d]_k]6 2x zrtmp{ * ;hiehie hieu; a V8D hieu; fe] V8 hieu; ]ead V8 hieu; hjj V8FF * (=JJGjkikKdp5IN?a[kagfiphie6 3x ( HLS,2.3.4 ) * CGN ;hiehie hieu; a V8D hieu; fe] V8 hieu; ]ead V8 hieu; hjj V8FF ;hieegma]kdp]i>gfkigdd]ihkhgma]kdp]i>gfkigdd]i * (mgajkikkdp5in?a[kagfiphieegma]kdp]i5hkhgma]kdp]i>gfkigdd]i egma]kdp]i>gfkigdd]i6 19
4x ( HLS ) * CGN ;hiehie hieu; a V8D hieu; fe] V8 hieu; ]ead V8 hieu; hjj V8FF ;hieegma]kdp]i>gfkigdd]ihkhgma]kdp]i>gfkigdd]i *(mgajkikkdpz[c5in?a[kagfiphie egma]kdp]i5hkhgma]kdp]i>gfkigdd]iegma]kdp]i>gfkigdd]i6 5x * ;hieelk] * (mgaj]khlk]5=jjgelk]6 6x * ;hieja]^dgku+)+t,)+v * &mgaj]knpjqgdle]na]5^dgkja]6 7x * * &^dgk_]knpjqgdle]na]6 20
8x * * (mgajkghkdp6 9x / * z{ ;i]klif y y * (QCddHgma]?]^afakagfj]k?]^afakagf5QCddHgma]?]^afakagf]^afakagf6 ** 直播视频清晰度 kph]]^inx@iphindfk]_]i'qcddhgma]?]^afakagf r QCddHgma]?]^afakagfJia_af8+'** QCddHgma]?]^afakagfPC?8,'** QCddHgma]?]^afakagfC?8-'** QCddHgma]?]^afakagfN?8.'** QCddHgma]?]^afakagf<lag8/** s6 10x * * (mga]jkigphgam]kdp]i6 11x QCHgma]Kdp]i?]d]_k] Jh]f>JINON) * ;hieegma]kdp]i ;hieaf^gr; [g] 5oo'; [gfk]fk }ooos 21
[g]}z+',w{[gfk]fk} * (mga[gff][knl[[]]5qchgma]kdp]iegma]kdp]iaf^g5in?a[kagfipaf^g6 * ;hieegma]kdp]i ;hieaf^gr; [g] 5oo'; [gfk]fk }ooos [g]}z+',w{[gfk]fk} * (mgazl^^]inkik5qchgma]kdp]iegma]kdp]iaf^g5in?a[kagfipaf^g6 * ;hieegma]kdp]i ;hieaf^gr; [g] 5oo'; [gfk]fk }ooos [g]}z+',w{[gfk]fk} * (mgazl^^]inkgh5qchgma]kdp]iegma]kdp]iaf^g5in?a[kagfipaf^g6 * ;hieegma]kdp]i ;hieaf^gczhjr; [g] 5oo'; [gfk]fk }ooos [g]}z+',w{[gfk]fk} * (mgagnfdgnh]]5qchgma]kdp]iegma]kdp]iaf^g5in?a[kagfipaf^g6 * ;hieegma]kdp]i ;hieaf^gr; [g] 5oo'; [gfk]fk }ooos [g]}z+',w{[gfk]fk}[gfk]fk * (mgaf]krgicnkklj5qchgma]kdp]iegma]kdp]iaf^g5in?a[kagfipaf^g6 * ;hie]^afakagfgajk * (mgaqa]g?]^afakagfgajk5in<iip]^afakagfgajk * ;hiedam]kdp@iigioph] ;hieaf^gr; [g] 5oo'; [gfk]fk }ooos [g]}z+',w{[gfk]fk} 22
* (mgahdp@iigi5gam]kdp@iigioph]dam]kdp@iigioph]af^g5in?a[kagfipaf^g6 ** kph]]^inx@iphafk'gam]kdp@iigioph] r cgam]kdpb]kpid@iigi8cgam]nkkljb]kpid@iigi'**ikehpid cgam]kdpkie@iigi8cgam]nkkljkie@iigi'** cgam]kdpm][m@iigi8cgam]nkkljm][m@iigi'** cgam]kdp>?i>gff][k@iigi8cgam]nkklj>?i>gff][k@iigi'**>?i cgam]kdpejgfagied@iigi8,0**bjgf s6 cgam]kdpb]kpid@iigi 10030 10402 ID 10405 10049 10404 KEY 10046 10405 ID 10047 10048 10410 xzvhallapi.h{ WebApi y y http://e.vhall.com/home/vhallapi/active#user_register_ y 1x * ;hie<[[glfk<kd ;hiekjjngi ;hienl[[]jj=dg[c ;hieaadli]=dg[c 23
* &mgadg_afrak<[[glfk5innkiaf_<[[glfk hjjngi5innkiaf_kjjngi jl[[]jj5mgawnl[[]jj=dg[c ^adli]5mgawin@iigi]iigiaadli]=dg[c6 2x * ;hienl[[]jj=dg[c ;hieaadli]=dg[c ;i]jldk * &mgadg_glk5mgawnl[[]jj=dg[c ^adli]5mgawin@iigi]iigiaadli]=dg[c6 3x * ;i]jldk * &=JJGajGg ]Df6 4x * ;i]jldk * &INNkiaf_[lii]fk<[[glfk6 x WebApi y y http://e.vhall.com/home/vhallapi/active#user_register_ 24
y VHallChat.h 1x _chat = [[VHallChat alloc] init]; 2x _chat.delegate = self; 3x * =dg[c =dg[c =dg[c} c]p5[g] mdl]5[gfk]fk * (mgaj]fhj_5innkiaf_ej_jl[[]jj5mgawjl[[]jj^ad]5mga WIN?a[kagfip^ad]?ki]jdlkAad]>ddZ[c6 4x z{ * ]d]_k] QCddJfdaf]Nkk]Hg]d * - (void)reciveonlinemsg:(nsarray *)msgs; 5x z{ * ]d]_k] QCdd>kHg]d * - (void)recivechatmsg:(nsarray *)msgs; x WebApi y y http://e.vhall.com/home/vhallapi/active#user_register_ y 25
VHallQAndA.h 1x _QA = [[VHallQAndA alloc] init]; 2x _QA.delegate = self; 3x * =dg[c =dg[c =dg[c} c]p5[g] mdl]5[gfk]fk * (mgaj]fhj_5innkiaf_ej_jl[[]jj5mgawjl[[]jj^ad]5mga WIN?a[kagfip^ad]?ki]jdlkAad]>ddZ[c6 4x z{ * ]d]_k] QCddL<Hg]d * - (void)reciveqamsg:(nsarray *)msgs; x VHallLottery.h 1x Xdgkk]ip8UUQCddGgkk]ipddg[VafakV6 2x Xdgkk]ip)]d]_k]8j]d^6 3x * ;hieaf^g 26
c]p5lj]ixfe] c]p5hgf] =dg[c =dg[c =dg[c} c]p5[g] mdl]5[gfk]fk * (mgajlzeakggkk]ipdf^g5in?a[kagfipaf^gjl[[]jj5mgawjl[[]jj ^ad]5mgawin?a[kagfip^ad]?ki]jdlkaad]>ddz[c6 4x z{ * ]d]_k] QCddNkikGgkk]ipHg]d * (mgajkikggkk]ip5qcddnkikggkk]iphg]dej_6 5x z{ * ]d]_k] QCdd@fGgkk]ipHg]d * (mga]fggkk]ip5qcdd@fggkk]iphg]dej_6 x u+vu+v y VHallMoviePlayer.h } 1x 27
2x 3x} }~ nil~} } 28
} SDK demo } } } -(void)pptscrollnextpagechangeimagepath:(nsstring*)changeimagepath, x VHallLivePublishFilter.h( VHallLivePublish) VHallLivePublish ( CPUImage VhallFilterSDK/libImage.a) 1000k 29
1x() 2x VHallLivePublishFilter, VhallLivePublish 3x }openfilter=yes /** * setbeautifyfilterwithbilateral:brightness:saturation: VHall GPUFilterDelegate == nil * @param distancenormalizationfactor // A normalization factor for the distance between central color and sample color. * @param brightness // The brightness adjustment is in the range [0.0, 2.0] with 1.0 being no-change. * @param saturation // The saturation adjustment is in the range [0.0, 2.0] with 1.0 being no-change. * return BOOL YES NO */ 4xid <VHallLivePublishFilterDelegate> GPUFilterDelegate GPUFilterDelegate nil, nil SDK 30
x VHallComment.h _comment = [[VHallComment alloc] init]; 1x /** * * Block * Block * Block} * key:code * value:content */ - (BOOL)sendComment:(NSString *)comment success:(void(^)())success failed:(void (^)(NSDictionary* faileddata))reslutfailedcallback; 2x /** z A B commentid { * *@param limit 20 50 *@param pos 0 * Block * Block * Block} * key:code * value:content -(void)gethistorycommentpagecountlimit:(nsinteger)limit offset:((nsinteger) pos success(void(^)(nsarray *msgs))success failed:(void(^)(nsdictionary * failedata))reslutfailedcallback 31
x 1x(VHallMoviePlayerDelegate) /** * * * */ - (void)announcement:(nsstring*)content publishtime:(nsstring*)time; 2x UI x VHallSign.h zvhallsigndelegate{ 1x /** 32
* * * */ - (void)startsign; 2x /** * * * */ - (void)signremainingtime:(nstimeinterval)remainingtime; 3x /** * * * */ - (void)stopsign; 4x /** * * Block * Block * Block} * key:code * value:content * 10010 * 10011 * 10017 id * 10807 id 33
* 10813 ID * 10814 * 10815 */ -(BOOL)signSuccess:(void(^)())success failed:(void (^)(NSDictionary* faileddata))reslutfailedcallback; 5x * * (mga[f[]dna_f6 x VHallSurvey.h 1x z VhallSurveyDelegate{ * * (mgai][]am]nlim]iphj_j5in<iipej_6 34
2x ID * ;hiejlim]pdd ;hien]zdd ;hiejl[[]jj=dg[c ;hiei]jdlkaad]>ddz[c=dg[c =dg[c} c]p5[g] mdl]5[gfk]fk * (mga_]knlim]ip>gfk]fkraknlim]pd5innkiaf_jlim]pd n]zdfid5innkiaf_n]zdjl[[]jj5mgawqcddnlim]pej_jjlim]p^ad]5mga WIN?a[kagfip^ad]?ki]jdlkAad]>ddZ[c6 3x * =dg[c =dg[c =dg[c} c]p5[g] mdl]5[gfk]fk * (mgaj]fhj_5in<iipej_jl[[]jj5mgawjl[[]jj^ad]5mga WIN?a[kagfip^ad]?ki]jdlkAad]>ddZ[c6 x ** kph]]^inx@iphafk'?]ma[]ji_akagf r c?]ma[]kgikiak' c?]ma[]gfnh[]ma_k' c?]ma[]gfnh[]g]^k 35
s6 ** kph]]^inx@iphafk'qa]gm]jgdlkagf r cggnqa]gm]jgdlkagf8+'**.0--33 cb]f]idqa]gm]jgdlkagf'**1/+/3+ ccqa]gm]jgdlkagf'**41+0/+ cc?qa]gm]jgdlkagf**,-3+2-+ s6 *** kph]]^inx@iphafk'gam]nkklj r cgam]nkklj=l^^]iaf_nkik8+'** cgam]nkklj=l^^]iaf_nkgh8,'** cgam]nkkljklj>gff][knl[[]]8-'** cgam]nkkljklj>gff][k@iigi8.'** cgam]nkklj>?i>gff][knl[[]]8/'**>?i cgam]nkklj>?i>gff][k@iigi80'**>?i cgam]nkkljkie@iigi81'** cgam]nkkljm][m@iigi82'** cgam]nkkljn]f@iigi83'** cgam]nkklj?gnfdgnh]]84'** cgam]nkkljphdgnh]]8,+'** cgam]nkklji]kngicnkklj8,,'**98+7+ cgam]nkkljb]kpid@iigi8,-'** cgam]nkkljrak<fc]a_k8,.'** cgam]nkklj<lagdf^g8,/** s6 ** kph]]^inx@iphafk'gam]kdp@iigioph] r cgam]kdpb]kpid@iigi8cgam]nkkljb]kpid@iigi'**ikehpid cgam]kdpkie@iigi8cgam]nkkljkie@iigi'** cgam]kdpm][m@iigi8cgam]nkkljm][m@iigi'** cgam]kdp>?i>gff][k@iigi8cgam]nkklj>?i>gff][k@iigi'**>?i cgam]kdpejgfagied@iigi8,0**bjgf s6 **MOHKQa]n 36
kph]]^inx@iphafk'mohkhgma]n[daf_hg] r cmohkhgma]n[daf_hg]igf]'**igj[daf_ cmohkhgma]n[daf_hg]<jh][kaak'**pfa^giej[d]lfkadgf]ae]fjagf^akj cmohkhgma]n[daf_hg]<jh][kaadd'**pfa^giej[d]lfkadk]egma]^addjk] majazd]zglfj)jf]ae]fjagfepm][dahh][gfk]fkj s6 xdemo DEMO UI y } 1{ ID}Demo e.vhall.com 2{Token}Demo http://e.vhall.com/api/test verify/access-token 24 3{} 300 Kbps 4{} 5{} 352*288/640*480/960*540/1280*720 6{K } K Server } 1{ Id: Server VHALL webinar/list 2{AccessToken} Server VHALL verify/access-token y } Demo CONSTS.h y } xy } 1{}http://e.vhall.com/auth/register 2{}http://e.vhall.com/home/vhallapi/active#user_register_ 37
x K xy }http://e.vhall.com/home/vhallapi/embed a) b) 2.1 1{} y}webinar/whole-auth-url K URL 2) } http://e.vhall.com/webinar/auth/123456789 id 3{}(webinar/create webinar/update) 4{}use_global_k 0 1, K ~ 0 y 2.2 Vhall URL k 2.3 Vhall URL(auth_url) HTTP POST email k POST y k y URL(auth_url) pass, fail } multipart/form-data post y 38
2.4 Vhall URL y pass URL'' c) K,{ N?Fc l } kkh5**])mdd)[ge*n]zafi*afaklj]i*,-./01234:]ead8k]jk;mdd)[ge!fe]8m ajakgi!c8 l N?F'.fe]']ead'hjj ]ead5y]ead ]eady D?]eadD?,-./01;geaf)[ge',-./01;geaf)[ge]eady fe]5yx ypoa(3pmglid]f[g]y c} y * ;hiehie hieu; a V8D hieu; fe] V8N?F hieu; ]ead V8N?F hieu; hjj V8F *(=JJGjkikKdp5IN?a[kagfiphie6 * CGN ;hiehie hieu; a V8D hieu; fe] V8N?F hieu; ]ead V8N?F hieu; hjj V8F ;hieegma]kdp]i>gfkigdd]ihkhgma]kdp]i>gfkigdd]i *(mgajkikkdpz[c5in?a[kagfiphieegma]kdp]i5hkhgma]kdp]i>gfkigdd]i egma]kdp]i>gfkigdd]i6 39
-{QddPMGlkXlidCOOKKJNO ]eadckjnoycy PMGlkXlidhjj'^ad }eldkahik*^gie(khgjky.{qddpmgyhjj PMG"" /{ PMGF} l }F l }Fy l y 0{F F}D?xQddD?xz,42+(+,(+,{ =j]1/]opmgyf >[]?=>[]F?=>[] x d) 2.3.0 2.4.0 1) SDK uv y Ø http://e.vhall.com/home/vhallapi/authlist API/SDK y Ø y Ø y Ø IOS-SDK BundleID yz Bundle Identifier Targets General { 2) AppDelegate.m #import "VHallApi.h" 40
- (BOOL)application:(UIApplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { [VHallApi registerapp:appkey SecretKey:AppSecretKey];// } 3) VHallLivePublish.h - (void)startlive:(nsdictionary*)param;// AppKey AppSecretKey - (void)stoplive; // disconnect startlive startlive stoplive - (void)disconnect; //, app x reconnect y z} disconnect stoplive{ bitrate -> videobitrate // videobitrate 4) VHallMoviePlayer.h -(BOOL)startPlay:(NSDictionary*)param;//, AppKey AppSecretKey -(void)startplayback:(nsdictionary*)param movieplayer:(mpmovieplayercontroller *)movieplayercontroller; // AppKey AppSecretKey 41