Bluetooth not working on IPhone. Suggestions for fix?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Magnus and Even,

The coreaudio_dev was implemented and tested with the old SDK and iOS
which seems to behave a bit differently now. According to the old
documentation and sample code, CMIIW, when there is an audio route
change, we need to dispose and recreate the audio unit since the
device's sample rate may change. However, it seems no longer necessary
so you're spot on with your patch on propListener as mentioned in (2).

Unfortunately, I cannot offer much help for (3) since I can't
reproduce it here. I am not sure what may cause the sudden audio
category change, perhaps a stack trace may tell you what triggered it?
If you can have access to devices with iOS < 4, then you may want to
test it there, just to make sure that it is not iOS4 BG feature
specific problem. Just my two cents.

Best regards,
Ming

On Wed, Oct 20, 2010 at 9:17 PM, Even Andr? Fiskvik <eaf at oyatel.com> wrote:
> Could someone (Benny, Samuel?) please confirm wether they have gotten
> Bluetooth to actually work fine using the coreaudio_dev.c on iPhone?
> We'd hate spending hours of "fixing" the coreaudio_dev.c if it's something
> that isn't broken, but rather an error in how it is used.
> Best regards,
> Even Andr?
> On 19. okt. 2010, at 16.40, Magnus Gal?en wrote:
>
> I'm trying to implement support for bluetooth on IPhone. Although pjmedia
> has support for bluetooth, it seems to me it may not have been tested??After
> a lot of testing I've found out the following:
> 1. Initializing bluetooth via pjsip
> To initialize bluetooth, I run the following code while in call
> (AudioCategory is AVAudioSessionCategoryPlayAndRecord):
> [snippet#1]
> pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH;
> pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE,?&route, PJ_TRUE);
> This triggers the function?ca_stream_set_cap?in 'coreaudio_dev.c'
> [snippet#2]
> ostatus = AudioSessionSetProperty (
> ? ? kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
> ? ? sizeof(btooth), &btooth);
> Where 'btooth' equals 1. The request fails. 'ostatus'
> returns?kAudioSessionUnsupportedPropertyError?("The audio session property
> is not supported.").
>
> 2. Initializing bluetooth from outside pjsip
> To test further, I removed snippet#2 (AudioSessionSetProperty) from
> 'coreaudio_dev.c' (so it only sets 'strm->param.input_route'?and
> returns?PJ_SUCCESS). Then I?included the same code in the app after calling
> snippet#1, so bluetooth-support was turned on in the application, and not in
> pjsip. Now the call to AudioSessionSetProperty succeeds, but another error
> occurs.
> kAudioSessionProperty_AudioRouteChange is triggered which calls propListener
> (in coreaudio_dev.c). propListener stops the stream and creates and sets up
> a new audio unit. This includes resetting the AudioCategory to PlayAndRecord
> which also resets the audio route from HeadsetBT to ReceiverAndMicrophone
> (turns off bluetooth!).
> The user experiences this as follows: The bluetooth headphone device beeps
> to indicate it is turned on, followed by 1-2 seconds of sound, then it is
> turned off. To go around this issue, I simply added "return;" in
> propListener before the call to 'ca_stream_stop', to prevent it from
> resetting the stream.
>
> 3. Initializing bluetooth outside pjsip with modified propListener
> This works in 50% of the cases. When successful, AudioSessionSetProperty
> returns kAudioSessionNoError, and kAudioSessionProperty_AudioRoute is
> correctly set to 'HeadsetBT'. Audio is working fine both ways.
> However, it fails seemingly randomly. Sometimes five times in a row, and
> sometimes it works five times in a row, with no obvious pattern. What
> happens is AudioCategory is set to <null>, which again triggers
> kAudioSessionProperty_AudioRouteChange with routeChangeReason
> CategoryChange. After the callback has returned, the AudioCategory has
> suddenly changed to AVAudioSessionCategorySoloAmbient.
> Resetting or changing category before it changes to
> AVAudioSessionCategorySoloAmbient does not work. No audio is working. There
> are no clues on the Apple Developer forum to similar errors. Reinitializing
> the AudioSession does not work. Changing category or enabling bluetooth
> after this moment returns success in code, but no audio is playing on any
> device. However, hanging up the call and starting a new call, seems to reset
> the audio-device, and audio is working again.
> I'm pulling my hair out on this. Has anyone got a clue to *anything* of what
> is going on? All help is appreciated.
>
> Thanks,
> Magnus Gal?en.
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>



[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux