iOS 飞屏功能的实现(UDPSocket协议广播机制)
来源:互联网 发布:c语言并查集简单例题 编辑:程序博客网 时间:2024/05/29 15:04
飞屏,用手机播放电脑端视频的功能,一般常见于主打VR资源的影音类App。
大体思路:基于UDP协议的广播机制
电脑端不断发送udp广播,广播内容可精简为:端口号;
App用udpSocket扫描,得到对应端口号信息,解析出IP地址,拼接数据,请求数据。
移动端的实现:
1.导入第三方库:CocoaAsyncSocket,引用文件
#import <GCDAsyncUdpSocket.h>
2.遵守协议:
<GCDAsyncUdpSocketDelegate>
3.初始化对象,启动监听:
_clientSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError * error = nil; [_clientSocket setIPv6Enabled:NO]; //每次扫描,你会收到两条信息,IPv4和IPv6的,根据需求做取舍。 [_clientSocket bindToPort:8080error:&error];// 8080,与电脑端统一的端口号 if (error) { PVRLog(@"clientSocket_error:%@",error); } else { [_clientSocket beginReceiving:&error]; PVRLog(@"监听成功开始接收信息"); }
4.代理回调
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext { NSString *sendMessage = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address]; uint16_t port = [GCDAsyncUdpSocket portFromAddress:address]; PVRLog(@"接收到%@的消息,\n解析到的数据[%@:%d]",sendMessage,ip,port);}- (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error { PVRLog(@"udpSocket关闭withError = %@", error);}
关于如何使用封装好的工具类,请参考代码
GitHub:https://github.com/YZQ-Nine/FlyScreenDemo
阅读全文
0 0
- iOS 飞屏功能的实现(UDPSocket协议广播机制)
- iOS- 移动端Socket UDP协议广播机制的实现
- iOS 利用Socket UDP协议广播机制的实现
- iOS —— 客户端Socket UDP协议广播机制的实现
- android广播机制的实现
- (UDP协议的应用)简单的广播实现
- Android广播事件机制,并实现简单的定时提醒功能
- Android广播事件机制及应用(实现简单的定时提醒功能)
- Android广播事件机制,并实现简单的定时提醒功能
- Android广播事件机制及应用(实现简单的定时提醒功能)
- 【代码练习8】UDP协议实现局域网屏幕广播功能
- 广播的实现--实现强制下线功能
- JMF+广播协议实现广播视频的传输中的问题
- android中udp协议广播的实现
- IOS消息分发(广播)机制
- 简单的实现自定义广播(Broadcast)机制
- WebSocket,实现简单的广播功能
- udpSocket
- Android-Drawable启动过程及怎么在studio中新建drawable-hdpi、drawable-mdpi等
- 文章标题
- 【BFS】POJ 3087 Shuffle'm Up
- Hibernate中自带ID生成策略中属性“ generator”的含义
- Entity Framework Core 数据库Migrations命令Update更新数据库中模型
- iOS 飞屏功能的实现(UDPSocket协议广播机制)
- JDBC连接MySQL抛Can`t get host name for your address异常的处理
- pl/sql过期不能使用问题
- SQL编码规范
- Oracle数据库中进行树形查询sql
- 父类使用<T>泛型 并通过注入方式 获取到实体类型
- 在MyEclipse快速搭建Hibernate
- 偏向锁,轻量级锁,自旋锁,重量级锁的详细介绍
- 生平第一章:关于android中的canvas的restore和save