检测 android 电视上的 HDMI 服务是否开启

Detect if HDMI service is UP on android TV

我们的 HDMI 服务有问题。我们的 Android 电视应用程序在 STB 上设置为默认应用程序。当您启动 STB 时,它不会向您显示启动器,它会立即向您显示 App 并播放 HLS 视频流。我们使用 Exo Player version 2.6.1 with Exo Media wrapper 版本 4.1.0 播放视频。我们一次又一次地调查 STB 在休眠后唤醒时的黑屏 - 通过 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 为 connected/up 然后我们开始播放视频)- How to check the HDMI device connection status in Android?,但没有任何帮助。

Android 版本 17.

有什么可能导致此问题的想法吗?

UPD1:

附上 same issue github discussion

问题已解决,ExoPlayer 更新至 2.8.4 并将 ExoMedia 更新至 4.2.3