Linphone android 版本在使用以太网rj45网线是无法进行视频通话。
!解决办法:
修改LinphoneUtils.java中的 isConnectionFast 方法,强制让其在所有情况下返回 true
Linphone 默认读取手机联系人,开放中使用的机顶盒有的已经将contacts包删除掉了,会造成linphone无法启动,或者无法接听电话。
!解决办法:
1. 注释LinphoneActivity.java 中onResume方法中第1254行,prepareContactsInBackground();
2. LinphoneUtils.java里面有 findUriPictureOfContactAndSetDisplayName( ) 方法,用于查找电话薄,显示联系人。注释掉里面的内容,直接return null
Linphone jni动态链接库 “so文件” load:
在org.linphone.core.LinphoneCoreFactoryImpl.java(位置<. submodules/linphone/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java>) 文件中完成。
Linphone默认会启用蓝牙,如果设备没有蓝牙的话,会出现异常退出的行为,注释掉<src/org/linphone/LinphoneManager.java > 657行 org.linphone.LinphoneManager.initLiblinphone(LinphoneManager.java:657) startBluetooth();
关于linphone视频显示:
linphone远程视频解码后使用Opengl es显示,具体实现:org.linphone.mediastream.video.display包。
c端render实现在opengles_display.c文件中的 Java_org_linphone_mediastream_video_display_OpenGLESDisplay_render() ; update_textures_with_yuv() 方法用于渲染yuv数据到opengl。
Android-opengl-display.c 中初始化显示,创建opengles_display.c中需要用到的显示对象struct opengles_display* d;
Android-opengl-display.c 中 140行处,(*jenv)->CallVoidMethod(jenv,window,ad->set_opengles_display_id, ptr); 用于设置显示所用的struct opengles_display*,够opengles使用。
Linphone通话中会更新视频状态,在linphonecore.c中实现,具体函数为 int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params);
.\submodules\linphone\mediastreamer2\src\voip\bitratedriver.c 中
static int dec_video_bitrate(MSAVBitrateDriver *obj, const MSRateControlAction *action);
方法用于在通话中改变编码的 比特率。
.\coreapi\callbacks -> static void call_received(SalOp *h); 处理接收到电话事件。
Linphone 摄像头数据采集在org.linphone.mediastream.video.capture.AndroidVideoApi[x]JniWrapper.java中完成,
camera.setPreviewCallbackWithBuffer中AndroidVideoApi5JniWrapper.putImage(nativePtr, data);将采集到的数据传递到native层。AndroidVideo.cpp文件中实现jni接口。
!!! <377532905> Linphone 移植群,基于全志 A10/A20/A31,欢迎交流 !!!