由于是得圖F4的設備,所以首選得圖,最后是不是,不告訴你
得圖iOS SDK集成參看得圖開發者中心:http://developer.detu.com/home/page/show?page_id=41
需求:全屏重復播放本地全景小視頻
實現效果不好演示,得圖只支持真機測試
具體實現如下:
<small>注明:只是簡單實現,官方demo涵蓋了各種類型播放,所以這里抽離出播放視頻來,且將其前綴去掉了(不地道??),但由于與PanoPlayer沖突,所以隨便加了個FP前綴。</small>
VRController.m
// 遵守<PanoPlayDelegate>
// MARK: VR
@property (nonatomic,strong) FPPanoPlayer *panoplayer; // 播放器承載View
@property (nonatomic,strong) PicOrMovItem *item; // 播放選項
@property (nonatomic, assign) PanoVideoPluginStatus playMovStatus; // 播放狀態
懶加載設置選項
#pragma mark - getters
- (FPPanoPlayer *)panoplayer{
if (nil == _panoplayer) {
FPPanoPlayer *panoplayer = [[FPPanoPlayer alloc] init];
[self.view addSubview:panoplayer];
_panoplayer = panoplayer;
_panoplayer.panoPlayer.delegate = self;
_playMovStatus = STATUS_BUFFER_EMPTY;
// 播放模式
// [_panoplayer setViewMode:5];
// 開啟陀螺儀
self.panoplayer.gyroEnable = YES;
// self.panoplayer.panoPlayer.gyroEnable = YES;
[panoplayer mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(@0);
}];
}
return _panoplayer;
}
- (PicOrMovItem *)item{
if (nil == _item) {
// 這些選項就是明面意思
_item = [PicOrMovItem new];
_item.fromWhere = DataFromLocal;
_item.isLiveShow = NO;
_item.fileType = 2; // 1,圖片 2,視頻
NSString *path = [[NSBundle mainBundle] pathForResource:@"2016_032_pano.mp4" ofType:nil];
path = [NSString stringWithFormat:@"file://%@",path];
// 網絡視頻直接UrlString
_item.url = path;
_item.title = @"本地視頻";
}
return _item;
}
XML非常關鍵,一般我們需要替換的就倆:type和url
#pragma mark - 視頻源替換
- (void)setupResource{
// 創建XML
// PanoPlayerUrl *panoPlayerUrl = [[PanoPlayerUrl alloc]init];
NSString *tpl = @"<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \
<DetuVr> \
<settings init=\"pano1\" initmode=\"default\" enablevr=\"false\" title=\"\"></settings> \
\
\
<scenes> \
<scene name=\"pano1\" title=\"\" thumburl=\"\"> \
<preview url=\"\" /> \
<image type=\"video\" url=\"%url\" \
\
\
device=\"0\" \
\
/> <view hlookat='0' vlookat='90' fov='110' viewmode='default' /> \
</scene> \
</scenes> \
</DetuVr>";
tpl = [tpl stringByReplacingOccurrencesOfString:@"%url" withString:self.item.url];
PanoPlayerUrl *panoplayerurl = [[PanoPlayerUrl alloc] init];
[panoplayerurl SetXmlContent:tpl];
[self.panoplayer.panoPlayer Play:panoplayerurl];
}
進行重復播放設置
#pragma mark - PanoPlayer delegate
-(void)PluginVideoOnStatusChanged:(PanoVideoPluginStatus)s{
self.playMovStatus = s;
switch (s) {
case STATUS_PLAYING: {
break;
}
case STATUS_PAUSE: {
break;
}
case STATUS_STOP: {
NSLog(@"stop test");
// 在此進行重播
self.playMovStatus = STATUS_PLAYING;
[self setupResource];
break;
}
case STATUS_FINISH:{
// self.playMovStatus = STATUS_PLAYING;
NSLog(@"finish test");
break;
}
case STATUS_BUFFER_EMPTY:{
break;
}
default: {
break;
}
}
}
播放器必須銷毀
//銷毀播放器
-(void)dealloc{
[self clearPlayer];
[self.panoplayer removeFromSuperview];
}
// 銷毀播放器
-(void)clearPlayer{
if(self.panoplayer.panoPlayer){
[self.panoplayer.panoPlayer cleargc];
self.panoplayer.panoPlayer = nil;
}
}
才剛剛接觸VR播放,共同進步吧!