手机的投屏功能大家都用过,就是打开手机上的网络视频播放器,点击投屏功能,手机上的视频就能投射到电视盒子或者网络电视上了,很方便。
冬日的某一天我家突然没有网了,发现手机投屏功能不起作用了。为什么?好奇心驱使着我谷歌了一下,发现原来网络视频播放器并不是真正的将手机上的视频投屏到电视上,而将手机上网络资源镜像电视上,何为镜像那?就是手机和电视都连接到同一个服务器,手机把播放视频的所有的信息都复制一份告诉服务器,服务器就按照这个视频信息(注意是信息)推送视频流到电视上,所以电视可以看到和手机一样的视频。这也就解释了为什么没有网点时候投屏功能不起作用了。
上面说道这种不是真正的投屏,真正的投屏应该是把手机上的视频拷贝到电视上播放。在某宝上搜了一下wifi投屏器,发现很多类似商品。
![e9f23376bf723a70ec06dd4eb9a0434e.png](https://i-blog.csdnimg.cn/blog_migrate/655f951534d8c7637ab55be204fcc1c5.jpeg)
于是谷歌了一下原理,发现WIFI同屏是一个很成熟的技术了,学名叫“Miracast”也叫“Wifi-Display”,是wifi推出的一个标准协议,是以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的3C设备(如智能手机、电视、投影、电脑等)可透过无线方式分享视频画面。安卓和ios都将此标准加入到了系统当中,所以手机不用修改自动就可以使用此协议。主流的投屏技术有AirPlay(IOS)、DLNA(索尼、英特尔、微软等发起的一套 PC、移动设备之间互联互通的协议)、Miracast(安卓)。
突发奇想想自己DIY一个wifi投屏器(主要是qiong),搜索了一下实现方法,找到了两种方案:
- 基于树莓派的Chrome Cast
- 基于Miracast标准协议
第一种方法必须在手机上安装raspicast,终端设备必须是树莓派
第二种方法则是只要是手机就可以(只测试了安卓手机),终端设备只要是Linux系统就可以。
下面开始介绍一下具体实现方法:
基于Chrome Cast
参考网址
前提:必须有一个树莓派(废话)
- 在树莓派上打开SSH功能
![5c7ecc01a5940ccf965c6d1769341c63.png](https://i-blog.csdnimg.cn/blog_migrate/8c766749b7d07fdc510d11d7f4e38edb.png)
- 在安卓手机上安装rapicast,需要翻墙,在谷歌play上安装此软件。
![6797e3d366d1c1aed450ddd549c8b99d.png](https://i-blog.csdnimg.cn/blog_migrate/0ee226ea10f066f9a79efc71f853f496.jpeg)
- 将树莓派和手机连接到同一个WIFI中,打开手机上的RaspicastApp,登录SSH,连接到树莓派上。
![ae42ce6caa8a9fd0713cbd4115afcd99.png](https://i-blog.csdnimg.cn/blog_migrate/7288580d2a84045849969e45044050c7.jpeg)
- 在github上下载源码,github源码
$ git clone https://github.com/HaarigerHarald/omxiv
$ cd omxiv
$ make ilclient
$ make -j4
$ sudo make install
- 安装完成后,点击打开手机APP,点击Cast选项,播放视频即可。
附上油管视频能看到小伙伴可以看看。
基于Miracast
这个方法才是我想介绍的,这个方法的好处在于不需要其他软件辅助,打开安卓手机中的“多屏互动”按钮即可完成投屏功能。
- 在github上下载大神写好的源码源码地址
git clone https://github.com/albfan/miraclecast.git
- 安装依赖,检测环境
本人使用是ubuntu,在配置之前需要安装一些依赖文件:
- ubuntu-restricted-extras
- gstreamer1.0
- libglib2.0-dev
- libreadline-dev
- libudev-dev
- libsystemd-dev
- libusb-dev
- build-essential
测试当前系统是否支持,miraclecast:
确定systemd的版本 :版本应该大于221
确实glb,gstreamer 是否安装成功 执行:
res/test-viewer.sh
确定当前系统的wifi是否支持P2P wifi 执行:
res/test-hardware-capabilities.sh
将dbus文件复制到dbus 配置中:
cp res/org.freedesktop.miracle.conf /etc/dbus-1/system.d/
- 编译&安装
$ mkdir build
$ cd build
$ ../autogen.sh g --prefix=/usr
$ make
$ make install
- 配置udev
在build 文件下执行
$ ../configure --enable-rely-udev
运行miracle
- 关闭网络
$ systemctl stop NetworkManager.service
$ systemctl stop wpa_supplicant.service
- 启动Daemon
$ sudo miracle-wifid &
![89215b70658e8c7d8b493582dce36da5.png](https://i-blog.csdnimg.cn/blog_migrate/62e1ae6dcd51299efec04bbac7a57352.jpeg)
- 启动sinkctl
$ sudo miracle-sinkctl
[ADD] Link: 3
![7839cc61fd6fdad6326a689feb73cc78.png](https://i-blog.csdnimg.cn/blog_migrate/f831ef73abbfde9d140adf08eadd41b7.jpeg)
- 执行命令
set-mamaged 3 yes
这时候打开手机的多屏互动功能就可以搜索到 miracle 设备了,直接点击连接即可实现投屏功能了。
结语:
功能虽然实现了,可是卡要死,i这个就需要后期优化了。
欢迎关注我的个人网站:www.zcxbb.com