当前位置: 首页 > news >正文

纯OC实现iOS DLNA投屏功能了解一下

  • iOS上实现DLNA功能Github上搜一下大多是基于C++的Platinum,于是就想能不能靠OC实现一套方便iOS开发者.于是就有了MRDLNA这个库.

  • DLNA投屏的相关的介绍,协议,具体XML内容就不细说了. 这里介绍一下 MRDLNA这个库的投屏使用.

支持Pod安装MRDLNA

一.搜索设备

设置好代理
self.dlnaManager = [MRDLNA sharedMRDLNAManager];
self.dlnaManager.delegate = self;
复制代码
调用开始搜索后就会搜索整个局域网中支持投视频的设备
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.dlnaManager startSearch];
}
复制代码

二.发现设备后的回调

发现设备后在代理中可以拿到
- (void)searchDLNAResult:(NSArray *)devicesArray{
    NSLog(@"发现设备");
    self.deviceArr = devicesArray;
    [self.dlnaTable reloadData];
}

//devicesArray中拿到的是CLUPnPDevice类型的对象
复制代码
  • Demo中将搜索页面和投屏控制页面分开来的,所以在搜索页面搜索到设备后就把目标设备和播放Url设置给了dlnaManager

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *testUrl = @"http://223.110.239.40:6060/cntvmobile/vod/p_cntvmobile00000000000020150518/m_cntvmobile00000000000659727681";
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if (indexPath.row < self.deviceArr.count) {
        CLUPnPDevice *model = self.deviceArr[indexPath.row];
        self.dlnaManager.device = model;
        self.dlnaManager.playUrl = testUrl;
        DLNAControlVC *controlVC = [[DLNAControlVC alloc] init];
        controlVC.model = model;
        [self.navigationController pushViewController:controlVC animated:YES];
    }
}
复制代码

三.投屏

- (void)viewDidLoad {
    [super viewDidLoad];
    self.dlnaManager = [MRDLNA sharedMRDLNAManager];
    [self.dlnaManager startDLNA];
}
复制代码

四.投屏后的播放控制

/**
 退出
 */
- (IBAction)closeAction:(id)sender {
    [self.dlnaManager endDLNA];
}


/**
 播放/暂停
 */
- (IBAction)playOrPause:(id)sender {
    if (_isPlaying) {
        [self.dlnaManager dlnaPause];
    }else{
        [self.dlnaManager dlnaPlay];
    }
    _isPlaying = !_isPlaying;
}

/**
 进度条seek单位是秒
 */
- (IBAction)seekChanged:(UISlider *)sender{
    NSInteger sec = sender.value * 60 * 60;
    NSLog(@"播放进度条======>: %zd",sec);
    [self.dlnaManager seekChanged:sec];
}

/**
 音量volume建议传0-100之间字符串
 */
- (IBAction)volumeChange:(UISlider *)sender {
    NSString *vol = [NSString stringWithFormat:@"%.f",sender.value * 100];
    NSLog(@"音量========>: %@",vol);
    [self.dlnaManager volumeChanged:vol];
}


/**
 切集
 */
- (IBAction)playNext:(id)sender {
    NSString *testVideo = @"http://wvideo.spriteapp.cn/video/2016/0328/56f8ec01d9bfe_wpd.mp4";
    [self.dlnaManager playTheURL:testVideo];
}
复制代码

转载于:https://juejin.im/post/5aeff0af518825672033fb12

相关文章:

  • Odoo domain写法及运用
  • jQuery学习小结
  • 重塑旅游业的颠覆者:虚拟现实技术和人工智能
  • IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
  • Confluence 6 升级自定义的站点和空间应用你的自定义布局
  • php对字符串的操作
  • js,H5本地存储
  • 关于Linux的交叉编译环境配置中的问题
  • 感知机和神经网络
  • 团队作业6——展示博客(alpha阶段)
  • 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  • Api接口开发实例
  • 填坑app:compileDebugJavaWithJavac
  • [洛谷1156]垃圾陷阱(DP)
  • 微信小程序扫码接口,wx.scanCode(OBJECT)
  • [deviceone开发]-do_Webview的基本示例
  • ES6语法详解(一)
  • Facebook AccountKit 接入的坑点
  • iOS | NSProxy
  • js数组之filter
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MYSQL 的 IF 函数
  • 番外篇1:在Windows环境下安装JDK
  • 聊聊sentinel的DegradeSlot
  • 悄悄地说一个bug
  • 使用docker-compose进行多节点部署
  • 微信小程序开发问题汇总
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 移动端高清、多屏适配方案
  • ​linux启动进程的方式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (ibm)Java 语言的 XPath API
  • (差分)胡桃爱原石
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (九)c52学习之旅-定时器
  • (算法)求1到1亿间的质数或素数
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)平衡树
  • .Net 6.0 处理跨域的方式
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core 6 集成和使用 mongodb
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET MVC之AOP
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NetCore项目nginx发布
  • .ui文件相关
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C#]C#学习笔记-CIL和动态程序集
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [C/C++]关于C++11中的std::move和std::forward