ios MobileVLCKit的截屏和錄屏功能

第一、截屏功能

項目需求,點擊截屏按鈕,對當前直播頁面截屏并且保存到相冊。

MobileVLCKit這個庫本身有提供截屏的接口

1、定義VLCMediaPlayer屬性

@property(nonatomic,strong)VLCMediaPlayer * player;

2、創(chuàng)建VLCMediaPlayer

-(VLCMediaPlayer *)player{

? if(!_player) {

? ? //緩存策略設置

? ? //NSDictionary * dict=@{@"network-caching":@"100"};

? ? VLCMedia * media=[VLCMedia mediaWithURL:[NSURL URLWithString:self.playUrl]];

? ? media.delegate=self;

? ? //[media addOptions:dict];

? ? _player = [[VLCMediaPlayer alloc] init];

? ? //設置硬件解碼

? ? [_player setDeinterlaceFilter:@"blend"];

? ? _player.media=media;

? ? _player.drawable = self;

? ? _player.media.delegate=self;

? ? _player.delegate = self;

? }

? return _player;

}

3、調(diào)用VLCMediaPlayer的截屏接口

?[self.player saveVideoSnapshotAt:path withWidth:SCREEN_WIDTH andHeight:SCREEN_WIDTH * 190 / 360];

但是這么做會有個問題,因為saveVideoSnapshotAt這個截屏的接口需要在視頻已經(jīng)開始播放的時候,調(diào)用才會有效,否則會crash。而直播一開始拉流的時候都有一個緩沖期,所以需要判斷視頻什么時候開始正式播放。這里利用的是kvo監(jiān)聽:

// 添加監(jiān)聽

- (void)addObserver

{

? // 監(jiān)聽VLC對象屬性(時間和播放)

? [_player addObserver:self forKeyPath:@"remainingTime" options:0 context:nil];

? [_player addObserver:self forKeyPath:@"isPlaying" options:0 context:nil];

}

// 移除監(jiān)聽

- (void)removeObserver

{

? [_player removeObserver:self forKeyPath:@"isPlaying"];

? [_player addObserver:self forKeyPath:@"remainingTime" options:0 context:nil];

}

// kvo監(jiān)聽回調(diào)

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void*)context {

? NSArray*subviews = [self ?subviews];

? if(subviews.count>0) {//因為當開始播放的時候,MobileVLCKit庫會自己添加一個子view,因此這里判斷

//當這個子View存在的時候,說明視頻已經(jīng)開始播放了,這個時候才去addsubview(截屏按鈕),否則截屏按鈕會被那個播放的子view覆蓋,點擊無效。

? ? [(UIView*)subviews[0]addSubview:self.shotBtn];

? ? [(UIView*)subviews[0]bringSubviewToFront:self.shotBtn];

? ? self.printBtn.layer.zPosition = 10;

? }

}


第二:錄屏功能

MobileVLCKit這個庫的3.2.0版本新增了錄屏接口,分別是以下四個:

startRecordingAtPath:path //開始錄屏調(diào)該接口,這里有個關鍵點,path只能傳directory路徑,而不是錄制好的文件名字。MObileVLCKit自帶的錄屏功能,錄制出來的視頻默認是.ts后綴格式的視屏。

stopRecording //結(jié)束錄屏調(diào)該接口

另外兩個是代理:

//錄屏回調(diào)

- (void)mediaPlayerStartedRecording:(VLCMediaPlayer*)player

{

? NSLog(@"開始錄制");

}

- (void)mediaPlayer:(VLCMediaPlayer*)player recordingStoppedAtPath:(NSString*)path

{

? NSLog(@"結(jié)束錄制: %@",path);//這里的path則是錄制好的視頻保存的路徑,與上面startRecordingAtPath:path接口的保存路徑是一致的。

? if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path))

? {

? ? ? UISaveVideoAtPathToSavedPhotosAlbum(path,self,@selector(video:didFinishSavingWithError:contextInfo:),nil);//由于是.ts后綴格式的視頻,保存到相冊并不能從相冊中 查找到

? }

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容