pactl unload-module module-simple-protocol-tcp
此命令的技术文档位于freedesktop页面
Android端使用Simple Protocol Player NG(fr.jakse.raphael.simpleprotocolplayer),输入Linux的IP和其他少量参数后接收播放
这个方法还可以把Android手机当电脑的无线耳机使用。前提是手机支持锁屏幕后Wifi不休眠
利用Apple AirPlay协议
苹果的AirPlay协议可投屏幕也可投音频,苹果用户很熟悉。
其之中单独播放音频的AirTunes协议使用UDP。
Android有一些App支持接收AirPlay的投放,如“乐播投屏”(版本8.x)。
用Avahi Disvovery(avahi-discover
命令,位于包python3-avahi-gtk
中)可以看到局域网内的“乐播投屏”在广播_airplay._tcp
及AirTunes Remote Audio
PulseAudio的名为RAOP(Remote Audio Output Protocol)的模块实现了音频AirTunes投放,其对应模块有module-raop-sink
、module-raop-discover
。
PulseAudio所实现的RAOP需要在“PulseAudio属性"(paprefs
命令)中的"Network Access"中勾选"Make discoverable Apple AirTunes sound devices available locally”启用。
另外Linux上需要有Avahi,用systemd先启动它
1sudo systemctl start avahi-daemon.service
可能还要重启一下PulseAudio
若要将单独一个Linux程序的音频投出去,在PulseAudio的“音量控制”(pavucontrol
命令)中“回放”中将此程序的音频输出设置为找到的AirTunes。
将Windows所放音频投放到Android
上面那个Linux+PulseAudio方案,因Windows没有PulseAudio,但有人写了个实现上面功能的Windows程序: https://github.com/kaytat/SimpleProtocolServer
一个GeorgieLabs出的专用于网络传输音频的软件,Android上装他的App SoundWire,电脑上也要运行他的软件(Windows、Linux)
Linux整个屏幕音视投屏到Android
现有的各种现成投屏方案对Linux支持不够好,自己弄的方法有:
(推荐)流媒体方案(以下会有几种方案,其中推荐的是OBS Studio + RTSP + VLC,此方案也适用于Windows)
VNC方案可以用(VNC本身无声音),如果调低分辨率,放普通视频勉强可以(还要配合上面那个投放音频的方法一起用),画面变化大时占约1400KB/s网速
通过Airplay投单张图片可以看看 https://github.com/openairplay/open-airplay
流媒体投频方案
流媒体直播屏幕的方案优点不用说,缺点有:
占用电脑CPU稍高
有明显的直播延迟,至少3秒
流媒体实时录屏方案一:OBS Studio (及推流)
OBS Studio的界面操作是比较明了易懂的。多显示器的可以选择仅录一个屏幕。
添加“屏幕采集”作为视频源
在“设置”的“音频”中选中一个电脑输出音频
OBS Studio中设置视频录制参数:
OBS Studio中“设置”的”输出“中,若调整”输出模式“为”高级“,可以选择的编码器(在我的Linux笔记本上)有:
能够使用电脑的多核CPU,但总体占用CPU量大,因此发热不小(这里为4核)
CBR 200Kbps足够
FFMPEG VAAPI (使用了我的Intel集显,Codec为H.264)
总体CPU占用不算很大,但需要的码率比x264高
CBR 3000Kbps够
“设置”的”推流“的”服务“选”自定义“,服务器填rtmp://127.0.0.1/stream
(此处的这个stream
是串流名称,若要改,需要在nginx那边做对应设置才允许推流),串流密钥可留空
点击”开始推流“
播放那端的设备上打开URL rtmp://电脑IP/stream(这是串流名称)/串流密钥
(密钥空则可省)
这是一种Miracast协议(又叫Wi-Fi Display)的实现,软件正在实验阶段的,项目目前属于Gnome。
按照说明中的testing purposes的方法,可以录屏的同时作为RTSP流服务器,声音可以通过pulseaudio的一些操作开启。不过试验结果是较卡。
流服务器方案一:OBS Studio的RTSP流服务器插件安装
RTSP(实时串流协议,Real Time Streaming Protocol)默认使用端口554。这是个Netscape交由IETF标准化的协议。
一位国人做的 GitHub - iamscottxu/obs-rtspserver: RTSP server plugin for obs-studio 十分实用,安装只要下载文件放入OBS插件对应位置(测试环境Linux 64位,obs-rtspserver 1.3.0)。
安装好OBS插件后,“工具”->“RTSP服务器"打开其操作界面,应当改一下使用的端口。
流服务器方案二:搭建Nginx RTMP module
RTMP(实时消息协议,Real-Time Messaging Protocol)这个协议默认使用端口1935,最初本是Macromedia Flash所用(Macromedia Flash Communications Server MX)。
OBS推流及播放器的访问都是在RTMP服务器的1935端口。Linux上的RTMP服务器一般是使用Nginx服务器配合模块nginx-rtmp-module。
如果发行版中没有nginx-rtmp-module
的包,可以使用Docker Hub上的镜像,如
1docker pull alfg/nginx-rtmp
2docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp
(实际测试中80端口未用上,不映射它也可以)
播放端软件
可使用VLC,这里用了VLC-Android-1.5.2播放RTSP流(如果使用RTMP协议则要更高的版本的VLC)。
VLC在界面中输入rtsp地址有可能会播放失败,然而使用adb直接打开rtsp地址则能播放:
1am start -a android.intent.action.VIEW -d rtsp://xxxxx
经试验RTMP有时会有音视频不同步的问题,RTSP则没有。
Linux VNC投画面
这部分只有画面不含声音,可以配合另节的是个仅投音频的方法。
电脑端的以当前屏幕内容作为源的VNC服务器可以用:
vino (Gnome)(经试验,密码验证及加密传输无法使用,只能无密)
krfb (KDE)(如果是多显示器,只能显示主屏幕)
虚拟一个第二屏幕,并当作VNC服务器:
VirtScreen
下面只讲一讲vino在非Gnome桌面的操作,因为非Gnome无GUI。另外两个有GUI
vino在非Gnome桌面的操作
安装vino后,如果用的不是Gnome桌面,则要通过命令启用(并且它的vino
二进制程序未必在$PATH
的路径里)和操作。
查看vino的设置
1 gsettings list-recursively org.gnome.Vino
修改为仅观看模式,不允许电视操作电脑
1 gsettings set org.gnome.Vino view-only true
(可选) 改为不需要弹出确认就可以观看
1 gsettings set org.gnome.Vino prompt-enabled false
还可以把密码去掉,加密也免掉,以提高流畅度
1 org.gnome.Vino prompt-enabled false
2 org.gnome.Vino require-encryption false
3 org.gnome.Vino use-alternative-port false
4 org.gnome.Vino disable-background false
5 org.gnome.Vino disable-xdamage false
6 org.gnome.Vino alternative-port uint16 5900
7 org.gnome.Vino icon-visibility 'client'
8 org.gnome.Vino authentication-methods ['none']
9 org.gnome.Vino network-interface ''
10 org.gnome.Vino notify-on-connect true
11 org.gnome.Vino mailto ''
12 org.gnome.Vino lock-screen-on-disconnect false
13 org.gnome.Vino use-upnp false
14 org.gnome.Vino vnc-password 'keyring'
15 org.gnome.Vino view-only true
对应的设置文档可查阅这个页面
启动vino: /usr/lib/vino/vino-server
。即可以用Android上的VNC客户端来连接。
Android端的VNC客户端
com.iiordanov.freebVNC
com.coboltforge.dontmind.multivnc (1.8.10 支持Android 4)
操作Android设备(电视)的奇怪技巧
毕竟是TV盒子,不可能一直接着键盘鼠标,遥控器也很费力。并且有些盒子直接砍掉了一些Android设置界面。
自定义遥控器动作或快捷键
Keyboard/Button Mapper可以用来启动App或其他动作,毕竟遥控器有些按钮没有。
在我的Android 4.4盒子上未成功,ROM中砍掉了功能,因此无法在Key Mapper中录制trigger
在电脑上查看和操作Android屏幕
Android 4
Vysor
通过adb。Android端安装App,使用PC端的客户端就可以用局域网adb。
电脑端的AndroidScreencast(开源, java)
通过USB调试接口(也就是adb)通信,不过这个很卡
Android >= 5
有一个著名的由Genymotion开源的scrcpy,是通过adb传画面和远控的。有人做了个加强版guiscrcpy。
这个时候,你可能还需要一个 Keyboard Switcher com.kunzisoft.keyboard.switcher,它可以显示一个浮动小图标,可以用鼠标来点击切换Android输入法
许多电视盒子ROM状态栏、通知面板和桌面小部件的功能都没有,所以找一些浮动在屏幕上的小工具
Resource Monitor Mini CPU、内存(文本)。CPU可以在屏幕边缘以细线条显示,占地方少又清晰。
com.pies3nscy.cpuindicator 浮动CPU、内存百分数圈
com.toolbox.shortcuts 可以选择几个App的浮动的应用启动器,可伸缩,挺适合用鼠标
jc.floating.monitor 浮动网速显示(文字)
这个要从命令直接开启浮动显示的话使用(root):
1am startservice jc.floating.monitor/.NetworkMonitor
Tinycore 在以屏幕边缘以条状显示一项(可以是CPU、内存、温度),无文字
Cpu Temperature 仅以文字简单地浮动显示一个温度
com.ccs.floating_info 浮动的可伸缩的最近几个App、内存监视、网络监视。纯文字,且占面积有点大
Transparent CPU Monitor(skynet.transparentcpumonitor) CPU、GPU、内存
这个显示的图表有点巨大。它本身就占了一定CPU。它可以自定义各个参数的读取路径,这在其他App读不出时有点用
用KDE Connect在另一个Android手机(或电脑)上用键盘控制电视
手机(也有电脑版的)和电视上装上同一个App,配对。
在电视盒上选择KDE Connect输入法
并在它的键盘弹出时,点下面的设置,去掉“只有在输入时接收远程按键”
手机设置为控制端,不当受控端
在手机配对后,插件页面,去掉所有,只留下“电视遥控”和“远程输入”两个
手机上可以安装Hacker's Keyboard或BeHe Keyboard,这两个键盘能提供比一般手机输入法更多的按键,如ctrl、tab、alt、方向键、更方便的常用符号等等。
安装后就可以用
1am start -n com.kunzisoft.keyboard.switcher/.KeyboardManagerActivity
来直接打开输入法切换框。这个App也支持显示一个浮动按钮来打开。
局域网传文本的App
Kouchat是可以在局域网内传文字信息,不需要服务器,自动发现。所以,用来从手机或电脑传一个URL到电视点开是可以。Kouchat有Android版和PC java版。
只不过,许多家大的视频网站的Android TV版的App竟然没有注册自己成为URL scheme的打开方式。
找一些盒子固件隐藏的App入口
用de.szalkowski.activitylauncher查看和调用所有App之下的活动(其实这没太多必要)
一点常用的adb命令
adb启动App
你需要知道App的包名和主活动的名称
adb打开网址
1am start -a android.intent.action.VIEW -d http://xxxxxxx
adb输入文本
1input text hello
adb模拟按键/输入
1input keyevent <keycode>
参考https://developer.android.com/reference/android/view/KeyEvent
1input keyevent <keycode>
23 HOME 键 (一些遥控器的”本地“)
34 返回键
419 KEYCODE_DPAD_UP 導航鍵 向上 19 (遥控器方向键)
520 KEYCODE_DPAD_DOWN 導航鍵 向下 20
621 KEYCODE_DPAD_LEFT 導航鍵 向左 21
722 KEYCODE_DPAD_RIGHT 導航鍵 向右 22
823 遥控器“OK”. Directional Pad Center key.
924 增加音量
1025 降低音量
1126 电源键
1264 打开浏览器
1366 ENTER
1467 Backspace key.KEYCODE_DEL 遥控器”交换“
1582 菜单键
1683 KEYCODE_NOTIFICATION
1785 播放/暂停
1886 停止播放
1987 播放下一首
2088 播放上一首
2192 PAGE UP
2293 PAGE DOWN
23111 ESCAPE
24126 恢复播放
25127 暂停播放
26166 频道+(换台)
27167 频道-
28168 ZOOM_IN
29169 ZOOM_OUT
30176 打开系统设置
31183 遥控器红键(直播)
32184 遥控器绿键(回看)
33185 遥控器黄键(点播)
34186 遥控器蓝键(信息)
35187 切换应用
36223 系统休眠
37224 点亮屏幕
38226 KEYCODE_MEDIA_TOP_MENU 226
39229 KEYCODE_LAST_CHANNEL Last Channel key. Goes to the last viewed channel.
40284 KEYCODE_ALL_APPS 284
其中一个旧Android 4.4 TV盒子root过程
这一段旧旧盒子的,估计一般人不用看了。仅这一段,下文主要针对Android 8及以上
root过程因机而异。此处主要为自己的记录,看客也可以参考
这个买某服务配送的盒子root不需要拆机、不需要TTL线,不需要任何USB或刷机
按照网上查的方式打开网络adb。过程略
adb connect <ip>
连上后,直接使用adb root
取得root权限。看来它的ROM是留了这个后门的。
安装root管理的App,给其他App可申请root权限
此方法不适合 Android >= 5
准备好superuser.apk
(我用的是com.koushikdutta.superuser,源代码)
adb shell mount -o rw,remount /system
解压superuser.apk
,把assets/armeabi/su
放/system/xbin/su
,并chmod 755 /system/xbin/su
安装superuser.apk
复制/data/app/
下的superuser.apk
到/system/app/
使/system/xbin/su --daemon &
成为开机自动运行的一条命令。我找了一个原厂家的启动shell脚本文件,加在尾部。
本博客文章皆属原创(除特别标明外)。 未联系作者获得同意前,不可转载。
All articles are original (except for those specially claimed) and copyrighted. Copying without permission is forbidden.
写作不易,感谢支持! 扫个码吧~