I did some more testing this afternoon and this issue is also present when using Chromecast from the Web player on a PC. Looking through the server logs, it seems that the offset is calculated in the player, so this bug must be in some shared code (or otherwise repeated across multiple platforms).
When playing a video at the 10:00 mark then pressing skip twice I got the following log output.
From the player logs (nothing useful):
{
"type": "log:message",
"level": 3,
"message": "[Metrics] Updating session last interaction time",
"time": "2023-05-02T09:35:10.483Z"
},
{
"type": "log:message",
"level": 4,
"message": "[Cast] Sending custom message with type \"SEEK\"",
"time": "2023-05-02T09:35:10.483Z"
},
{
"type": "log:message",
"level": 3,
"message": "[Metrics] Updating session last interaction time",
"time": "2023-05-02T09:35:11.272Z"
},
{
"type": "log:message",
"level": 4,
"message": "[Cast] Sending custom message with type \"SEEK\"",
"time": "2023-05-02T09:35:11.272Z"
}
From the server logs we can see that the offset parameter is correct for the first request (offset=630), but incorrect for the second request (offset=30). The player is clearly calculating the offset incorrectly after the first skip request.
May 02, 2023 19:42:06.153 [0x149a76bf6b38] DEBUG - Completed after connection close: [192.168.1.9:35681] 200 GET /video/:/transcode/universal/start?hasMDE=1&path=%2Flibrary%2Fmetadata%2F28023&mediaIndex=0&partIndex=0&protocol=http&fastSeek=1&directPlay=0&directStream=1&subtitleSize=100&audioBoost=100&location=lan&directStreamAudio=1&mediaBufferSize=30720&session=xutdx53mc5qezvv7dr6hzvz9&offset=630&subtitles=burn©ts=1 (8 live) #184 TLS 1280ms 3547622 bytes (range: bytes=0-)
May 02, 2023 19:42:06.153 [0x149a71343b38] DEBUG - [TranscodeOutputStream] Input processing thread exited after writing 11993088 bytes, m_closed=1, m_endOfFileReached=0, session->isStopped()=0
May 02, 2023 19:42:06.219 [0x149a75b15b38] DEBUG - Request: [192.168.1.9:35683 (Allowed Network (Subnet))] GET /video/:/transcode/universal/start?hasMDE=1&path=%2Flibrary%2Fmetadata%2F28023&mediaIndex=0&partIndex=0&protocol=http&fastSeek=1&directPlay=0&directStream=1&subtitleSize=100&audioBoost=100&location=lan&directStreamAudio=1&mediaBufferSize=30720&session=xutdx53mc5qezvv7dr6hzvz9&offset=30&subtitles=burn©ts=1 (8 live) #1a9 TLS Signed-in Token (pierowheelz) (Chrome) (range: bytes=0-)
Note that the player and server logs were taken from separate tests - this is why timestamps don’t line up.