android - 检测 Android TV 上的 HDMI 服务是否已启动
问题描述
我们的 HDMI 服务有问题。我们的 Android TV 应用在 STB 上设置为默认设置。当您启动 STB 时,它不会显示您的启动器,它会立即向您显示应用程序并播放 HLS 视频流。为了播放视频,我们使用Exo Player 2.6.1 版和Exo Media wrapper 4.1.0 版。我们一次又一次地研究机顶盒在睡眠后唤醒时的黑屏 - 通过 DPAD 开机。在这种情况下,我们得到的播放列表可以正常工作,并且将频道切换到另一个效果很好。此问题通常在同一用户处产生。
当屏幕变黑时,我们从日志中得到以下内容(URL_TEST 是我们的播放列表请求):
09-06 19:21:40.018 I/PowerManagerService( 369): Waking up from sleep...
09-06 19:21:40.018 I/WindowManager( 369): No lock screen!
09-06 19:21:40.038 I/AudioHardwareALSA( 104): AudioHardwareALSA::setParameters() screen_state=on
09-06 19:21:40.038 I/qtaguid ( 369): Failed write_ctrl(s 1 10056) res=-1 errno=1
09-06 19:21:40.038 W/NetworkManagementSocketTagger( 369): setKernelCountSet(10056, 1) failed with errno -1
09-06 19:21:40.078 D/LightsService( 369): Excessive delay setting light: 54ms
09-06 19:21:41.018 W/SurfaceFlinger( 101): Timed out waiting for hw vsync; faking it
09-06 19:21:41.158 W/OkHttp ( 682): previous digest authentication with same nonce failed, returning null
09-06 19:21:41.158 D/OkHttp ( 682): Cached authentication expired. Sending a new request.
09-06 19:21:42.018 W/SurfaceFlinger( 101): Timed out waiting for hw vsync; faking it
09-06 19:21:42.098 D/DAKARMainActivity( 682): URL_TEST getUri: http://XXX.XXX.XX.XXX:XXXXX/XLIVE/0431233...8355920521/26/3/stream.m3u8
09-06 19:21:43.098 W/SurfaceFlinger( 101): Timed out waiting for hw vsync; faking it
09-06 19:21:43.428 W/DisplayD( 97): iface id HDMI screen is 0
09-06 19:21:43.428 D/Displaymanager( 97): [setHDMIEnable] display 0
09-06 19:21:43.428 D/Displaymanager( 97): [operateIfaceMode] property 0 iface 4 type 1 mode 1280x720p-60
09-06 19:21:43.428 D/Displaymanager( 97): [operateIfaceEnable] property 0 iface 4 operate 1 value 1
09-06 19:21:43.438 W/Displaymanager( 97): interface 4 not support led
09-06 19:21:43.648 I/ActivityManager( 369): Config changes=1400 {1.0 ?mcc?mnc en_LU ldltr sw720dp w1280dp h672dp 160dpi lrg long land -touch -keyb/v/h dpad/v s.8}
09-06 19:21:43.658 D/RemoteControlManager( 369): BroadcastReceiver:android.intent.action.CONFIGURATION_CHANGED
当一切正常并且在同一设备上开始播放视频时,我们从日志中得到什么(URL_TEST 是我们的播放列表请求):
09-05 19:21:58.507 I/PowerManagerService( 369): Waking up from sleep...
09-05 19:21:58.517 I/WindowManager( 369): No lock screen!
09-05 19:21:58.527 D/SurfaceFlinger( 102): Screen acquired, type=0 flinger=0x40691318
09-05 19:21:58.537 I/AudioHardwareALSA( 105): AudioHardwareALSA::setParameters() screen_state=on
09-05 19:21:58.537 I/qtaguid ( 369): Failed write_ctrl(s 1 10056) res=-1 errno=1
09-05 19:21:58.537 W/NetworkManagementSocketTagger( 369): setKernelCountSet(10056, 1) failed with errno -1
09-05 19:21:58.577 W/DisplayD( 98): iface id HDMI screen is 0
09-05 19:21:58.577 D/Displaymanager( 98): [setHDMIEnable] display 0
09-05 19:21:58.577 D/Displaymanager( 98): [operateIfaceMode] property 0 iface 4 type 1 mode 1280x720p-60
09-05 19:21:58.577 D/Displaymanager( 98): [operateIfaceEnable] property 0 iface 4 operate 1 value 1
09-05 19:21:58.577 W/Displaymanager( 98): interface 4 not support led
09-05 19:21:58.587 D/LightsService( 369): Excessive delay setting light: 59ms
09-05 19:21:58.797 D/RemoteControlManager( 369): BroadcastReceiver:android.intent.action.CONFIGURATION_CHANGED
09-05 19:21:58.797 D/Environment( 369): screen raw size:1280,720
09-05 19:21:58.797 I/ActivityManager( 369): Config changes=1400 {1.0 ?mcc?mnc en_LU ldltr sw720dp w1280dp h672dp 160dpi lrg long land -touch -keyb/v/h dpad/v s.9}
09-05 19:21:58.947 W/OkHttp ( 681): previous digest authentication with same nonce failed, returning null
09-05 19:21:58.947 D/OkHttp ( 681): Cached authentication expired. Sending a new request.
09-05 19:21:59.077 I/Displaymanager( 98): updatesinkaudioinfo: 0x408de140
09-05 19:21:59.077 I/Displaymanager( 98): BUF: AC3,LPCM,
09-05 19:21:59.077 I/Displaymanager( 98):
09-05 19:21:59.077 W/DisplayD( 98): Send msg Iface added HDMI
09-05 19:21:59.137 D/DAKARMainActivity( 681): URL_TEST getUri: http://XXX.XXX.XX.XXX:13888/XLIVE/4086274310...086993824321/26/3/stream.m3u8
09-05 19:21:59.417 I/OMXClient( 681): Using client-side OMX mux.
09-05 19:21:59.417 I/ ( 681): new RKOMXPlugin
09-05 19:21:59.427 D/ACodec ( 681): MEDIA_MIMETYPE_AUDIO_AAC sampleRate 48000 wifidisplay_flag 0 info 6c5bbe78
09-05 19:21:59.427 E/OMXNodeInstance( 681): OMX_GetExtensionIndex failed
我们从日志中注意到,当我们出现黑屏时,我们在视频请求后收到以下 Displaymanager (HDMI) 消息:
09-06 19:21:42.098 D/DAKARMainActivity( 682): URL_TEST getUri: http://XXX.XXX.XX.XXX:XXXXX/XLIVE/0431233...8355920521/26/3/stream.m3u8
09-06 19:21:43.098 W/SurfaceFlinger( 101): Timed out waiting for hw vsync; faking it
09-06 19:21:43.428 W/DisplayD( 97): iface id HDMI screen is 0
09-06 19:21:43.428 D/Displaymanager( 97): [setHDMIEnable] display 0
09-06 19:21:43.428 D/Displaymanager( 97): [operateIfaceMode] property 0 iface 4 type 1 mode 1280x720p-60
09-06 19:21:43.428 D/Displaymanager( 97): [operateIfaceEnable] property 0 iface 4 operate 1 value 1
09-06 19:21:43.438 W/Displaymanager( 97): interface 4 not support led
当一切正常时,反之亦然 - 请参阅上面的日志。
我们假设黑屏可能是由在我们请求视频流时未启动的 HDMI 服务引起的。
我们尝试通过所有这些方法检测 HDMI 连接(当 HDMI 连接/启动时,我们开始播放视频) -如何在 Android 中检查 HDMI 设备连接状态?,但没有任何帮助。
安卓版本 17。
有什么想法可能导致这个问题吗?
UPD1:
解决方案
ExoPlayer 更新到 2.8.4 和 ExoMedia 到 4.2.3 解决了问题
推荐阅读
- android - 如何保存我输入的编辑文本并在开始新意图时访问它?
- matplotlib - 通过 Torque 将 Julia 文件提交到集群时导入 PyPlot 问题
- css - CSS 选择器 img:hover:after 未应用
- python - Discord.py 编辑的消息记录器故障
- php - 我无法通过 php 从我的数据库中打印查询结果,没有任何反应
- javascript - 将对象从一个数组推到另一个数组
- python - 实现朴素贝叶斯并在预测函数上出错
- python - NameError:名称“密码”未在 Kivy 中定义
- javascript - discord.js client.on("error") 没有被调用
- python - Kivy 在 anaconda 上跑得很奇怪