本文介绍了如何利用树莓派和Kodi实现移动设备投屏到电视机的功能。篇幅较长,主要分为如下几个部分
比如,你在爱奇艺上看视频时,一般都会有一个“TV”的按钮,那就是用于投屏的,可以将爱奇艺上正在播放的视频投射到电视机上播放。
而要实现投屏功能,一般要求两台设备都支持 Airplay 或者 DLNA 协议。这两个协议下文还会涉及到。
至于Kodi,可以实现“家庭影院”功能的开源软件/系统。用它可以管理你的本地媒体资源(包括视频、音频以及图片),并且可以播放远端媒体资源。
我就准备用树莓派和Kodi来实现投屏功能。
起初想到了买一个投屏的盒子,看了一下主流的价格在200元左右。想到自己还有一个“被遗忘”的树莓派,就边搜索教程边摸索着实践起来了。
硬件配置一览:
4.2 配置树莓派视频输出参数
既然连接上了,当然要播放一个视频看看啦!用树莓派上的视频播放器mplayer播放一个测试视频,结果只出来了声音,但是没有视频画面。即使如此,还是让我兴奋了一下,毕竟这说明连接没有什么大的问题!
但是不能一直没有声音吧,所以我网上搜索一番,发现需要重新配置树莓派的视频输出参数。具体做法如下:
编辑 /boot/config.txt 文件,编辑前请确保你有root或者sudo权限,并且可以先备份一下这个文件,以防设置过程出错!
用vi或nano等文本编辑器打开文件,其中重要的参数如下(参考来源):
overscan_left=16 //将画面向左移动16个像素点
overscan_right=16 //将画面向右移动16个像素点
overscan_top=16 //将画面向上移动16个像素点
overscan_bottom=16 //将画面向下移动16个像素点
disable_overscan=0 //设置是否允许屏幕过扫描1为不允许,0为允许
framebuffer_width=800 //设置屏幕宽度为800个像素点
framebuffer_height=400 //设置屏幕高度为400个像素点
sdtv_mode=2 //设置树莓派输出的电视制式
//0-NTSC,北美视频标准
//1-NTSC-J,日本视频标准
//2-PAL,英国和其他国家视频标准
//3-PAL-M,巴西标准
sdtv_aspect=2 //设置输出画面宽高比,1-4:3,2-14:9,3-16:9
经过测试,我选用了如下参数:(究竟要用什么参数,要根据自己的实际环境而定)
需要注意的是,当你更改了这些参数,它们不会立刻生效,必须重启系统后才能生效!
disable_overscan=0
overscan_left=20
framebuffer_width=850
framebuffer_height=750
sdtv_mode=2
当我更改参数并重启系统后,再次播放视频,电视机的画面和声音都有了,并且并没有噪音,Lucky!
最后说一句,如果你使用HDMI线连接电视机的话,需要用其他参数,主要是hdmi开头的那些参数,具体可以另行搜索。
4.3 安装Kodi
安装Kodi可以直接选用针对Kodi的定制化Linux发行版。由于我已经安装了其他系统,偷个懒就直接安装Kodi软件了。
如果要安装较新的Kodi版本,首先需要更新软件源(我用的是中科大的源):
打开 /etc/apt/sources.list 文件,将内容替换成:
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
然后打开 /etc/apt/sources.list.d/raspi.list 文件,将内容替换成:
deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ jessie main
更新软件源后,接着就是实际地更新软件并安装Kodi了:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install kodi
这样Kodi就算安装好了!
4.4 设置Kodi播放参数
安装好Kodi后,当然还要进行调试啊。首先启动Kodi看看:
命令行输入Kodi就可以启动了:
kodi
#或者运行 kodi & 这个命令,可以后台运行Kodi
接下来就是设置Kodi的参数了。有两种方法:一是通过电脑+鼠标键盘或者电视机+遥控器来进行可视化设置,二是通过配置文件来进行设置。我家的遥控器不灵了,只能利用配置文件来调控Kodi啦!这里提一句,第一种方法能做到的第二种方法都能做到,而第二种方法能做的第一种不一定能做到!
最重要的两个配置文件都在 ~/.kodi/userdata/ 文件夹下。分别是 guisettings.xml 和 advancedsettings.xml。其中 guisettings.xml 文件就是用来存放你通过电脑屏幕或电视机屏幕调控的那些参数。而 advancedsettings.xml 是存放一些更高级功能的参数,该文件里的参数可以覆盖 guisettings.xml 中的参数。经过我测试,直接修改 guisettings.xml 是不起作用的,而修改 advancedsettings.xml 可以直接操控Kodi。
比如,我们要开启 Airplay、UPnP(即DLNA)以及 webserver(分别是用来支持Apple设备播放、支持DLNA协议设备播放以及网络端控制),这些功能的参数在 guisettings.xml 中都有,但是我们不能直接修改它,而是要在 advancedsettings.xml 中重新设置这些参数。第一次打开 advancedsettings.xml,里面应该是空的(如果没有这个文件,就在上面提到的文件夹下面创建一下该文件),然后在里面输入以下参数:
<advancedsettings>
<services>
<airplay>trueairplay>
<airplaypassword default="true">airplaypassword>
<airplayvideosupport default="true">trueairplayvideosupport>
<airplayvolumecontrol default="true">trueairplayvolumecontrol>
<devicename default="true">Kodidevicename>
<esallinterfaces>trueesallinterfaces>
<escontinuousdelay default="true">25escontinuousdelay>
<esenabled default="true">trueesenabled>
<esinitialdelay default="true">750esinitialdelay>
<esmaxclients default="true">20esmaxclients>
<esport default="true">9777esport>
<esportrange default="true">10esportrange>
<upnpannounce default="true">trueupnpannounce>
<upnpcontroller default="true">falseupnpcontroller>
<upnplookforexternalsubtitles default="true">falseupnplookforexternalsubtitles>
<upnprenderer>trueupnprenderer>
<upnpserver>trueupnpserver>
<useairplaypassword>trueuseairplaypassword>
<webserver>truewebserver>
<webserverpassword default="true">webserverpassword>
<webserverport default="true">8080webserverport>
<webserverusername default="true">kodiwebserverusername>
<webskin default="true">webinterface.defaultwebskin>
<zeroconf default="true">truezeroconf>
services>
advancedsettings>
这样就开启了三个功能。比如,我们看一看 webserver。浏览器里打开
4.5 测试投屏
既然树莓派已经支持 Airplay 以及 DLNA 协议了,那当然要测试能不能投屏了啊,终于等到这一步!
重启Kodi。命令行重启Kodi的命令如下:
ps aux | grep -i "kodi" | awk '{print $2}' | xargs -I {} kill -9 {}
kodi &
重启后在爱奇艺上选择一个节目(看了四五遍的《请回答1988》),点击投屏按钮,预想的画面出现啦!一番折腾没有白费!
4.6 下载手机遥控器
最后还要解决一下遥控器的问题,官方 Wiki 推荐了一系列的手机APP来替代真实的遥控器。我选择了一款 “Official XBMC Remote for iOS” 的APP,非常好用(快进、设置等等都可以)。
网上的教程都语焉不详,希望我啰里啰嗦的文章能帮助到有需要的人!
谢谢大家看此长文!