[pjmedia] Unable to find default audio device on Android

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

 



Great!

You are right I forgot add these lines.

Now I can go on, but I get a crash. And 2 warnings when I execute
pjmedia_aud_register_factory.

These are the 2 warnings:

10-11 18:11:30.530: WARN/libOpenSLES(22878): class Engine interface 0
requested but unavailable MPH=6
10-11 18:11:30.530: WARN/libOpenSLES(22878): class Engine interface 1
requested but unavailable MPH=8

But it returning 0 so everything could be allright.

And below is the crash:

10-11 18:11:30.648: INFO/DEBUG(22079): *** *** *** *** *** *** *** *** ***
*** *** *** *** *** *** ***
10-11 18:11:30.648: INFO/DEBUG(22079): Build fingerprint:
'samsung/GT-I9000/GT-I9000:2.3.4/GINGERBREAD/XXJVR:user/release-keys'
10-11 18:11:30.648: INFO/DEBUG(22079): pid: 22878, tid: 22878  >>>
com.csipsimple <<<
10-11 18:11:30.648: INFO/DEBUG(22079): signal 11 (SIGSEGV), code 1
(SEGV_MAPERR), fault addr 00000000
10-11 18:11:30.648: INFO/DEBUG(22079):  r0 00000000  r1 00001f40  r2
b77706d8  r3 b77706d8
10-11 18:11:30.648: INFO/DEBUG(22079):  r4 0043fd7c  r5 bea96f34  r6
81324204  r7 0043fd18
10-11 18:11:30.648: INFO/DEBUG(22079):  r8 002b0714  r9 00000268  10
00000140  fp 8127e161
10-11 18:11:30.648: INFO/DEBUG(22079):  ip ffffff1c  sp bea96e08  lr
81248aa5  pc 8123e70e  cpsr 60000030
10-11 18:11:30.648: INFO/DEBUG(22079):  d0  6172662f73656c61  d1
68632031202c656e
10-11 18:11:30.648: INFO/DEBUG(22079):  d2  4320207070632e6e  d3
7473206574616565
10-11 18:11:30.648: INFO/DEBUG(22079):  d4  38203a206d616572  d5
706d617320303030
10-11 18:11:30.648: INFO/DEBUG(22079):  d6  2c6365732f73656c  d7
6d61732030363120
10-11 18:11:30.648: INFO/DEBUG(22079):  d8  0000000000000000  d9
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d10 0000000000000000  d11
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d12 0000000000000000  d13
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d14 0000000000000000  d15
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d16 4177518808000000  d17
3fe0000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d18 3feff985c46d85eb  d19
3f49e8ee49e85400
10-11 18:11:30.648: INFO/DEBUG(22079):  d20 3c87000000000000  d21
3f1145b88564c411
10-11 18:11:30.648: INFO/DEBUG(22079):  d22 3e21ee94a0c6d216  d23
bda8fae9be8838d4
10-11 18:11:30.648: INFO/DEBUG(22079):  d24 0000000000000000  d25
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d26 0000000000000000  d27
0000000000000000
10-11 18:11:30.648: INFO/DEBUG(22079):  d28 0002aaa80002aaa8  d29
0002aaa80002aaa8
10-11 18:11:30.648: INFO/DEBUG(22079):  d30 0001000000010000  d31
0001000000010000
10-11 18:11:30.648: INFO/DEBUG(22079):  scr 20000012
10-11 18:11:30.760: INFO/StatusBarPolicy(407): onSignalStrengthsChanged
10-11 18:11:30.838: INFO/DEBUG(22079):          #00  pc 0003e70e
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.838: INFO/DEBUG(22079):          #01  pc 00048aa0
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.838: INFO/DEBUG(22079):          #02  pc 0008681a
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.838: INFO/DEBUG(22079):          #03  pc 0007df94
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.838: INFO/DEBUG(22079):          #04  pc 0007e250
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.840: INFO/DEBUG(22079):          #05  pc 00048258
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.840: INFO/DEBUG(22079):          #06  pc 00044396
/data/data/com.csipsimple/lib/libpjsipjni.so
10-11 18:11:30.844: INFO/DEBUG(22079):          #07  pc 00017e74
/system/lib/libdvm.so
10-11 18:11:30.844: INFO/DEBUG(22079):          #08  pc 00049720
/system/lib/libdvm.so
10-11 18:11:30.844: INFO/DEBUG(22079):          #09  pc 0001d074
/system/lib/libdvm.so
10-11 18:11:30.844: INFO/DEBUG(22079):          #10  pc 00022124
/system/lib/libdvm.so
10-11 18:11:30.844: INFO/DEBUG(22079):          #11  pc 0002101c
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #12  pc 0005fe1e
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #13  pc 00067bea
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #14  pc 0001d074
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #15  pc 00022124
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #16  pc 0002101c
/system/lib/libdvm.so
10-11 18:11:30.846: INFO/DEBUG(22079):          #17  pc 0005fc80
/system/lib/libdvm.so
10-11 18:11:30.848: INFO/DEBUG(22079):          #18  pc 0004c166
/system/lib/libdvm.so
10-11 18:11:30.850: INFO/DEBUG(22079):          #19  pc 00038c26
/system/lib/libandroid_runtime.so
10-11 18:11:30.850: INFO/DEBUG(22079):          #20  pc 0003a612
/system/lib/libandroid_runtime.so
10-11 18:11:30.852: INFO/DEBUG(22079):          #21  pc 00008cca
/system/bin/app_process
10-11 18:11:30.856: INFO/DEBUG(22079):          #22  pc 00014bb2
/system/lib/libc.so
10-11 18:11:30.856: INFO/DEBUG(22079): code around pc:
10-11 18:11:30.856: INFO/DEBUG(22079): 8123e6ec 48044601 4478b510 68036800
47986d1b
10-11 18:11:30.856: INFO/DEBUG(22079): 8123e6fc bf00bd10 000e947a 48044601
4478b510
10-11 18:11:30.856: INFO/DEBUG(22079): 8123e70c 68036800 47986ddb bf00bd10
000e9462
10-11 18:11:30.856: INFO/DEBUG(22079): 8123e71c b5104803 68004478 6e1b6803
bd104798
10-11 18:11:30.858: INFO/DEBUG(22079): 8123e72c 000e944c b5104803 68004478
6e5b6803
10-11 18:11:30.858: INFO/DEBUG(22079): code around lr:
10-11 18:11:30.858: INFO/DEBUG(22079): 81248a84 f8c4a0a0 68a00090 faecf05a
00a4f8c4
10-11 18:11:30.858: INFO/DEBUG(22079): 81248a94 ffacf055 f3002802 68e88087
fe30f7f5
10-11 18:11:30.858: INFO/DEBUG(22079): 81248aa4 f6464602 f2c000a9 2a000006
4be4d12e
10-11 18:11:30.858: INFO/DEBUG(22079): 81248ab4 0b80f10d 0c02f04f c024f8cd
f04f447b
10-11 18:11:30.858: INFO/DEBUG(22079): 81248ac4 f1030a04 c9030170 0003e88b
910a6929
10-11 18:11:30.858: INFO/DEBUG(22079): stack:
10-11 18:11:30.858: INFO/DEBUG(22079):     bea96dc8  00000002
10-11 18:11:30.858: INFO/DEBUG(22079):     bea96dcc  b77706d8
( ... )

I paste the code below that retrieve the crash:

PJ_DECL(pj_bool_t) CreateStream( const char *remoteAddress, const char
*codec )
{
    const pjmedia_codec_info *codec_info;
    pjmedia_codec_param       codec_param;

    char          *codec_id = NULL;
    pj_status_t    status;
    pj_sockaddr_in remote_addr;

    if ( _stream_started ) return NO;

    char *remote_addr_str = (char *) remoteAddress;

    if ( codec != NULL )
    {
        codec_id = (char *) codec;
    }

    // Find which codec to use.
    if ( codec_id )
    {
        unsigned count = 1;
        pj_str_t str_codec_id = pj_str( codec_id );
        pjmedia_codec_mgr *codec_mgr =
pjmedia_endpt_get_codec_mgr(_med_endpt);
        status = pjmedia_codec_mgr_find_codecs_by_id( codec_mgr,
&str_codec_id, &count, &codec_info, NULL);

        if ( status != PJ_SUCCESS )
        {
            LOGI( "[MediaManager startStream] - Error: unable to find codec
%s\n", codec_id );
            return status;
        }
    }
    else
    {
        // Default to pcmu
        pjmedia_codec_mgr_get_codec_info(
pjmedia_endpt_get_codec_mgr(_med_endpt), 0, &codec_info);
    }

    // set remote address
    pj_bzero(&remote_addr, sizeof(remote_addr));

    pj_str_t ip = pj_str( strtok(remote_addr_str, ":") );
    pj_uint16_t port = (pj_uint16_t) atoi(strtok(NULL, ":"));

    status = pj_sockaddr_in_init(&remote_addr, &ip, port);
    if (status != PJ_SUCCESS)
    {
        LOGE( "[MediaManager startStream] - Invalid remote address" );
        return status;
    }

    // Get codec default param for info
    status = pjmedia_codec_mgr_get_default_param(
pjmedia_endpt_get_codec_mgr(_med_endpt), codec_info, &codec_param );

    // Disable VAD capabilities
    codec_param.setting.vad = 0;

    status = pjmedia_codec_mgr_set_default_param(
pjmedia_endpt_get_codec_mgr(_med_endpt), codec_info, &codec_param );

    // create stream based on program arguments
    status = create_stream(_pool, _med_endpt, codec_info, _dir, _localPort,
&remote_addr, &_stream);

    if (status != PJ_SUCCESS)
    {
        DestroyStream();
        return status;
    }

    // Should be ok, as create_stream() above succeeded
    pj_assert(status == PJ_SUCCESS);

    // Get the port interface of the stream
    status = pjmedia_stream_get_port( _stream, &_stream_port );
    PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);

    // Create sound device port.
    if ( _dir == PJMEDIA_DIR_ENCODING_DECODING )
    {
        status = pjmedia_snd_port_create(_pool, -1, -1,
                                         _stream_port->info.clock_rate,
                                         _stream_port->info.channel_count,

_stream_port->info.samples_per_frame,
                                         _stream_port->info.bits_per_sample,
                                         0, &_snd_port);
    }
    else if ( _dir == PJMEDIA_DIR_ENCODING )
    {
        status = pjmedia_snd_port_create_rec(_pool, -1,
                                             _stream_port->info.clock_rate,

_stream_port->info.channel_count,

_stream_port->info.samples_per_frame,

_stream_port->info.bits_per_sample,
                                             0, &_snd_port);
    }
    else
    {
        status = pjmedia_snd_port_create_player(_pool, -1,

_stream_port->info.clock_rate,

_stream_port->info.channel_count,

_stream_port->info.samples_per_frame,

_stream_port->info.bits_per_sample,
                                                0, &_snd_port);
    }

    if ( status != PJ_SUCCESS )
    {
        LOGE( "[MediaManager startStream] - Unable to create sound port,
erroCode = %i",status );
        DestroyStream();
        return status;
    }

    _stream_started = YES;
    return status;
}

Again many many thanks.

Best regards,
Isidoro.

2011/10/11 R?gis Montoya <r3gis.3r at gmail.com>

> Ok,
>
> So as you have your own entry point different from csipsimple's one, maybe
> you forgot to report these lines :
>
> http://code.google.com/p/**csipsimple/source/browse/**
> trunk/pjsip_android/apps/**pjsip/project/jni/src/pjsua_**jni_addons.c#435<http://code.google.com/p/csipsimple/source/browse/trunk/pjsip_android/apps/pjsip/project/jni/src/pjsua_jni_addons.c#435>
>
> In your case it is this one :
>
> pjmedia_aud_register_factory(&**pjmedia_opensl_factory);
>
> (Even if I'd advise you to add both lines with the define tests around).
> With this done, pjsip will find the valid aud factory when trying to
> retrieve an audio device factory for current device.
>
>
>
> Le mar. 11 oct. 2011 16:48:16 CEST, Isidoro Castell Egea a ?crit :
>
>>
>> Hi R?gis,
>>
>> First of all thanks for your quickly reply. I'm building the library
>> from CSipSimple project as you say I use pjsip_android subfolder.
>>
>> I try to compile with 2.3 compatibility instead 1.5 but I get the same
>> error code (420006). I can't use CSipSimple directly because I don't
>> use sip part, so I make some native functions in c that do the hard work.
>>
>> Do you have any idea about I'm doing bad?
>>
>> I paste my Application.mk below:
>>
>> APP_PROJECT_PATH := $(call my-dir)/../../../CSipSimple
>> #APP_PROJECT_PATH := $(call my-dir)/project
>> APP_BUILD_SCRIPT= := $(call my-dir)/project/build/Android.**mk
>> #APP_OPTIM := debug
>> APP_OPTIM := release
>> APP_ABI := armeabi armeabi-v7a
>> #APP_ABI := armeabi-v7a
>> #APP_ABI := armv4t
>> APP_STL := stlport_static
>>
>>
>> MY_USE_G729 := 1
>> MY_USE_ILBC := 0
>> MY_USE_G722 := 1
>> MY_USE_G7221 := 0
>> MY_USE_SPEEX := 1
>> MY_USE_GSM := 1
>> MY_USE_SILK := 1
>> MY_USE_CODEC2 := 0
>> MY_USE_TLS := 0
>> MY_USE_WEBRTC := 0
>>
>> MY_ANDROID_DEV := 2
>>
>> BASE_PJSIP_FLAGS := -DPJ_ANDROID=1
>> -DPJMEDIA_HAS_G729_CODEC=$(MY_**USE_G729) \
>> -DPJMEDIA_HAS_ILBC_CODEC=$(MY_**USE_ILBC)
>> -DPJMEDIA_HAS_G722_CODEC=$(MY_**USE_G722) \
>> -DPJMEDIA_HAS_SPEEX_CODEC=$(**MY_USE_SPEEX)
>> -DPJMEDIA_HAS_GSM_CODEC=$(MY_**USE_GSM) \
>> -DPJMEDIA_HAS_SILK_CODEC=$(MY_**USE_SILK)
>> -DPJMEDIA_HAS_CODEC2_CODEC=$(**MY_USE_CODEC2) \
>> -DPJMEDIA_HAS_G7221_CODEC=$(**MY_USE_G7221)
>> -DPJMEDIA_HAS_WEBRTC_CODEC=$(**MY_USE_WEBRTC) \
>> -DPJ_HAS_SSL_SOCK=$(MY_USE_**TLS) -DPJMEDIA_HAS_ZRTP=$(MY_USE_**TLS) \
>> -DPJ_ANDROID_DEVICE=$(MY_**ANDROID_DEV)
>>
>> I don't use Webrtc so I desactivated it.
>>
>> You said "pjsip_android sub project also includes other specific glues
>> for android." What are this includes? And where I can find this file?
>>
>> Many thanks!
>>
>> BR,
>> Isidoro.
>>
>> 2011/10/11 R?gis Montoya <r3gis.3r at gmail.com <mailto:r3gis.3r at gmail.com>>
>>
>>
>> Hi Isidorio,
>>
>> Did you try to build the library from CSipSimple project or a
>> direct build of pjsip from trunk?
>>
>> If you use pjsip from trunk, keep in mind that Android is not yet
>> support by pjsip trunk.
>> So, obviously the glue with android audio device is not included
>> in pjsip, and as consequence it's absolutely normal that it does
>> not find the android device, and that your lib cries about the
>> fact it does not find any glue for this audio device.
>>
>> You should have a look to csipsimple/pjsip_android sub project. It
>> includes two implementation of the audio device for android. One
>> works from android 1.5 and is based on the android java API (it
>> requires to add something in your glue, but if you reuse
>> pjsip_android project, everything is included), another is based
>> on the new OpenSL-ES API introduced in android 2.3 (and is
>> available only from android 2.3 and upper).
>>
>> pjsip_android sub project also includes other specific glues for
>> android. I'm currently finishing the port of the timer
>> implementation so that it will use android alarms instead of a
>> running thread that consume a lot of CPU.
>>
>> Regards,
>> R?gis
>>
>>
>> On 11/10/2011 15:07, Isidoro Castell Egea wrote:
>>
>>>
>>> Hi all,
>>>
>>> I'm developing an android app wich integrate pjmedia in order to
>>> transfer audio each devices. I can initialize media manager, but
>>> when I try to create a stream I get "Unable to find default audio
>>> device" (PJMEDIA_EAUD_NODEFDEV = 420006) from lookup_dev() call
>>> in audiodev.c. And I cannot continue with the stream creation.
>>>
>>> Anyone knows why I get 420006 return code when I call
>>> lookup_dev()? Could be privileges matters?
>>>
>>> Many many thanks in advance!
>>>
>>> BR,
>>> Isidoro.
>>>
>>>
>>>
>>> ______________________________**_________________
>>> Visit our blog:http://blog.pjsip.org
>>>
>>> pjsip mailing list
>>> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>>> http://lists.pjsip.org/**mailman/listinfo/pjsip_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 <mailto:pjsip at lists.pjsip.org>
>>
>> http://lists.pjsip.org/**mailman/listinfo/pjsip_lists.**pjsip.org<http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org>
>>
>>
>>
>>
>> --
>> Isidoro Castell
>> Android developer
>>
>>
>>
>> ______________________________**_________________
>> 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<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<http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org>
>



-- 
Isidoro Castell
Android developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20111011/75870ac8/attachment-0001.html>


[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