[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Linphone-developers] audio-streaming test in mediastreamer2-sdk,
luckfox0927 <=