Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Androide. CSipSimple. ¿Cómo integrar vídeo-llamada en el proyecto?

Quiero agregar llamadas de sip a mi juego de preguntas . Así pues, he construido el proyecto de SipHome por esta manera:

Http://code.google.com/p/csipsimple/wiki/HowToBuild#Without_building_the_native_library

Está bien. Aplicación compilada y lanzada. Ahora quiero añadir la capacidad de videollamada en mi aplicación. Después de la compra ( http://csipsimple.googlecode.com/svn/trunk/ ) Tengo también este SVN dependencias:

CSipSimpleBranded CSipSimpleCodecG729 CSipSimpleCodecPack CSipSimpleVideoPlugin 

He puesto las clases PluginReceiver, CaptureReceiver, PluginReceiverFfmpeg y PluginReceiverVpx del proyecto CSipSimpleVideoPlugin al proyecto SipHome . Y también he puesto descripciones de receptores al proyecto de manifiesto SipHome :

  <receiver android:name=".plugins.video.PluginReceiver" > <intent-filter> <action android:name="com.csipsimple.plugins.action.REGISTER_VIDEO" /> </intent-filter> <meta-data android:name="lib_name" android:value="libpj_video_android.so" /> <!-- For now it does not matter in the future we should have one per device, codec, and converter (if needed) --> <meta-data android:name="init_factory" android:value="pjmedia_webrtc_vid_render_factory" /> </receiver> <!-- Receiver for video capture <receiver android:name=".plugins.video.CaptureReceiver" > <intent-filter> <action android:name="com.csipsimple.plugins.action.REGISTER_CAPTURE_VIDEO" /> </intent-filter> <meta-data android:name="lib_name" android:value="libpj_screen_capture_android.so" /> <meta-data android:name="init_factory" android:value="pjmedia_webrtc_vid_capture_factory" /> </receiver> --> <receiver android:name=".plugins.video.PluginReceiverFfmpeg" > <intent-filter> <action android:name="com.csipsimple.codecs.action.REGISTER_VIDEO_CODEC" /> </intent-filter> <meta-data android:name="lib_name" android:value="libpj_video_android.so" /> <meta-data android:name="init_factory" android:value="pjmedia_codec_ffmpeg_vid_init" /> <meta-data android:name="deinit_factory" android:value="pjmedia_codec_ffmpeg_vid_deinit" /> </receiver> <receiver android:name=".plugins.video.PluginReceiverVpx" > <intent-filter> <action android:name="com.csipsimple.codecs.action.REGISTER_VIDEO_CODEC" /> </intent-filter> <meta-data android:name="lib_name" android:value="libpj_vpx.so" /> <meta-data android:name="init_factory" android:value="pjmedia_codec_vpx_init" /> <meta-data android:name="deinit_factory" android:value="pjmedia_codec_vpx_deinit" /> </receiver> 

He establecido USE_VIDEO = true flag después de iniciar sesión:

 prefProviderWrapper.setPreferenceBooleanValue(SipConfigManager.USE_VIDEO, true); 

Cuando llamo InCallActivity veo VideoButton, pero después de presionarlo tengo esto en logcat:

Pjsua_vid.c. No se puede crear re-INVITE: No hay formato de carga útil SDP en la línea de medios (PJMEDIA_SDP_ENOFMT) [status = 220032]

Y el video no se muestra.

Gracias.

  • Error de depuración de código nativo en android bajo eclipse
  • One Solution collect form web for “Androide. CSipSimple. ¿Cómo integrar vídeo-llamada en el proyecto?”

    No es necesario agregar ninguno de esos receptores al manifiesto principal, solo se utilizan para comprobar si el complemento está instalado.

    Esta es una guía para usar CSipSimple para videollamadas sin VideoPLugin: D

    Modifique el script de compilación CSipSimpleVideoPlugin para que copie el archivo libpj_video_android.so en el directorio libs de CSipSimple. (O simplemente copie manualmente cada vez que cree).

    Finalmente, para incluir la videoteca que necesita para modificar el PjsipService, reemplace las líneas 273 a 307 con algo como;

     String videoLibraryPath = NativeLibManager.getLibraryPath(mContext, "libpj_video_android.so"); if (!videoLibraryPath.isEmpty()) { pj_str_t pjVideoFile = pjsua.pj_str_copy(videoLibraryPath); // Render dynamic_factory videoRenderFactory = csipSimpleConfig.getVideo_render_implementation(); videoRenderFactory.setInit_factory_name(pjsua.pj_str_copy("pjmedia_webrtc_vid_render_factory")); videoRenderFactory.setShared_lib_path(pjVideoFile); // Capture dynamic_factory videoCaptureFactory = csipSimpleConfig.getVideo_capture_implementation(); videoCaptureFactory.setInit_factory_name(pjsua.pj_str_copy("pjmedia_webrtc_vid_capture_factory")); videoCaptureFactory.setShared_lib_path(pjVideoFile); // Video codecs List<CodecInfo> availableCodecs = Lists.newArrayList( new CodecInfo(NativeLibManager.getLibraryPath(mContext, "libpj_video_android.so"), "pjmedia_codec_ffmpeg_vid_init", "pjmedia_codec_ffmpeg_vid_deinit"), new CodecInfo(NativeLibManager.getLibraryPath(mContext, "libpj_vpx.so"), "pjmedia_codec_vpx_init", "pjmedia_codec_vpx_deinit") ); dynamic_factory[] cssCodecs = csipSimpleConfig.getExtra_vid_codecs(); dynamic_factory[] cssCodecsDestroy = csipSimpleConfig.getExtra_vid_codecs_destroy(); int videoCodecIndex = 0; for (CodecInfo codecInfo : availableCodecs) { if (!TextUtils.isEmpty(codecInfo.mLibraryPath)) { // Create cssCodecs[videoCodecIndex].setShared_lib_path(pjsua.pj_str_copy(codecInfo.mLibraryPath)); cssCodecs[videoCodecIndex].setInit_factory_name(pjsua.pj_str_copy(codecInfo.mFactoryInitFunction)); // Destroy cssCodecsDestroy[videoCodecIndex].setShared_lib_path(pjsua.pj_str_copy(codecInfo.mLibraryPath)); cssCodecsDestroy[videoCodecIndex].setInit_factory_name(pjsua.pj_str_copy(codecInfo.mFactoryDeinitFunction)); } videoCodecIndex++; } csipSimpleConfig.setExtra_vid_codecs_cnt(videoCodecIndex); // Converter dynamic_factory convertImpl = csipSimpleConfig.getVid_converter(); convertImpl.setShared_lib_path(pjVideoFile); convertImpl.setInit_factory_name(pjsua.pj_str_copy("pjmedia_libswscale_converter_init")); 

    NativeLibManager:

     public static String getLibraryPath(Context context, String libraryName) { String libraryPath = ""; PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = null; if (packageManager != null) { try { packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_SHARED_LIBRARY_FILES); } catch (NameNotFoundException e) { logger.error(e.getMessage()); } } File libFile = getLibFileFromPackage(packageInfo.applicationInfo, libraryName); if (libFile != null) { libraryPath = libFile.getAbsolutePath(); } return libraryPath; } 

    Para modificar el script de compilación que necesita para ver dispatch_shared_libs.sh, algo posible a lo largo de las líneas de; (Donde "sipstack" es su directorio csipsimple …)

     move_generic_lib() { echo -n "Moving $1.so to $2 project ... " libs_files=$(ls libs/*/${1}.so 2> /dev/null | wc -l | sed -e 's/^[ \t]*//') if [ "$libs_files" != "0" ]; then for lib_folder in libs/*; do if [ -d ${lib_folder} ]; then mkdir -p ../${2}/${lib_folder}; mv ${lib_folder}/${1}.so ../${2}/${lib_folder}/${1}.so; fi done echo "[OK]"; else echo "[--] - plugin not built" fi } move_lib() { move_generic_lib libpj_${1}_codec CSipSimpleCodec${2} } move_lib "g7221" "Pack" move_lib "codec2" "Pack" move_lib "opus" "Pack" move_lib "g726" "Pack" move_lib "aac" "Pack" move_lib "g729" "G729" move_generic_lib "libcrypto" "sipstack" move_generic_lib "libssl" "sipstack" move_generic_lib "libpj_video_android" "sipstack" move_generic_lib "libpj_screen_capture_android" "sipstack" move_generic_lib "libpj_vpx" "sipstack" 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.