linphone-developers
[Top][All Lists]
Advanced

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

[Linphone-developers] audio-streaming test in mediastreamer2-sdk


From: luckfox0927
Subject: [Linphone-developers] audio-streaming test in mediastreamer2-sdk
Date: Sun, 12 Apr 2015 01:30:56 +0800

Hi,everybody.

Does anyone have studied for mediastreamer2-sdk.There is a app 
"mediastream.apk" in mediastreamer2-sdk ,
 is used to test vedio-streaming.I modified this code for test 
audio-streaming.The apk will call AudioStreamerInit to 
init mediastreamer OnCreate and call AudioStreamerStart/AudioStreamerStop 
start/stop mediastreamer by random 
in JNI_AudioActivity.
I upload code at 
https://mega.co.nz/#!YJQiDaqR!1zZPDpPvZRhnuBPjp3LOqBjCoBP82fRhaLkGGvCXaRI 

It looks works well, but sometimes get stuck in audiostream.c/audio_stream_stop

ms_ticker_detach(stream->ms.sessions.ticker,stream->soundread);//<===here

Is it mediastreamer-sdk's bug?
How should I fix this problem?





//below is what I added the code in mediastreamer2-sdk

mediastreamer2/build/android/Android.mk

LOCAL_STATIC_LIBRARIES += cpufeatures

ifeq ($(BUILD_MEDIASTREAMER2_SDK), 1)
        LOCAL_SRC_FILES += \
                ../tools/mediastream.c \
                ../tools/JNI_AudioActivity.c

//=======================================================================
//meidastreamer2/tools/JNI_AudioActivity.c
#include "mediastreamer2/mediastream.h"

#define DEBUG
#ifdef DEBUG
#define _DEBUG FALSE
#include "syslog.h"
#else
#define _DEBUG FALSE
#define SyslogI(...) 
#endif



const static char _TAG[]="JNI_AudioActivity";


#define PCMU8_PAYLOAD_TYPE                      0
#define G723_PAYLOAD_TYPE                       4
#define PCMA8_PAYLOAD_TYPE                      8
#define G722_PAYLOAD_TYPE                       9
#define G729_PAYLOAD_TYPE                       18
#define ILBC_PAYLOAD_TYPE                       112


static RtpProfile *rtpProfile =NULL;
JNIEXPORT void JNICALL 
Java_org_linphone_mediastream_AudioStreamerActivity_AudioStreamerHello(JNIEnv 
*env, jobject obj) 
{
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "Hello");
}
JNIEXPORT void JNICALL 
Java_org_linphone_mediastream_AudioStreamerActivity_AudioStreamerInit(JNIEnv 
*env, jobject obj) 
{
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "");
        if(rtpProfile!=0) return;

        ortp_init();
        ms_init();

        rtpProfile = rtp_profile_new("default profile");
        

        //libmsotmp_init();
        //libmsilbc_init();
        //libmsaes_dec_init();
        //libmsaes_enc_init();

        rtp_profile_set_payload(rtpProfile, PCMU8_PAYLOAD_TYPE, 
&payload_type_pcmu8000);        //PCMU
        //rtp_profile_set_payload(&rtpProfile, G723_PAYLOAD_TYPE,  
&payload_type_g7231);                        //G723
        rtp_profile_set_payload(rtpProfile, PCMA8_PAYLOAD_TYPE, 
&payload_type_pcma8000);        //PCMA
        rtp_profile_set_payload(rtpProfile, G722_PAYLOAD_TYPE,  
&payload_type_g722);                    //G722
        rtp_profile_set_payload(rtpProfile, G729_PAYLOAD_TYPE,  
&payload_type_g729);                    //G279
        rtp_profile_set_payload(rtpProfile, ILBC_PAYLOAD_TYPE,  
&payload_type_ilbc);                    //iLBC
        /*
        rtp_profile_set_payload(&av_profile,110,&payload_type_speex_nb);
        rtp_profile_set_payload(&av_profile,111,&payload_type_speex_wb);
        rtp_profile_set_payload(&av_profile,112,&payload_type_ilbc);
        rtp_profile_set_payload(&av_profile,113,&payload_type_amr);
        rtp_profile_set_payload(&av_profile,114,args->custom_pt);
        rtp_profile_set_payload(&av_profile,115,&payload_type_lpc1015);
        */
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "");
}
JNIEXPORT jint JNICALL 
Java_org_linphone_mediastream_AudioStreamerActivity_AudioStreamerStart(JNIEnv 
*env, jobject obj,jshort _codecIdx,jshort _localPort,jstring _remoteIP,jshort 
_remotePort) 
{
        AudioStream *as=NULL;
        int _rate=8000;
        char *remoteIP = (char *) 0 ;

        if(rtpProfile==NULL) return (jint)NULL;

        MSSndCard *playback= 
ms_snd_card_manager_get_default_capture_card(ms_snd_card_manager_get());
        MSSndCard *capture= 
ms_snd_card_manager_get_default_playback_card(ms_snd_card_manager_get());
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, 
"playCard=%s,capCard=%s",playback->name,capture->name);
        if(playback==NULL || capture==NULL)
        {
                return (jint)(NULL);
        }

        if (!_remoteIP) return (jint)NULL;
        
    
        if(NULL==(as=audio_stream_new(_localPort,-1, 0))) return (jint)NULL;
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "Hello");


        remoteIP = (*env)->GetStringUTFChars(env,_remoteIP, 0);
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, 
"codec=%x,[%d------>%s:%d]",_codecIdx,_localPort,remoteIP,_remotePort);

        as->ms.use_rc=1;
        as->features &= ~AUDIO_STREAM_FEATURE_MIXED_RECORDING;

        //if(_aec)
        {
                audio_stream_set_echo_canceller_params(as, 0, 0, 0);
        }
        //audio_stream_enable_gain_control(as, _gc);
        //audio_stream_enable_automatic_gain_control(as,_agc);
        //audio_stream_enable_noise_gate(as,_ng);
        ms_filter_call_method(as->ms.rtpsend,MS_FILTER_SET_SAMPLE_RATE,&_rate);
        
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "");
        if(0!=audio_stream_start_full(as, rtpProfile,remoteIP, 
_remotePort,remoteIP, -1, _codecIdx, 50, NULL, NULL,playback,capture,0))
        {
                SyslogE(_DEBUG, _TAG, __FUNCTION__, __LINE__, 
"audio_stream_start_full_with_key Failed !");
                audio_stream_stop(as);
                as=NULL;
        }
        
        (*env)->ReleaseStringUTFChars(env,_remoteIP, remoteIP);
        SyslogI(_DEBUG, _TAG, __FUNCTION__, __LINE__, "");
        return (jint)as;
}
JNIEXPORT jint JNICALL 
Java_org_linphone_mediastream_AudioStreamerActivity_AudioStreamerStop(JNIEnv 
*env, jobject obj,jint _as)
{
        if(rtpProfile==NULL) return 0xff;

        audio_stream_stop((AudioStream *)_as);
        return 0;
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]