Closed Bug 1924052 Opened 1 year ago Closed 1 year ago

gofile.io - Some mp4 videos are not supported on Android Firefox (audio/mp4a-latm)

Categories

(Core :: Audio/Video: Playback, defect, P3)

Firefox 133
ARM
Android
defect

Tracking

()

RESOLVED FIXED
136 Branch
Webcompat Priority P3
Tracking Status
firefox131 --- wontfix
firefox133 --- wontfix
firefox134 --- wontfix
firefox135 --- wontfix
firefox136 --- fixed

People

(Reporter: ctanase, Assigned: jhlin)

References

()

Details

(Keywords: webcompat:platform-bug, webcompat:site-report, Whiteboard: [webcompat-source:web-bugs])

User Story

platform:android
impact:content-missing
configuration:general
affects:some
branch:release
diagnosis-team:media

Attachments

(5 files)

Environment:
Operating system: Android
Firefox version: Firefox 131/133

Preconditions:

Steps to reproduce:

  1. Go to https://gofile.io ( or go to https://gofile.io/d/2PoTus and play the videos if folder is not expired yet)
  2. Tap on "Upload Files" and "Add files".
  3. Upload the video download from the preconditions.
  4. Click on the Download link.
  5. Play the video.

Expected Behavior:
The video can be played.

Actual Behavior:
Unable to play the video, error displayed "This video cannot be played because the format is not compatible with your browser"

Notes:

  • Reproducible on other websites as well (e.g. https://simplevideoplayer.com)
  • Reproduces regardless of the status of ETP
  • Reproduces in Firefox Nightly, and Firefox Release
  • Does not reproduce in Chrome

Created from https://github.com/webcompat/web-bugs/issues/141992

Attached video mp4 FF vs Chrome.mp4
Version: unspecified → Firefox 133
Severity: -- → S4
User Story: (updated)
Priority: -- → P3

This bug is confusing. Which video can't be played, the attached mp4 here on this bug, or is that a recording of the video in question failing to play?

Flags: needinfo?(ctanase)

It looks like the attached mp4 is the issue, not a particular hosting site. I can repro the playback error both by uploading the attached mp4 file to gofile.io and by hosting it on a local server. The file loads successfully on Linux desktop but fails on Android with the following error:

11-06 16:14:23.208  1875  1911 W Web Content: [JavaScript Warning: "Media resource http://192.168.1.1:8099/firefox_audio_fail.mp4 could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005)
11-06 16:14:23.208  1875  1911 W Web Content: Details: Error no decoder found for audio/mp4a-latm" {file: "http://192.168.1.1:8099/firefox_audio_fail.mp4" line: 0}]

HardwareCodecCapability reports support:

11-06 16:14:22.577  2058  2092 D HardwareCodecCapability: MIME support: SW audio/mp4a-latm

CCodecConfig is picking it up as well:

1-06 16:23:48.156  2057  4404 I CCodecConfig: query failed after returning 20 values (BAD_INDEX)
11-06 16:23:48.156  2057  4404 D CCodecConfig: c2 config diff is Dict {
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 coded.aac-packaging.value = 0
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 coded.bitrate.value = 64000
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 coded.pl.level = 0
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 coded.pl.profile = 8192
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::i32 coding.drc.album-mode.value = 0
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::float coding.drc.attenuation-factor.value = 1
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::float coding.drc.boost-factor.value = 1
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::i32 coding.drc.compression-mode.value = 3
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::i32 coding.drc.effect-type.value = 3
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::float coding.drc.encoded-level.value = 0.25
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::float coding.drc.reference-level.value = -16
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 input.buffers.max-size.value = 8192
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 input.delay.value = 0
11-06 16:23:48.156  2057  4404 D CCodecConfig:   string input.media-type.value = "audio/mp4a-latm"
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 output.delay.value = 2
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::float output.drc.output-loudness.value = 0.25
11-06 16:23:48.156  2057  4404 D CCodecConfig:   string output.media-type.value = "audio/raw"
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 raw.channel-count.value = 1
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 raw.channel-mask.value = 0
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 raw.max-channel-count.value = 8
11-06 16:23:48.156  2057  4404 D CCodecConfig:   c2::u32 raw.sample-rate.value = 44100
11-06 16:23:48.156  2057  4404 D CCodecConfig: }

:jolin, do you have any thoughts here? I'd be happy to help dig deeper.

Flags: needinfo?(jolin)

I verified that the file is not re-encoded when hosted on gofile.io by uploading it, downloading it, and comparing the stream information with mediainfo. Here's a fresh gofile.io link to the original video, and mediainfo output. This fails on Android but not on desktop:

$ mediainfo firefox_audio_fail.mp4
General
Complete name                            : firefox_audio_fail.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso8/mp41/avc1)
File size                                : 406 KiB
Duration                                 : 20 s 39 ms
Overall bit rate                         : 166 kb/s
Frame rate                               : 30.000 FPS
Encoded date                             : 2024-07-09 08:31:25 UTC
Tagged date                              : 2024-07-09 08:31:25 UTC

Video
ID                                       : 2
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L3.1
Format settings                          : CABAC / 3 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 3 frames
Format settings, GOP                     : M=4, N=60
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 20 s 33 ms
Bit rate                                 : 69.1 kb/s
Width                                    : 854 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.006
Stream size                              : 169 KiB (42%)
Writing library                          : H264 codec
Language                                 : Korean
Encoded date                             : 2024-07-09 08:31:25 UTC
Tagged date                              : 2024-07-09 08:31:25 UTC
Codec configuration box                  : avcC

Audio
ID                                       : 1
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 20 s 39 ms
Bit rate mode                            : Constant
Bit rate                                 : 88.6 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 44.1 kHz
Frame rate                               : 43.066 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 217 KiB (53%)
Encoded date                             : 2024-07-09 08:31:25 UTC
Tagged date                              : 2024-07-09 08:31:25 UTC

I re-encoded the audio stream and copied the video stream with ffmpeg -i firefox_audio_fail.mp4 -c:v copy -c:a aac -b:a 128k firefox_audio_fail_reencode.mp4. It's available here, and this works on both Android and desktop. Here's the mediainfo output:

$ mediainfo firefox_audio_fail_reencode.mp4 
General
Complete name                            : firefox_audio_fail_reencode.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 407 KiB
Duration                                 : 20 s 39 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 166 kb/s
Frame rate                               : 30.000 FPS
Writing application                      : Lavf59.27.100

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L3.1
Format settings                          : CABAC / 3 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 3 frames
Format settings, GOP                     : M=4, N=60
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 20 s 34 ms
Bit rate                                 : 69.1 kb/s
Width                                    : 854 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.006
Stream size                              : 169 KiB (42%)
Writing library                          : H264 codec
Language                                 : Korean
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 20 s 39 ms
Source duration                          : 20 s 62 ms
Bit rate mode                            : Variable
Bit rate                                 : 88.7 kb/s
Maximum bit rate                         : 128 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 44.1 kHz
Frame rate                               : 43.066 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 217 KiB (53%)
Source stream size                       : 217 KiB (53%)
Default                                  : Yes
Alternate group                          : 1
Flags: needinfo?(ctanase)

Calin, on what device/android version does Chrome play the file?

Flags: needinfo?(ctanase)

Open question is why can Chrome play this but Firefox can't. Waiting on John to chime in.

Flags: needinfo?(ctanase)
Summary: gofile.io - Some mp4 videos are not supported on Firefox → gofile.io - Some mp4 videos are not supported on Android Firefox (audio/mp4a-latm)

(In reply to Jeff Muizelaar [:jrmuizel] from comment #6)

Calin, on what device/android version does Chrome play the file?

OnePlus 6 (Android 11) / Chrome 131.0.6778.135

Webcompat Priority: --- → P3

The audio data in this file is 32-bit and rejected by AndroidDecoderModule, but with bug 1833654 I think it's okay now.

Flags: needinfo?(jolin)
Assignee: nobody → jolin
Status: NEW → ASSIGNED
Status: ASSIGNED → NEW
Pushed by jolin@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/1bc3a065a92d accept non-16-bit audio data on Android. r=padenot https://hg.mozilla.org/integration/autoland/rev/8537e0411470 add test for 32-bit sample size M4A. r=padenot
Component: Site Reports → Audio/Video: Playback
Product: Web Compatibility → Core
Target Milestone: --- → 136 Branch
Flags: in-testsuite+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: