У меня в браузере Хром не понятно работает декодирование h264 некоторых видео, с включенным hardware acceleration. Как я понимаю (из логов chrome://media-internals/), хром при рендеринге(и демультиплексировании?) использует DXVA, тобишь DirectX (да, я тестирую на Windows 7)
Собственно проблема в том, что видео останавливается на некотором участке времени (иногда случайным образом, иногда стабильно на X секунде). Если отключить аппаратное ускорение, то проблема исчезает. Также такие видео нормально воспроизводят нативные плееры и другие браузеры (Лиса, Андроид), просто на секунду затыкаются, но воспроизведение продолжает идти дальше (в хроме тупо останавливается с ошибкой DECODER_UNDERFLOW)
Пытался собрать Chromium, скачал около 50Гб исходников, думал собрать дебажную версию и смотреть логи, но сборка не удалась, т.к. мало опыта с Visual Studio
Я правильно понимаю, что h264 декодирует системная либа DirectX? Если так, то как посмотреть лог этого декодирования и понять причину остановки?
Вот лог chrome://media-internals
Timestamp Property Value
00:00:00.000 origin_url "file:///"
00:00:00.000 kFrameUrl "file:///C:/Downloads/bad_7s.mp4"
00:00:00.000 kFrameTitle ""
00:00:00.000 url "file:///C://Downloads/bad_7s.mp4"
00:00:00.006 kTotalBytes 13321640
00:00:00.006 kIsStreaming false
00:00:00.006 kIsSingleOrigin true
00:00:00.006 kIsRangeHeaderSupported true
00:00:00.007 pipeline_state "kStarting"
00:00:00.018 info "FFmpegDemuxer: created video stream, config codec: h264, profile: h264 baseline, level: not available, alpha_mode: is_opaque, coded size: [480,270], visible rect: [0,0,480,270], natural size: [480,270], has extra data: true, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:SMPTE170M, transfer:SMPTE170M, matrix:SMPTE170M, range:LIMITED}"
00:00:00.018 kAudioTracks []
00:00:00.018 kVideoTracks [{"alpha mode":"is_opaque","codec":"h264","coded size":"480x270","color space":"{primaries:SMPTE170M, transfer:SMPTE170M, matrix:SMPTE170M, range:LIMITED}","encryption scheme":"Unencrypted","has extra data":true,"hdr metadata":"unset","natural size":"480x270","orientation":"0°","profile":"h264 baseline","visible rect":"0,0 480x270"}]
00:00:00.018 kMaxDuration 64.331
00:00:00.018 kStartTime 0
00:00:00.018 kBitrate 1656637
00:00:00.018 error "{\"causes\":[{\"causes\":[],\"data\":{},\"stack\":[{\"file\":\"../../media/filters/decrypting_video_decoder.cc\",\"line\":53}],\"status_code\":264,\"status_message\":\"\"}],\"data\":{\"Decoder name\":\"DecryptingVideoDecoder\"},\"stack\":[{\"file\":\"../../media/filters/decoder_selector.cc\",\"line\":172}],\"status_code\":265,\"status_message\":\"\"}"
00:00:00.039 info "Starting Initialization of DXVAVDA"
00:00:00.040 info "Using D3D9 device for DXVA"
00:00:00.060 kIsVideoDecryptingDemuxerStream false
00:00:00.060 kVideoDecoderName "MojoVideoDecoder"
00:00:00.060 kIsPlatformVideoDecoder true
00:00:00.060 info "Selected MojoVideoDecoder for video decoding, config: codec: h264, profile: h264 baseline, level: not available, alpha_mode: is_opaque, coded size: [480,270], visible rect: [0,0,480,270], natural size: [480,270], has extra data: true, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:SMPTE170M, transfer:SMPTE170M, matrix:SMPTE170M, range:LIMITED}"
00:00:00.060 pipeline_state "kPlaying"
00:00:00.086 dimensions "480x270"
00:00:00.086 kResolution "480x270"
00:00:00.129 video_buffering_state {"state":"BUFFERING_HAVE_ENOUGH"}
00:00:00.129 pipeline_buffering_state {"for_suspended_start":false,"state":"BUFFERING_HAVE_ENOUGH"}
00:00:00.129 info "Effective playback rate changed from 0 to 1"
00:00:00.129 event "kPlay"
00:00:00.775 info "Starting Initialization of DXVAVDA"
00:00:00.775 info "Using D3D9 device for DXVA"
00:00:00.840 info "Starting Initialization of DXVAVDA"
00:00:00.841 info "Using D3D9 device for DXVA"
00:00:00.018 duration 64.331
00:00:04.070 info "Starting Initialization of DXVAVDA"
00:00:04.071 info "Using D3D9 device for DXVA"
00:00:06.488 info "Starting Initialization of DXVAVDA"
00:00:06.489 info "Using D3D9 device for DXVA"
00:00:07.359 video_buffering_state {"reason":"DECODER_UNDERFLOW","state":"BUFFERING_HAVE_NOTHING"}
00:00:07.359 pipeline_buffering_state {"for_suspended_start":false,"reason":"DECODER_UNDERFLOW","state":"BUFFERING_HAVE_NOTHING"}
Как видно из лога, Хром выбирает видео декодер MojoVideoDecoder, это и есть hardware acceleration, потом идут бесконечные «Starting Initialization of DXVAVDA», тоже не понятно почему. На других видео такого нет. В итоге видео останавливается на 7 сек. Пишет что якобы в декодере нет данных для обработки, хотя все видео забуферезировалось в плеере (1 минута)
Пример видео, которое останавливается на 7 сек.
https://bugs.chromium.org/p/chromium/issues/attachment?aid=459480&signed_...