Scirra / Construct-bugs

Public bug report submissions for Construct 3 and Construct Animate. Please read the guidelines then click the 'Issues' tab to get started.
https://www.construct.net
104 stars 82 forks source link

Audio can not be played in background on iOS Devices #7986

Closed dxt-ucl closed 1 week ago

dxt-ucl commented 1 week ago

Audio does not play in the background on iOS devices, even when "Play in background" is ticked on Audio plugin.

Attach a .c3p

audiotest.zip

Minimal project, just contains 1 audio file, 1 layout. Audio plays on start of layout. There is a Start/Stop button to start or stop the audio.

Steps to reproduce

  1. Build this project for iOS in XCode and get it running on any test iphone
  2. Open on any iphone
  3. Music should start playing when the layout opens
  4. Minimise the app, music will stop

Observed result

When you minimise the app, the music stops.

Expected result

The music should keep playing, because the "Play in Background" box is ticked.

Uncertain on this one

System details

View details Product: Construct 3 r388.2 (stable) Browser: Edge 124.0.2478.67 Browser engine: Chromium Context: browser Operating system: Windows 11 Device type: desktop Device pixel ratio: 1.3333333730697632 Logical CPU cores: 16 Approx. device memory: 8 GB User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 Language setting: en-US Local storage Storage quota (approx): 558 gb Storage usage (approx): 1.4 gb (0.2%) Persistant storage: No Browser support notes This list contains missing features that are not required, but could improve performance or user experience if supported. Nothing is missing. Everything is OK! WebGL information Version string: WebGL 2.0 (OpenGL ES 3.0 Chromium) Numeric version: 2 Supports NPOT textures: yes Supports GPU profiling: no Supports highp precision: yes Vendor: Google Inc. (AMD) Renderer: ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11) Major performance caveat: no Maximum texture size: 16384 Point size range: 1 to 1024 Extensions: EXT_clip_control EXT_color_buffer_float EXT_color_buffer_half_float EXT_conservative_depth EXT_depth_clamp EXT_disjoint_timer_query_webgl2 EXT_float_blend EXT_polygon_offset_clamp EXT_texture_compression_bptc EXT_texture_compression_rgtc EXT_texture_filter_anisotropic EXT_texture_mirror_clamp_to_edge EXT_texture_norm16 KHR_parallel_shader_compile NV_shader_noperspective_interpolation OES_draw_buffers_indexed OES_texture_float_linear OVR_multiview2 WEBGL_blend_func_extended WEBGL_clip_cull_distance WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_lose_context WEBGL_multi_draw WEBGL_polygon_mode WEBGL_provoking_vertex WEBGL_stencil_texturing Audio information System sample rate: 48000 Hz Output channels: 2 Output interpretation: speakers Supported decode formats: WebM Opus (audio/webm;codecs=opus) WebM Vorbis (audio/webm;codecs=vorbis) MPEG-4 Opus (audio/mp4;codecs=opus) MPEG-4 AAC (audio/mp4;codecs=mp4a.40.2) MP3 (audio/mpeg) FLAC (audio/flac) PCM WAV (audio/wav;codecs=1) Supported encode formats: WebM Opus (audio/webm;codecs=opus) Video information Supported decode formats: WebM AV1 (video/webm;codecs=av01.0.00M.08) WebM VP9 (video/webm;codecs=vp9) WebM VP8 (video/webm;codecs=vp8) MPEG-4 AV1 (video/mp4;codecs=av01.0.00M.08) MPEG-4 H.265 (video/mp4;codecs=hev1.1.2.L93.B0) MPEG-4 H.264 (video/mp4;codecs=avc1.420034) Supported encode formats: WebM AV1 (video/webm;codecs=av01.0.00M.08) WebM VP9 (video/webm;codecs=vp9) WebM VP8 (video/webm;codecs=vp8) WebM H.264 (video/webm;codecs=avc1.420034)
AshleyScirra commented 1 week ago

I think this is due to iOS limiting app's permission to continue audio playback in the background. You probably need to configure Xcode to allow the app to play audio in the background as Construct's own setting is not enough. For that I think you'll need to refer to Apple's documentation.

dxt-ucl commented 1 week ago

Hi @AshleyScirra I've followed most potential options I can find on that side, e.g. yes it's definitely needed to add the capability for Audio in Background Modes , but that is pretty simple: https://developer.apple.com/documentation/avfoundation/media_playback/configuring_your_app_for_media_playback#4182619

It works for my other native iOS apps but it's still not working for me with any construct 3 builds.

Is there anywhere I can read more about precisely how construct 3 implements audio playback on iOS devices to try and debug?

Does it use cordova-plugin-media ?

https://cordova.apache.org/docs/en/9.x/reference/cordova-plugin-media/

AshleyScirra commented 1 week ago

Construct just plays audio using the Web Audio API in a WKWebView. If you tick "Play in background" Construct will be attempting to play audio in the background; if something other than Construct is blocking it I'm afraid we can't help with that, but perhaps Apple support or other developer forums may be able to help.