kingslay / KSPlayer

A video player for iOS、macOS、tvOS、visionOS , based on AVPlayer and FFmpeg, support the horizontal, vertical screen. support adjust volume, brightness and seek by slide, SwiftUI, support subtitles.
https://apps.apple.com/app/tracyplayer/id6450770064
GNU General Public License v3.0
980 stars 198 forks source link

Issue with some live tv streams #701

Closed UnknownCoder807 closed 9 months ago

UnknownCoder807 commented 9 months ago

Lots of my users are mentioning freezes in their live tv streams.

The stream plays ok for around 20 seconds and then the video will freeze but the audio continues.

These are the logs (they are truncated because they repeat hundreds of times)

I have a url that has this behaviour which I can send via email if you need.

warning KSPlayer: KSMEPlayer.swift:375 prepareToPlay() | prepareToPlay <KSPlayer.KSMEPlayer: 0x280a67840>
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | non-existing PPS 0 referenced
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | non-existing PPS 0 referenced
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | decode_slice_header error
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | no frame!
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | Increasing reorder buffer to 2
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | Increasing reorder buffer to 3
warning KSPlayer: KSOptions.swift:504 outputNumberOfChannels(channelCount:) | [audio] maximumOutputNumberOfChannels: 32, preferredOutputNumberOfChannels: 0, isSpatialAudioEnabled: false, isUseAudioRenderer: false
warning KSPlayer: KSOptions.swift:508 outputNumberOfChannels(channelCount:) | [audio] currentRoute max channels: 2
warning KSPlayer: KSOptions.swift:523 outputNumberOfChannels(channelCount:) | [audio] outputNumberOfChannels: 2 output channelCount: 2
warning KSPlayer: AVFFmpegExtension.swift:407 layoutTag | [audio] FFmepg AVChannelLayout: stereo order: AVChannelOrder(rawValue: 1) mask: 3
warning KSPlayer: Resample.swift:349 audioFormat(sampleFormat:sampleRate:outChannel:channelCount:) | [audio] out channelLayout: stereo
warning KSPlayer: KSMEPlayer.swift:201 sourceDidOpened() | [audio] audio type: KSPlayer.AudioEnginePlayer prepare audioFormat )
warning KSPlayer: AudioEnginePlayer.swift:166 prepare(audioFormat:) | [audio] set preferredOutputNumberOfChannels: 2
warning KSPlayer: AudioEnginePlayer.swift:168 prepare(audioFormat:) | [audio] outputFormat AudioFormat: <AVAudioFormat 0x289cfd680:  2 ch,  48000 Hz, Float32, deinterleaved>
warning KSPlayer: AudioEnginePlayer.swift:170 prepare(audioFormat:) | [audio] outputFormat channelLayout tag: 6619138, channelDescriptions: []
warning KSPlayer: AudioEnginePlayer.swift:185 prepare(audioFormat:) | [audio] new sourceNode inputFormat: <AVAudioFormat 0x28191e440:  2 ch,  48000 Hz, Float32, deinterleaved>
warning KSPlayer: KSPlayerLayer.swift:141 state | playerStateDidChange - readyToPlay
warning KSPlayer: KSMEPlayer.swift:382 play() | play <KSPlayer.KSMEPlayer: 0x280a67840>
warning KSPlayer: KSPlayerLayer.swift:141 state | playerStateDidChange - buffering
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture
kingslay commented 9 months ago

麻烦你发给我对应的url

kingslay commented 9 months ago

我的网络播放你提供的url很卡,很久才能播放一小段。我播放了很久了。没有出现你说的音频在播放但是视频画面被冻结的情况。

UnknownCoder807 commented 9 months ago

How long did you watch for? I just tried and it took around 1 minute to happen. I guess it's quicker when there is football on.

kingslay commented 9 months ago

嗯,我是在tvos上的,我看了有十多分钟了。但是我的网络播放你这个url很卡,播放几秒就会卡很久。所以可能是因为这个原因所以无法复现你的这个问题。你可以用我的testflight。试下会不会有这个问题。我刚更新了testflight

cdguy commented 9 months ago

嗯,我是在tvos上的,我看了有十多分钟了。但是我的网络播放你这个url很卡,播放几秒就会卡很久。所以可能是因为这个原因所以无法复现你的这个问题。你可以用我的testflight。试下会不会有这个问题。我刚更新了testflight

The stream plays fine when it is a recording. so it is not an encoding issue; it looks like it is more related to incoming data management. Because it would be difficult to

warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909

@kingslay

when I try to record the same stream using ffmpeg here is the error I get:

[h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing PPS 0 referenced Last message repeated 1 times [h264 @ 00000280569b4000] decode_slice_header error [h264 @ 00000280569b4000] no frame! [h264 @ 00000280569b4000] non-existing SPS 0 referenced in buffering period Last message repeated 1 times [h264 @ 00000280569b4000] Increasing reorder buffer to 2 [h264 @ 00000280569b4000] Increasing reorder buffer to 3

Besides, looking at this error code, it seems that time to time, Ksplayer can't download/process the following frames.

warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture
warning KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | vt decoder cb: output image buffer is null: -12909
error KSPlayer: MEPlayerItem.swift:131 MEPlayerItem | hardware accelerator failed to decode picture

In my humble opinion, the best way to encounter this issue is to use one of the best features of MPV, which is the following:

  1. It would be great if the live stream player could have a feature to seek back to a previous part of the stream, and then resume watching the live stream by hitting the "fast forward button" (+10 circle).

  2. MPV has a feature that allows it to download cached data from the server in advance so that there is no buffering freeze or playback malfunction. With this feature, you can watch the stream with only a 1-second delay from what the server is streaming.

cdguy commented 9 months ago

https://github.com/kingslay/KSPlayer/assets/123307657/546f940b-48e1-4cfd-912c-6970958ced74

@kingslay you can see in this video that I can seek back a live stream and when I hit seek forward, the maximum allowed is -1 second.

cdguy commented 9 months ago

@kingslay

Some of the main buffer settings are:

Something like the screenshot below can be made

WhatsApp Görsel 2023-12-25 saat 15 33 30_1acc551c

cdguy commented 9 months ago

@kingslay when I try to record the stream using ffmpeg, I noticed that the "downloaded time" is not updated as it should. a package of 10 seconds is downloaded every 10 seconds. Ekran görüntüsü 2023-12-27 164826

cdguy commented 9 months ago

I did a test with 2 different streams

the first one is the link @UnknownCoder807 shared with you:

https://github.com/kingslay/KSPlayer/assets/123307657/c5009b26-e0bb-4538-9d59-a3ce6031b027

You can clearly see that ffmpeg download first the cached data from the server, and after data packages of 10 seconds are downloaded. I guess the “freeze” is due to the latency/delay of ffmpeg downloading the next data package

Here is another stream where the data is downloaded “normally”

https://github.com/kingslay/KSPlayer/assets/123307657/8a295cfe-5846-48ad-b73a-42516492e3a1

kingslay commented 9 months ago

这两个流都是ts格式的吗?

cdguy commented 9 months ago

这两个流都是ts格式的吗?

yes they are

cdguy commented 9 months ago

@kingslay awesome work! Thank you. Fixed.

kingslay commented 9 months ago

@UnknownCoder807 你试下 看还会不会有问题 如果没有问题的话 那你就把这个问题关了

UnknownCoder807 commented 9 months ago

Seems to be fixed, thanks @kingslay