mpv-player / mpv

🎥 Command line video player
https://mpv.io
Other
28.25k stars 2.9k forks source link

vd, vo, ad, ao don't get initialized with all_formats and vd-queue-enable/ad-queue-enable #10394

Open christoph-heinrich opened 2 years ago

christoph-heinrich commented 2 years ago

Important Information

Provide following Information:

Reproduction steps

mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ad-queue-enable=yes 'https://www.youtube.com/watch?v=bJbAFfMp52g' mpv --no-config --script-opts=ytdl_hook-all_formats=yes --vd-queue-enable=yes 'https://www.youtube.com/watch?v=bJbAFfMp52g'

Expected behavior

normal playback, like it would without ad-queue-enable and vd-queue-enable

Actual behavior

Never starts playback. In the case of ad-queue-enable it opens a window showing the first frame and the OSC is responsive, but upon seeking not even the OSC reacts anymore. Closing the window via q or by pressing the x in the title bar also leads to a frozen OSC and does not close the window.

Log file

ad.txt vd.txt

Sample files

Any YouTube video.

christoph-heinrich commented 2 years ago

Also happens when running --ytdl-format=251 with #10395 and #10399 applied, so that it only plays the audio track.

When comparing log files of: mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=251 --pause --log-file=no_queue_audio_only.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' and mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=251 --ad-queue-enable=yes --log-file=ad_audio_only.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' It looks like the audio decoder and output never get initialized.

So i suspected the same might also be the case on the video side: mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=248 --pause --log-file=no_queue_video_only.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' and mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=248 --vd-queue-enable=yes --log-file= vd_video_only.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' Video decoder and output don't seem to get initialized.

For your convenience here are the same files again, but stripped of the time stamps for easier comparison. no_queue_audio_only_stripped.txt ad_audio_only_stripped.txt no_queue_video_only_stripped.txt vd_video_only_stripped.txt

christoph-heinrich commented 2 years ago

I've been poking at the code a bit and found that deleting either this or this results in playback working without a problem, as long as I'm playing vp9 or av1, but starting with or switching over to h.264 does not work and results in a continuous output of errors until i close mpv.

Commands and logs from first change: mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=248 --vd-queue-enable=yes --pause --log-file=decoder_wrapper_vp9.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' and mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=137 --vd-queue-enable=yes --pause --log-file=decoder_wrapper_h264.txt'https://www.youtube.com/watch?v=bJbAFfMp52g'

Same story over on the audio side. Making either of the above changes results in opus working, but aac results in a continuous output of errors until i close mpv. Commands and logs from first change: mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=251 --ad-queue-enable=yes --pause --log-file=decoder_wrapper_opus.txt'https://www.youtube.com/watch?v=bJbAFfMp52g' and mpv --no-config --script-opts=ytdl_hook-all_formats=yes --ytdl-format=140 --ad-queue-enable=yes --pause --log-file=decoder_wrapper_aac.txt'https://www.youtube.com/watch?v=bJbAFfMp52g'

And again the same files, stripped of timestamps for easier comparison. decoder_wrapper_vp9_stripped.txt decoder_wrapper_h264_stripped.txt decoder_wrapper_opus_stripped.txt decoder_wrapper_aac_stripped.txt

With the second change the output is almost the same, but here are the logs in case someone can gain some insight from them. demux_timeline_vp9.txt demux_timeline_vp9_stripped.txt demux_timeline_h264.txt demux_timeline_h264_stripped.txt demux_timeline_opus.txt demux_timeline_opus_stripped.txt demux_timeline_aac.txt demux_timeline_aac_stripped.txt

Looking at those logs it seems to me that the fact that vp9, av1 and opus work is more of a happy little accident then anything else :neutral_face: