DLAN投屏技术分享之—乐播投屏精装版二次封装

前言:

先简单介绍一下投屏,投屏分为两个模式。

  • 1·推送模式
DLAN投屏技术分享之—乐播投屏精装版二次封装_第1张图片
21575943980_.pic.jpg

主要用于投屏视频和音乐,投屏之后手机可以关闭或聊微信,电视不会停止播放。玩手机看电视两不误。最常见是视频软件里的tv按钮。

投屏推送的原理:原理就是,让手机与电视连接同一个wifi后,通过投屏协议传输数据。(就好像蓝牙一样的一个专门通道)。点击投屏按钮,手机就开始搜索wifi内有没有投屏广播服务。

手机搜索到电视之后,手机会发送一个视频地址给电视,电视收到地址后,开始播放。投屏后,手机可以控制电视的进度,暂停,下一集,音量之类的指令。

投屏协议有DLNA协议,airplay推送协议,lelink协议(包括以上两者)。

  • 2·镜像模式
DLAN投屏技术分享之—乐播投屏精装版二次封装_第2张图片
大使馆.png

就是投屏手机屏幕或者投屏电脑屏幕;就是同屏显示。主要用于投屏手机PPT、手机桌面、吃鸡王者荣耀等手游;投屏淘宝微,信,抖音等暂时投屏功能的APP。苹果手机的屏幕镜像,安卓手机的多屏互动和乐播投屏手机版的镜像功能,都属于镜像模式。

原理:一样依靠局域网wifi通道,手机搜索到电视之后,开始镜像后,手机会不断截屏就是录屏。手机一边录屏,一般发送给电视。速度超快每秒60帧以上,电视收到之后再展现出来,就成了同屏功能了。

镜像协议有:miracast(难用,被抛弃,不是采用wifi传输),airplay镜像(苹果的,wifi局域网传输)。lelink镜像(乐播投屏的,wifi局域网传输,也支持airplay镜像)。

好了废话不多说,简单的先了解到这里,以下封装由于项目中的时间成本的问题就简单集成了乐播sdk(点击这里去官网查看集成规则)

会用cocoapod集成接着往下看


DLAN投屏技术分享之—乐播投屏精装版二次封装_第3张图片
1575960753061.jpg
温馨提醒小伙伴们在这里注意一下版本

pod 'LBLelinkKit'

DLAN投屏技术分享之—乐播投屏精装版二次封装_第4张图片
1577178973824.jpg
  • 30213 这个版本是xcode 10以前编辑的
    pod 'LBLelinkKit','30213'

如果还在用xcode 10版本的小伙伴跟新了最新的 LBLelinkKit 就会出现 isPlatformVersionAtLeast ***** in LBLelinkKit

  • 下面咱们就讲讲我这个封装都干了什么
DLAN投屏技术分享之—乐播投屏精装版二次封装_第5张图片
1575945174744.jpg

由于功能结构太过于分散,不方便使用,我索性就将其整理在了一起,方便全局调用。
接下来往下看一看,你就明白了(让我们愉快的投起屏来吧!)。

@protocol DLNADelegate 

@optional
/**
 DLNA局域网搜索设备结果
 @param devicesArray  搜索到的设备 名称
 */
- (void)searchDLNAResult:(NSArray *)devicesArray;
/**
 搜索失败
 */
- (void)searchDLNAError:(NSError *)error;

/**
 投屏成功开始播放
 */
- (void)dlnaStartPlay;
/**
 退出投屏成功
 */
- (void)dlnaEndPlay;
/**
 投屏失败
 */
- (void)dlnaErrorPlay;
/**
 播放状态代理回调
 */
- (void)dlna_lelinkPlayer:(LBLelinkPlayer *)player playStatus:(LBLelinkPlayStatus)playStatus;
/**
 播放进度信息回调
 */
- (void)dlna_lelinkPlayer:(LBLelinkPlayer *)player progressInfo:(LBLelinkProgressInfo *)progressInfo;
// 播放错误代理回调,根据错误信息进行相关的处理
- (void)dlna_lelinkPlayer:(LBLelinkPlayer *)player onError:(NSError *)error;


@end
@interface LBManager : NSObject
@property(nonatomic,weak)id delegate;

@property (nonatomic,strong) LBLelinkBrowser * lelinkBrowser;
@property (nonatomic,strong) LBLelinkConnection * lelinkConnection;
@property (nonatomic,strong) LBLelinkPlayer * player;
@property (nonatomic,strong) LBLelinkPlayerItem * item ;
@property (nonatomic,strong) NSArray *services;
//初始化配置
+(void)newLBManager;

+ (LBManager *)sharedDLNAManager;

/**
 搜索投屏服务
 */
-(void)searchService;
/**
 结束搜索投屏服务
 */
-(void)endService;

#pragma mark - 建立连接
/**
 初始化建立链接
 @param index 投放设备list下标
 */
-(void)startLBLelinkConnection:(NSInteger)index;
/**
 初始化建立链接
 @param service 服务信息
 */
-(void)startLBLelinkConnectionService:(LBLelinkService *)service;

/**
 开始链接
 */
-(void)startConnect;
/**
 结束连接
 */
-(void)endConnect;



#pragma mark - 播放控制
/**
 初始化播放
 @param playUrl 播放地址
 */
-(void)setLBLelinkPlayerItemPlayUrl:(NSString *)playUrl;
/**
 初始化播放
 @param playUrl 播放地址
 @param startPosition 播放进度 (秒)
 */
-(void)setLBLelinkPlayerItemPlayUrl:(NSString *)playUrl startPosition:(NSInteger)startPosition;
/**
 进度调节
 @param startPosition 调节进度的位置,单位秒
 */
-(void)setStartPosition:(NSInteger)startPosition;
//判断是音频还是视频
-(BOOL)isPlayType:(NSString *)playUrl;

/**
 播放
 */
-(void)play;
/**
 暂停播放
 */
- (void)pause;

/**
 继续播放
 */
- (void)resumePlay;

/**
 进度调节
 
 @param seekTime 调节进度的位置,单位秒
 */
- (void)seekTo:(NSInteger)seekTime;

/**
 退出播放
 */
- (void)stop;

/**
 设置音量值
 
 @param value 音量值,范围0 ~ 100
 */
- (void)setVolume:(NSInteger)value;

/**
 增加音量
 */
- (void)addVolume;

/**
 减小音量
 */
- (void)reduceVolume;


@end
  • 使用方法如下
//搜索服务设备
    self.dlnaManager = [LBManager sharedDLNAManager];
    self.dlnaManager.delegate = self;
    [self.dlnaManager searchService];
    [self.dlnaView yl_showLoadingHud:@"正在搜索设备..."];
//结束投屏
    [self.dlnaManager endService];

#pragma mark - DLNA-Delegate
- (void)searchDLNAResult:(NSArray *)devicesArray{
    if (devicesArray.count != 0) {
         NSLog(@"发现设备");
    }else{
        NSLog(@"没有发现设备");
    }
}

- (void)dlnaStartPlay{
    NSLog(@"投屏成功 开始播放");
    [self.dlnaManager endService];
//    [self.dlnaManager setLBLelinkPlayerItemPlayUrl:self.playUrl];//推送播放资源地址Url

}
// 播放状态代理回调
-(void)dlna_lelinkPlayer:(LBLelinkPlayer *)player playStatus:(LBLelinkPlayStatus)playStatus{
    switch (playStatus) {
        case LBLelinkPlayStatusCommpleted:
            {
              
            }
            break;
        case LBLelinkPlayStatusLoading:
            {
               
            }
            break;
        case LBLelinkPlayStatusPlaying:
            {
                
            }
            break;
        case LBLelinkPlayStatusPause:
            {
                
            }
            break;
        case LBLelinkPlayStatusError:
            {
                
            }
            break;
        default:
            break;
    }
}
//播放进度
-(void)dlna_lelinkPlayer:(LBLelinkPlayer *)player progressInfo:(LBLelinkProgressInfo *)progressInfo{
    //self.currentTimeLabel.text = [NSString stringWithTime:progressInfo.currentTime];
    //self.progressSlider.maximumValue = progressInfo.duration;
    //self.progressSlider.value = progressInfo.currentTime;
    //self.totalTimeLabel.text = [NSString stringWithTime:progressInfo.duration];
}
-(void)gs_outDLNAPlay{
 NSLog(@"退出投屏 停止播放");
    [self.dlnaManager stop];
    [self.dlnaManager pause];
    [self.dlnaManager endService];
    [self dismissViewControllerAnimated:NO completion:nil];
}

写的东西呢!仅供大家参考,如有误区还望大家及时指正。-最后还是希望能帮助到看到这篇文章的你。

投屏LBManager下载地址(点击就看到了)

你可能感兴趣的:(DLAN投屏技术分享之—乐播投屏精装版二次封装)