iPhone与macOS建立虚拟端口
终端输入:
rvictl -s <UDID>
ios uuid获取方法
手机连接电脑,通过Finder获取iPhone的UDID,如图:
遇到的问题
1. rvictl: command not found
如果提示 rvictl: command not found
则需要安装(或重新)Xcode 和 Command Line Tools , xcode-select --install
。
我安装了xcode和 Command Line Tools 但还是提示 rvictl: command not found
,在网上找到一个解决方案
这一步有个小坑,我第一次执行rvictls -s 提示 rvictl: command not found。Stack Overflow上提供了两种解决方法:
xcode没有安装Command Line Tools,执行命令 xcode-select --install 安装一下然后重启终端,对我无效
进入/usr/bin,看有没有rvictls安装。没有的话,进入下面两个目录,安装下两个pkg。
a.Xcode.app/Contents/Resources/Packages/MobileDevice.pkg
b.Xcode.app/Contents/Resources/Packages/MobileDeviceDevelopment.pkg
然后重启下终端,再调用rvictls -s 设备udid就成功了。
2. rvictl starting device failed
是由于苹果安全性提高所致,降低安全性即可。方法适用于 x86, M1 架构
- 恢复模式下启动 mac:操作方法
- 启动后点按选项 -> 继续
- 进入桌面后,点击左上角菜单,选择 terminal, 打开后输入 csrutil disable, 继续输入密码,选择 y 确认, 完成后重启电脑
- 至此,重启后 x86 mac 即可以创建虚拟端口了。
- M1 还需要打开系统偏好设置 -> 安全性与隐私 -> 发现多出了个选项,点击 允许,会自动重启
- 至此, M1 也可以愉快的创建虚拟端口了。
Wireshark监听虚拟接口
成功把iPhone与macOS建立虚拟端口后,在Wireshark可以看到rvi0
,双击就可以监听了。
手机端进入直播界面。
通常直播流有3种形式,flv
,m3u8
和rtmp
rtmp
在Wireshark过滤器输入rtmpt
即可过滤出所有rtmp协议的请求信息,这里主要关注connect
和play
信息,在connect中可以找到协议地址;在play中可以找到推流地址;把两个地址拼接后,可以用ffmpeg
保存直播流:
ffmpeg -i 'rtmp://url/live/xxx' -c copy -f mp4 xxx.mp4
一般情况rtmpt的协议地址是不变的,所以获取到第一个connect信息后,可以将过滤信息修改为rtmpt.ucm.eventtype
。
m3u8
在Wireshark过滤器中输入http contains ".m3u8"
即可过滤出所有以.m3u8的请求信息,找到完整的.m3u8地址后,可以使用ffmpeg
保存直播流:
ffmpeg -i 'http://url/xxx.m3u8' -c copy xxx.mp4
flv
这种情况暂时还没有遇到,待补充。。