audioplayers icon indicating copy to clipboard operation
audioplayers copied to clipboard

Audio not working in iOS 17 for UrlSource

Open sibias opened this issue 1 year ago • 10 comments

Checklist

  • [X] I read the troubleshooting guide before raising this issue
  • [X] I made sure that the issue I am raising doesn't already exist

Current bug behaviour

After update to ios 17, play() function fails with following exception. However the same code was working fine in android as well as ios 16.

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(DarwinAudioError, Failed to set source. For troubleshooting, see https://github.com/bluefireteam/audioplayers/blob/main/troubleshooting.md, AVPlayerItem.Status.failed on setSourceUrl, null)

Any .mp3 file with following code produces the above exception

AudioPlayer.global.setAudioContext(AudioContextConfig().build());
final player = AudioPlayer();
ByteData res = await rootBundle.load('assets/test.mp3');
await player.play(UrlSource(Uri.dataFromBytes(res.buffer.asUint8List(), mimeType: "audio/mpeg").toString()), volume: 1);

Expected behaviour

Play the .mp3 file

Steps to reproduce

  1. Execute flutter run on the code sample
  2. ...
  3. ...

Code sample

Code sample
void main() {
}

Affected platforms

iOS

Platform details

iOS 17

AudioPlayers Version

5.0.0

Build mode

debug

Audio Files/URLs/Sources

No response

Screenshots

No response

Logs

my relevant logs
Full Logs
my full logs or a link to a gist

Flutter doctor:

Output of: flutter doctor -v

Related issues / more information

Problem is with UrlSource. When using asset source on iOS 17, it is working fine.

e.g. - player.play(AssetSource('test.mp3'));

Working on PR

no way

sibias avatar Oct 06 '23 10:10 sibias

Can you reconfirm a error is thrown by explicitly setting audioplayers version to 5.1.0 and then 5.2.0 ? Note: since 5.2.0 we changed the error description. Also post the mp3 file here or try to reproduce with one of our example files:

https://github.com/bluefireteam/audioplayers/tree/main/packages/audioplayers/example/assets

Gustl22 avatar Oct 06 '23 10:10 Gustl22

Upgraded to version 5.2.0. Same exception. output given below

MP3 file input -> packages/audioplayers/example/assets/ambient_c_motion.mp3

flutter: ^[[31mAudioPlayers Exception: AudioPlayerException( UrlSource(url: data:audio/mpeg;base64,SUQzAgAAAAAfdlRTUwAAEABMb2dpYyBQcm8gOS4xLjRDT00AAGgAZW5naVR1bk5PUk0AIDAwMDAwMEMyIDAwMDAwMEUxIDAwMDAwNjJBIDAwMDAwNjBCIDAwMDIxMzM5IDAwMDIxMzM5IDAwMDA4MENGIDAwMDA3RjVFIDAwMDA1Q0MxIDAwMDA0REMxAENPTQAAggBlbmdpVHVuU01QQgAgMDAwMDAwMDAgMDAwMDAyMTAgMDAwMDBCMjggMDAwMDAwMDAwMDhENEZDOCAwMDAwMDAwMCAwMDgwMTdENyAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMABUUDEAAAwAZnJhbmsgTm9yYQBUQUwAAA8AUHVibGljIERvbWFpbgBDT00AACUAZW5nAFNvdXJjZTogTWlkbmlnaHQgQ2FzZXR0ZSBTeXN0ZW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<…>

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(DarwinAudioError, Failed to set source. For troubleshooting, see https://github.com/bluefireteam/audioplayers/blob/main/troubleshooting.md, AVPlayerItem.Status.failed on setSourceUrl, null)

sibias avatar Oct 06 '23 14:10 sibias

It probably was introduced in 5.2.0 as urls will be URL-encoded now. Maybe you can ensure this hypothesis, if the bug doesn't occur with 5.1.0. Otherwise, we have to provide a parameter to disable the encoding. But the more long term approach would be to implement #1269 for iOS/macOS.

Note that you haven't had installed 5.0.0 in contrast to your issue description, as you most likely used audioplayers: ^5.0.0 with a caret ^, which upgrades the minor versions on flutter upgrade in the pubspec.lock file. And the output also was introduced in 5.2.0 so it couldn't have been version 5.0.0.

I really don't think it has to do with either iOS 16 or 17, but everything is possible...

Gustl22 avatar Oct 06 '23 19:10 Gustl22

Checked with 4.1.0 also. Observations given below (Test are done without a caret ^ in yaml file)

iOS 16. Version 4.1.0 (working), Version 5.0.0 (working), Version 5.2.0 (working) on both simulator and device iOS 17. No versions working on simulator nor real device

The input parameters given for iOS 16 & 17 are absolutely same. (Including Base64 input)

Logs in version 4.1.0 and the input .mp3 file used during test is attached (The attached .mp3 is very small with just 1 sec audio).

=====LOG START=====

data:audio/mpeg;base64,SUQzAwAAAAAAI1RTU0UAAAAPAAAATGF2ZjU3LjQxLjEwMAAAAAAAAAAAAAAA/+OowAAAAAAAAAAAAEluZm8AAAAPAAAADAAAHmAALy8vLy8vLy9CQkJCQkJCQlVVVVVVVVVVaGhoaGhoaGhoe3t7e3t7e3uOjo6Ojo6OjqGhoaGhoaGhobS0tLS0tLS0x8fHx8fHx8fa2tra2tra2trt7e3t7e3t7f//////////AAAAAExhdmM1Ny40OAAAAAAAAAAAAAAAACQAAAAAAAAAAB5guduaMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+OIxAAAAANIAAAAAExBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+OIxAAAAANIAUAAAExBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq/+OIxAAAAANIAAAAAExBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

flutter: \^[[31mAudioPlayers Exception: AudioPlayerException(
    UrlSource(url: data:audio/mpeg;base64,SUQzAwAAAAAAI1RTU0UAAAAPAAAATGF2ZjU3LjQxLjEwMAAAAAAAAAAAAAAA/+OowAAAAAAAAAAAAEluZm8AAAAPAAAADAAAHmAALy8vLy8vLy9CQkJCQkJCQlVVVVVVVVVVaGhoaGhoaGhoe3t7e3t7e3uOjo6Ojo6OjqGhoaGhoaGhobS0tLS0tLS0x8fHx8fHx8fa2tra2tra2trt7e3t7e3t7f//////////AAAAAExhdmM1Ny40OAAAAAAAAAAAAAAAACQAAAAAAAAAAB5guduaMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<…>

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(DarwinAudioError, AVPlayerItem.Status.failed on setSourceUrl, null, null)

=====LOG END=====

test.zip

sibias avatar Oct 08 '23 05:10 sibias

Thank you for your detailed report. Unfortunately I'm very limited in developing with iOS / macOS. Feel free to contribute

Gustl22 avatar Oct 26 '23 15:10 Gustl22

The error is from /audioplayers_darwin-5.0.2/ios/ClassesWrappedMediaPlayer.swift

inside the function setUpPlayerItemStatusObservation => self.eventHandler.onLog(message: "player status: (status), change: (change)") the following message is logged

[log] AudioPlayers Log: player status: AVPlayerItemStatus(rawValue: 2), change: NSKeyValueObservedChange<AVPlayerItemStatus>(kind: __C.NSKeyValueChange, newValue: nil, oldValue: nil, indexes: nil, isPrior: false)

AVPlayer status codes for reference => (0: unknown, 1: readyToPlay, 2: failed)

The error property from AVPlayer is

**

Optional(Error Domain=AVFoundationErrorDomain Code=-11828 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media format is not supported., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x600000c601b0 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}})

**

I wrote a sample code in swift using XCode 15.0.1 as given below, which can duplicate the error quoted above. Audio play works without any issues on ios 16. But throws error 11828 while running on ios 17.

I don't know reason for this behaviour. May be Apple made some new restrictions in ios 17 regarding DATA URI. Can you check or confirm with the author(s) of audioplayers_darwin regarding this for a potential solution?


import SwiftUI
import AVFoundation

struct ContentView: View {

    //Tiny audio data URI of silence. Paste data uri in previous thread to hear audio

    let data = "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV"

    @State var observer: NSKeyValueObservation?
    @State var playerItem: AVPlayerItem?
    @State var player: AVPlayer?
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            
            Button("Play Audio") {
                print("Button pressed by user")
                
                do {
                    
                    try AVAudioSession.sharedInstance().setMode(.default)
                    try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
                   
                    playerItem = AVPlayerItem.init(url: URL(string: data)!)
                    print(playerItem?.status.rawValue)
                    
                    self.observer =  playerItem?.observe(\.status) { (playerItem, change) in
                            let status = playerItem.status
                            print("Status changed   -  ")
                            print(status.rawValue)
                            print(playerItem.error)
                        }
                    
                    player = AVPlayer(playerItem: playerItem)
                    player?.volume = 1.0
                    player?.play()
                }
                catch {
                    print("Something went wrong")
                }
            }
        }
        .padding()
    }
}

#Preview {
    ContentView()
}

sibias avatar Nov 21 '23 07:11 sibias

The best solution would be to implement #1692 and #1269.

Gustl22 avatar Nov 21 '23 09:11 Gustl22

Found a solution. In the above code snippet where you're instantiating the AVPlayerItem and giving it the URL, we need to instead give it a AVURLAsset and override the MIME type:

let asset = AVURLAsset(url: URL(string: data)!, options: [AVURLAssetOverrideMIMETypeKey: "audio/mpeg"]) playerItem = AVPlayerItem(asset: asset)

Just tested this on iOS 17 Simulator and it's working.

andyshephard avatar Dec 07 '23 17:12 andyshephard

@andyshephard are you interested in writing a PR with a fix and some add some tests to it? ;D

Gustl22 avatar Dec 07 '23 17:12 Gustl22

I have a draft PR, here: https://github.com/bluefireteam/audioplayers/pull/1728 I'm currently reading through the contributor docs and testing before making it ready for review.

andyshephard avatar Dec 12 '23 13:12 andyshephard

For those who still have issue with audio player on iOS, upgrade your audio player plugin to 6.0.0 or above (if available at the time you're reading this) and then add mineType as an additional argument in the player player.play(UrlSource(url,mimeType: "audio/mp3")) If in case the format of your audio is different then add "audio/" as prefix following the format of your audio. For example: - audio/mp3 audio/mpeg etc etc

Karanjit-Pintar avatar Aug 14 '24 10:08 Karanjit-Pintar