web-platform-tests / wpt

Test suites for Web platform specs — including WHATWG, W3C, and others
https://web-platform-tests.org/
Other
4.97k stars 3.09k forks source link

Add test for audio/webm;codecs=opus using lacing #21240

Open guest271314 opened 4 years ago

guest271314 commented 4 years ago

MediaSource at Chromium 81 does not play certain "audio/webm;codecs=opus" files test-a-22050Hz-1ch-opus.webm.zip

$ mediainfo test-a-22050Hz-1ch-opus.webm
General
Complete name                            : test-a-22050Hz-1ch-opus.webm
Format                                   : WebM
Format version                           : Version 4 / Version 2
File size                                : 10.3 KiB
Duration                                 : 1 s 38 ms
Overall bit rate                         : 80.9 kb/s
Encoded date                             : UTC 2020-01-17 04:12:32
Writing application                      : mkvmerge v42.0.0.21 ('Overtime') 32-bit
Writing library                          : libebml v1.3.10 + libmatroska v1.5.2

Audio
ID                                       : 1
Format                                   : Opus
Codec ID                                 : A_OPUS
Duration                                 : 1 s 38 ms
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 22.05 kHz
Compression mode                         : Lossy
Writing library                          : opusenc from opus-tools 0.1.10
Default                                  : Yes
Forced                                   : No

Firefox 72 and Nightly 74 will play audio where the MIME type set at addSourceBuffer() is "audio/webm;codecs=opus" yet the actual codec is Vorbis https://github.com/web-platform-tests/wpt/blob/master/media-source/webm/test-a-128k-44100Hz-1ch.webm

$ mediainfo test-a-128k-44100Hz-1ch.webm
General
Unique ID                                : 246016745391851141070526205199611817580 (0xB9151A07826DACE4DBC41F9B804B6E6C)
Complete name                            : test-a-128k-44100Hz-1ch.webm
Format                                   : WebM
Format version                           : Version 2
File size                                : 9.61 KiB
Duration                                 : 2 s 23 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 38.9 kb/s
Writing application                      : Lavf55.8.100
Writing library                          : Lavf55.8.100

Audio
ID                                       : 1
Format                                   : Vorbis
Format settings, Floor                   : 1
Codec ID                                 : A_VORBIS
Duration                                 : 2 s 22 ms
Bit rate mode                            : Variable
Bit rate                                 : 128 kb/s
Channel(s)                               : 1 channel
Sampling rate                            : 44.1 kHz
Compression mode                         : Lossy
Stream size                              : 31.6 KiB
Writing application                      : Lavc55.12.102
Writing library                          : libVorbis (Omnipresent) (20120203 (Omnipresent))
Default                                  : Yes
Forced                                   : No
guest271314 commented 4 years ago

When the same input file is recorded using <audio> element with src set to the file and audio.captureStream(), MediaRecorder at Chromium 81 , MediaSource will play the file.

chromium_media_recorder_opus_audio_that_media_source_does_not_play.zip

$ mediainfo chromium_media_recorder_opus_audio_that_media_source_does_not_play.webm
General
Complete name                            : chromium_media_recorder_opus_audio_that_media_source_does_not_play.webm
Format                                   : WebM
Format version                           : Version 4 / Version 2
File size                                : 6.95 KiB
Writing application                      : Chrome
Writing library                          : Chrome
IsTruncated                              : Yes

Audio
ID                                       : 1
Format                                   : Opus
Codec ID                                 : A_OPUS
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 48.0 kHz
Bit depth                                : 32 bits
Compression mode                         : Lossy
Language                                 : English
Default                                  : Yes
Forced                                   : No
guest271314 commented 4 years ago

Nightly 74 will also play audio encoded as Opus when MIME type is "audio/webm;codecs=vorbis".

Chromium 81 does not play some "audio/webm;codecs=vorbis" files, similar to not playing some "audio/webm;codecs=opus" files. Is sampling rate (22050) of original WAV file before encoding as Opus or Vorbis the issue at Chromium?

guest271314 commented 4 years ago

The issue appears to be relating to at least Sampling rate.

ffmpeg -y -i output.wav -acodec libopus output_ffmpeg.webm is playable using MediaSource at Chromium. One difference being Sampling rate: 24.0kHz output.zip

guest271314 commented 4 years ago

Sampling rate is not the issue. Tags are not the issue. Appears to be a Chromium bug https://bugs.chromium.org/p/chromium/issues/detail?id=1042988. Untested at WPT nonetheless.