`

[Libjingle 0.4]编译Libjingle 0.4+Linphone Voice Engine的总结之一

阅读更多

在Windows下编译Libjingle 0.4+Linphone Voice Engine时候会遇到一些问题, 下面整理了一下, 当然并不是所有的patch都有用的.


http://code.google.com/p/libjingle/issues/detail?id=16
*** 64-bit.patch ***
*** ortp.patch ***
*** gcc4.patch ***
*** libjingle-fileshare.patch ***
*** mutex.patch ***

http://code.google.com/p/libjingle/issues/detail?id=11

fileshare.cc compile error


http://code.google.com/p/libjingle/issues/detail?id=6

Compile fix for new version of libortp2


http://code.google.com/p/libjingle/issues/detail?id=19
cannot login using 'call' from examples

http://code.google.com/p/libjingle/issues/detail?id=29
"make" command gives an error

 

其中, 我遇到的一个编译问题就是ortp.patch所提到的:

http://libjingle.googlecode.com/issues/attachment?aid=5772608404175355205&name=ortp.patch&token=bcee68cb1b3f4d2ddefd7681b733cac8

这里backup一下

diff --exclude='Makefile*' --exclude='.*' --exclude='*~' --exclude='*.lo' --exclude='*.o' -aurbB libjingle-orig/talk/session/phone/linphonemediaengine.cc libjingle-new-ortp/talk/session/phone/linphonemediaengine.cc
--- libjingle-orig/talk/session/phone/linphonemediaengine.cc	2007-02-02 00:07:30.000000000 -0500
+++ libjingle-new-ortp/talk/session/phone/linphonemediaengine.cc	2007-07-19 11:24:09.000000000 -0400
@@ -80,19 +80,19 @@
     } 
 #endif
 #ifdef HAVE_SPEEX
-    if (i->name == speex_wb.mime_type && i->clockrate == speex_wb.clock_rate) {
-      rtp_profile_set_payload(&av_profile, i->id, &speex_wb);
-    } else if (i->name == speex_nb.mime_type && i->clockrate == speex_nb.clock_rate) {
-      rtp_profile_set_payload(&av_profile, i->id, &speex_nb);
+    if (i->name == payload_type_speex_wb.mime_type && i->clockrate == payload_type_speex_wb.clock_rate) {
+      rtp_profile_set_payload(&av_profile, i->id, &payload_type_speex_wb);
+    } else if (i->name == payload_type_speex_nb.mime_type && i->clockrate == payload_type_speex_nb.clock_rate) {
+      rtp_profile_set_payload(&av_profile, i->id, &payload_type_speex_nb);
     }
 #endif
 
     if (i->id == 0)
-      rtp_profile_set_payload(&av_profile, 0, &pcmu8000);
+      rtp_profile_set_payload(&av_profile, 0, &payload_type_pcmu8000);
 
-    if (i->name == telephone_event.mime_type) {
+/*    if (i->name == telephone_event.mime_type) {
       rtp_profile_set_payload(&av_profile, i->id, &telephone_event);
-    }
+    }*/
     
     if (first) {
       LOG(LS_INFO) << "Using " << i->name << "/" << i->clockrate;
@@ -114,12 +114,12 @@
 bool LinphoneMediaEngine::FindCodec(const Codec &c) {
   if (c.id == 0)
     return true;
-  if (c.name == telephone_event.mime_type)
-    return true;
+/*  if (c.name == telephone_event.mime_type)
+    return true;*/
 #ifdef HAVE_SPEEX
-  if (c.name == speex_wb.mime_type && c.clockrate == speex_wb.clock_rate)
+  if (c.name == payload_type_speex_wb.mime_type && c.clockrate == payload_type_speex_wb.clock_rate)
     return true;
-  if (c.name == speex_nb.mime_type && c.clockrate == speex_nb.clock_rate)
+  if (c.name == payload_type_speex_nb.mime_type && c.clockrate == payload_type_speex_nb.clock_rate)
     return true;
 #endif
 #ifdef HAVE_ILBC
@@ -171,8 +171,8 @@
 #ifdef HAVE_SPEEX
   ms_speex_codec_init();
 
-  codecs_.push_back(Codec(110, speex_wb.mime_type, speex_wb.clock_rate, 0, 1, 8));
-  codecs_.push_back(Codec(111, speex_nb.mime_type, speex_nb.clock_rate, 0, 1, 7));
+  codecs_.push_back(Codec(110, payload_type_speex_wb.mime_type, payload_type_speex_wb.clock_rate, 0, 1, 8));
+  codecs_.push_back(Codec(111, payload_type_speex_nb.mime_type, payload_type_speex_nb.clock_rate, 0, 1, 7));
   
 #endif
 
@@ -181,8 +181,8 @@
   codecs_.push_back(Codec(102, payload_type_ilbc.mime_type, payload_type_ilbc.clock_rate, 0, 1, 4));
 #endif
 
-  codecs_.push_back(Codec(0, pcmu8000.mime_type, pcmu8000.clock_rate, 0, 1, 2));
-  codecs_.push_back(Codec(101, telephone_event.mime_type, telephone_event.clock_rate, 0, 1, 1));
+  codecs_.push_back(Codec(0, payload_type_pcmu8000.mime_type, payload_type_pcmu8000.clock_rate, 0, 1, 2));
+ // codecs_.push_back(Codec(101, telephone_event.mime_type, telephone_event.clock_rate, 0, 1, 1));
   return true;
 }
 
diff --exclude='Makefile*' --exclude='.*' --exclude='*~' --exclude='*.lo' --exclude='*.o' -aurbB libjingle-orig/talk/third_party/mediastreamer/audiostream.c libjingle-new-ortp/talk/third_party/mediastreamer/audiostream.c
--- libjingle-orig/talk/third_party/mediastreamer/audiostream.c	2007-02-02 00:07:32.000000000 -0500
+++ libjingle-new-ortp/talk/third_party/mediastreamer/audiostream.c	2007-07-19 11:55:32.000000000 -0400
@@ -112,7 +112,7 @@
 			RtpSession **recvsend){
 	RtpSession *rtpr;
 	rtpr=rtp_session_new(RTP_SESSION_SENDRECV);
-	rtp_session_max_buf_size_set(rtpr,MAX_RTP_SIZE);
+	rtp_session_set_recv_buf_size(rtpr,MAX_RTP_SIZE);
 	rtp_session_set_profile(rtpr,profile);
 	rtp_session_set_local_addr(rtpr,get_local_addr_for(remip),locport);
 	if (remport>0) rtp_session_set_remote_addr(rtpr,remip,remport);
@@ -133,7 +133,7 @@
 	/* creates two rtp filters to recv send streams (remote part)*/
 	
 	rtps=rtp_session_new(RTP_SESSION_SENDONLY);
-	rtp_session_max_buf_size_set(rtps,MAX_RTP_SIZE);
+	rtp_session_set_recv_buf_size(rtps,MAX_RTP_SIZE);
 	rtp_session_set_profile(rtps,profile);
 #ifdef INET6
 	rtp_session_set_local_addr(rtps,"::",locport+2);
@@ -147,7 +147,7 @@
 	rtp_session_set_jitter_compensation(rtps,jitt_comp);
 	
 	rtpr=rtp_session_new(RTP_SESSION_RECVONLY);
-	rtp_session_max_buf_size_set(rtpr,MAX_RTP_SIZE);
+	rtp_session_set_recv_buf_size(rtpr,MAX_RTP_SIZE);
 	rtp_session_set_profile(rtpr,profile);
 #ifdef INET6
 	rtp_session_set_local_addr(rtpr,"::",locport);
@@ -217,8 +217,8 @@
 	ms_filter_set_property(stream->decoder,MS_FILTER_PROPERTY_FREQ,&pt->clock_rate);
 	ms_filter_set_property(stream->decoder,MS_FILTER_PROPERTY_BITRATE,&pt->normal_bitrate);
 	
-	ms_filter_set_property(stream->encoder,MS_FILTER_PROPERTY_FMTP, (void*)pt->fmtp);
-	ms_filter_set_property(stream->decoder,MS_FILTER_PROPERTY_FMTP,(void*)pt->fmtp);
+	ms_filter_set_property(stream->encoder,MS_FILTER_PROPERTY_FMTP, (void*)pt->send_fmtp);
+	ms_filter_set_property(stream->decoder,MS_FILTER_PROPERTY_FMTP,(void*)pt->recv_fmtp);
 	/* create the synchronisation source */
 	stream->timer=ms_timer_new();
 	
diff --exclude='Makefile*' --exclude='.*' --exclude='*~' --exclude='*.lo' --exclude='*.o' -aurbB libjingle-orig/talk/third_party/mediastreamer/msrtprecv.c libjingle-new-ortp/talk/third_party/mediastreamer/msrtprecv.c
--- libjingle-orig/talk/third_party/mediastreamer/msrtprecv.c	2007-02-02 00:07:32.000000000 -0500
+++ libjingle-new-ortp/talk/third_party/mediastreamer/msrtprecv.c	2007-07-19 11:40:11.000000000 -0400
@@ -26,7 +26,7 @@
 MSMessage *msgb_2_ms_message(mblk_t* mp){
 	MSMessage *msg;
 	MSBuffer *msbuf;
-	if (mp->b_datap->ref_count!=1) return NULL; /* cannot handle properly non-unique buffers*/
+	if (mp->b_datap->db_ref!=1) return NULL; /* cannot handle properly non-unique buffers*/
 	/* create a MSBuffer using the mblk_t buffer */
 	msg=ms_message_alloc();
 	msbuf=ms_buffer_alloc(0);
@@ -120,7 +120,7 @@
 		gint got=0;
 		/* we are connected with queues (surely for video)*/
 		/* use the sync system time to compute a timestamp */
-		PayloadType *pt=rtp_profile_get_payload(r->rtpsession->profile,r->rtpsession->payload_type);
+		PayloadType *pt=rtp_profile_get_payload(rtp_session_get_recv_profile(r->rtpsession),rtp_session_get_recv_payload_type(r->rtpsession));
 		if (pt==NULL) {
 			ms_warning("ms_rtp_recv_process(): NULL RtpPayload- skipping.");
 			return;
diff --exclude='Makefile*' --exclude='.*' --exclude='*~' --exclude='*.lo' --exclude='*.o' -aurbB libjingle-orig/talk/third_party/mediastreamer/msrtpsend.c libjingle-new-ortp/talk/third_party/mediastreamer/msrtpsend.c
--- libjingle-orig/talk/third_party/mediastreamer/msrtpsend.c	2007-02-02 00:07:32.000000000 -0500
+++ libjingle-new-ortp/talk/third_party/mediastreamer/msrtpsend.c	2007-07-19 11:41:26.000000000 -0400
@@ -85,7 +85,7 @@
 {
 	guint32 clockts;
 	/* use the sync system time to compute a timestamp */
-	PayloadType *pt=rtp_profile_get_payload(r->rtpsession->profile,r->rtpsession->payload_type);
+	PayloadType *pt=rtp_profile_get_payload(rtp_session_get_send_profile(r->rtpsession),rtp_session_get_send_payload_type(r->rtpsession));
 	g_return_val_if_fail(pt!=NULL,0);
 	clockts=(guint32)(((double)synctime * (double)pt->clock_rate)/1000.0);
 	ms_trace("ms_rtp_send_process: sync->time=%i clock=%i",synctime,clockts);
分享到:
评论

相关推荐

    Step by Step about How to Build libjingle 0.4

    《libjingle 0.4构建指南:一步步解析》 libjingle是Google推出的一款开源通信库,主要用于实现网络音视频通信。它基于P2P技术,支持多种协议,包括ICE、STUN、TURN等,为开发者提供了构建实时通信应用的基础。在...

    libjingle0.6.14编译好的.lib

    标题"libjingle0.6.14编译好的.lib"指出这是一个关于libjingle库的特定版本(0.6.14)的编译结果,通常是一个静态或动态链接库文件,后缀为.lib,表明它是针对Windows平台的,因为Windows系统使用.lib作为库文件格式...

    基于海思芯片(ARM平台)的libjingle静态库(交叉编译).rar

    Libjingle是一个方便实现P2P传输的开源库,由google公司开发,并与2005年12月15日发布第一个版本,可以粗略的看成是Jingle协议的C++实现库(peakflys注:只是和Jingle协议非常相似,并不完全兼容,区别以后介绍),...

    VS2010编译libjingle0.6.2步骤

    VS2010 编译 libjingle0.6.2 步骤 titre : VS2010 编译 libjingle0.6.2 步骤是...知识点解释:编译 libjingle 库是编译 libjingle 0.6.2 库的最后一步骤。在 vs2010 命令行中运行 hammer 命令,以编译 libjingle 库。

    libjingle vs2010 编译通过

    这个项目的核心是提供一个跨平台的库,使得开发者能够轻松地在他们的应用程序中集成VoIP(Voice over IP)和视频聊天功能。在本案例中,我们关注的是使用Visual Studio 2010编译libjingle的场景。 在Windows平台上...

    libjingle源码(linux版本)

    标题"libjingle源码(linux版本)"指的是开源项目libjingle的一个特定版本,针对Linux操作系统。libjingle是Google开发的一个跨平台库,主要用于实现P2P(Peer-to-Peer)通信,它包含了音视频通话、即时消息等多种实时...

    Libjingle 通过vs2005编译

    目前GOOGLECODE上的最新更新删除了libjingle.vcproj文件,采用scons脚本进行编译,增加了学习门槛,本次下载包增加了libjingle.vcproj文件并且已经通过了vs2005编译,方便大家学习使用。 Libjingle - Google Talk ...

    libjingle在windows和ubuntu-linux上编译方法

    ### libjingle在Windows与Ubuntu-Linux上的编译方法 #### 概述 本文主要针对libjingle(版本包括但不限于0.6.6、0.6.9和最新的0.6.10)在Windows与Ubuntu Linux操作系统上的编译过程进行详细介绍,并分享了在编译...

    libjingle 英文手册

    libjingle 中文 手册,很不错的哦,描述的很清楚,还有使用范例

    【英文】Libjingle(GoogleTalk) 交叉编译步骤(arm-linux)

    作者:Group ArmTalk 文档:2011-11-30 指导文档内容: 1. Libjingle是什么 ...3. 怎么交叉编译Libjingle(arm-linux-) 以下是个人说明: 要在ARM架构的嵌入式设备使用libjingle,可以参考该文档进行操作

    带GIPS的libjingle source

    标题 "带GIPS的libjingle source" 指的是一个包含GIPS(Global IP Sound)技术的libjingle源代码库。libjingle是Google开发的一个开源项目,主要用于实现跨平台的实时通信(RTC)功能,特别是网络音视频通话。GIPS是...

    libjingle-0.5.1.zip

    8. **libjingle-0.5.1**:这个版本的libjingle包含了0.5.1版的源代码、库文件和其他资源,可能包括头文件、编译脚本、示例代码等,供开发者在构建自己的WebRTC应用时使用。 总的来说,“libjingle-0.5.1.zip”对于...

    webrtc编译出的libjingle_peerconnection_builds_d92f267

    android需要的libjingle_peerconnection.jar和 arm64-v8a、armeabi-v7a、x86和x86_64下的libjingle_peerconnection_so.so文件

    libjingle文档和0.4.0版本源码

    它最初是为Google Talk服务设计的,现在已经成为WebRTC(Web Real-Time Communication)的核心组件之一。在本篇中,我们将深入探讨libjingle的开发者指南、源码索引,并了解如何从0.4.0版本的源码入手进行学习和开发...

    libjingle_peerconnection

    总结而言,libjingle_peerconnection是WebRTC技术的基石,其强大的功能和灵活的架构使其成为构建实时通信应用的首选组件。通过深入了解和熟练运用这个库,开发者可以创造出高效、安全且用户友好的实时通信解决方案。

    libjingle0.6.14

    标题"libjingle0.6.14"指的是一个特定版本的libjingle库,这是Google开发的一个开源项目,主要用于实现P2P(Peer-to-Peer)通信。描述中的"libjingle0.6.14 版本,p2p学习"暗示了这个压缩包可能是为了学习libjingle...

    libjingle的封装库

    Libjingle是一个开源的跨平台通信库,由Google开发并维护,主要用于实现实时音视频通信和即时消息(IM)功能。它基于XMPP(Extensible Messaging and Presence Protocol)协议,为开发者提供了一套底层接口,可以...

Global site tag (gtag.js) - Google Analytics