I'm writing mobile application with Adobe AIR. The application use AIR Microphone API to record sound to file and later replay it.
The problem manifest only on mobile devices, not simulator. Specifically only on iOS devices, android devices seem to work OK.
Sometimes the recorded sound is missing samples. I know this because I use iFunBox to copy the recorded file to another application that replay it. The dropped frame manifest during playback as very fast audio because only part of the samples were recorded.
Sometime the playback is to slow which manifest as very slow audio. I know this because when the recording is fine and the other application play the sound right or when I take a file I recorded in the simulator (which run on my MacBook) and it only play slow on the mobile device.
How can I make sure the sound is good even when the application is a bit busy?
I've built the application as ad-hoc package and install it on iPad using TestFlight and now everything seem to work just fine.
I guess during debug Adobe AIR did not manage to fill the sound buffer fast enough and cause the distortion.
Related
I am trying to enable "Designed for iPad" as a target for my functioning Flutter based iOS app. My understanding is that the app runs the iPad version in a VM when the user is on an M1 (or Apple Silicon) mac.
The app uses just_audio, all features work fine and I can load a file and play (I am using a StreamAudioSource derived from an encrypted file downloaded on disk). When I try to seek in the file I get this error from the iOS side and the audio does not seek but continues playing from where it was (I see a buffering and ready state).
AQMEIO_HAL.cpp:736 kAudioDevicePropertyMute returned err 2003332927
There is very little info on this error apart from this pretty old Apple developer post
https://developer.apple.com/forums/thread/672311
If I play a file as a stream (encrypted HLS) then seek works exactly as expected.
Has anyone had any experience with just_audio targeted this way?
Thanks!
For a streaming radio station, I have an AAC+ audio stream, inside an FLV container, delivered via HTTP. An example URL is http://3023.live.streamtheworld.com/ALTROCK_S01A_AAC. I wrote a simple AIR app (using the latest AIR and Flex SDK's) to play this stream, and it works fine on PC and Android, but doesn't play anything when deployed to the iOS simulator or a device (i.e., the bytes are loaded but there is no sound).
This is similar to Can FLV AAC stream be played in Android, but for iOS.
I wanted to use AIR in this scenario, since I need to listen for the Cue Points in the FLV - and this is easy to do if you're playing Flash in a web browser, so AIR seems like the natural choice. I have also looked at http://code.google.com/p/haxecast/ and https://code.google.com/p/project-thunder-snow/ but they all seem to use the same basic idea (parse the FLV using Netstream in "data generation mode" and feed the AAC+ data to a Video object) - and so they all hit the same wall on iOS.
I also came across this post which seems possibly related although it's not quite the same situation (e.g., it's not FLV).
Is AIR on iOS supposed to support this scenario- namely, streaming AAC+/FLV audio via HTTP?
EDIT: This post also appears to hit the same obstacle - so a lot of people are asking about this situation. Anyone from Adobe have any insight?
After much further research I've concluded that AIR on iOS just doesn't support this, and you have to build a native app (or at least use framework other than AIR) instead.
I have tried to live stream audio (AAC-LC) from iOS for 3 months without much success...
I tried Audio Queues, which work well but there is a strange delay (~4s) and I don't know why (high level API ?)
I tried Audio Units, it sometimes works on the simulator but never with the phone using a modified code from this source
I am really lost, can anyone help me ?
EDIT
I have to do a live streaming application (iPhone-> Wowza Server via RTSP). The video part works well with little delay (1s). Now I'm trying to add audio in addition to video but I'm stuck with the SDK.
tldr : I need to capture microphone input then send AAC frames over the network without getting huge delay
This app, which I just now completed, broadcasts audio between any two iOS devices on the same network:
https://drive.google.com/open?id=1tKgVl0X92SYvgpvbljRzilXNQ6iBcjqM
Compile it with the latest beta release of Xcode 9, and run it on two iOS 11 (beta) devices.
The app is simple; you launch it, and then start talking. Everything is automatic, from network connectivity to audio streaming.
Events generated by the app are displayed in an event log in the app:
Even though the code is simple and concise, the event log was provided to make understanding the app's architecture quicker and more easily.
I am tasked with creating a video recording app for mobile devices (iPhone, iPad, Android) where the users are asked to record a short clip using their phones/tablets.
The video is then uploded to a server (either within the same app or a secondary app/site or via email)
Is it possible for an AIR app to record and save quality video and audio to the camera roll/gallery, or alternatively open the built-in video recorder app from the AIR app?
I am stuck between attempting this using Flash CS5.5 and deploy to iOS and Android using one code base, or building native apps and possibly duplicating my workload.
If I attempt the AIR route, will I hit problems with quality/resolution/usability etc? Or should I stick to building a native app? Time is of the essence too :)
I've done lots of research and not really found anything to swing my decision.
Thank in advance.
P
I have a problem with my flex mobile application on iOS. It is a video chat application with a red5 server.
The video works fine but the voice has a big echo! I tried using getEnhancedMicrophone() but it didn't help.
How can I have Acoustic Echo cancellation or suppression on IOS?
I work on Flash Builder 4.6 with Air 3.5
There no known solutions.
Adobe been promising a fix for years but the solution requires access to Android source code from Google that is not open source. I had the same issues with a videChat app on Android using Adobe Air. I tried as workaround:
Switching mic.setLoopback(false/true) in a timer to break up the audio
Trying to detect sound coming over NetStream and set the local device mic gain to 0
Problem is I cannot detect if someone is talking over NetStream.
Use NetStreamInfo audio properties like audioBytesPerSecond but these do not jump when someone is talking over NetStream.
The problem is solved if the user wears headphones on the mobile side but this is not acceptable.