diff --git a/linphone/mediastreamer2/src/msticker.c b/linphone/mediastreamer2/src/msticker.c
index 9eaa25431742daedfb4ba1abc9b9aa658975b458..3c4ced2cd786c1a1b2e374943a42932050845f13 100644
--- a/linphone/mediastreamer2/src/msticker.c
+++ b/linphone/mediastreamer2/src/msticker.c
@@ -265,6 +265,8 @@ static void sleepMs(int ms){
 
 static int set_high_prio(void){
 	int precision=2;
+	int result=0;
+	struct sched_param param;
 #ifdef WIN32
 	MMRESULT mm;
 	TIMECAPS ptc;
@@ -286,6 +288,19 @@ static int set_high_prio(void){
 	if(!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST)){
 		ms_warning("SetThreadPriority() failed (%d)\n", GetLastError());
 	}
+#else
+	memset(&param,0,sizeof(param));
+#ifdef TARGET_OS_MAC
+	int policy=SCHED_RR;
+#else
+	int policy=SCHED_OTHER;
+#endif
+	param.sched_priority=sched_get_priority_max(policy);
+	if(result=pthread_setschedparam(pthread_self(),policy, &param)) {
+		ms_warning("Set sched param failed with error code(%i)\n",result);
+	} else {
+		ms_message("MS ticker priority set to max");
+	}
 #endif
 	return precision;
 }