• 让自己的vs工程能够使用webrtc库


    总述

    1、采用的代码是 /69   2018-0816-0156 的版本,vs是2017

    A 、首先webrtc编译大致流程:
    1、gn 生成工程文件

    2、ninja调用相关的编译器实现编译

    所以为了让自己编译出来的webrtc库能够被自己的vs工程使用关键是gn生成工程文件的地方。

    webrtc默认的编译器是clang. 通过她编译出来的lib有时候我们的vs工程用不了会报如下错误:

    webrtc.lib : fatal error LNK1136: invalid or corrupt file(只是举个例子)

    所以在使用gn生成工程文件的时候需要带上  “is_clang=false ” 这样的参数。例如:

    gn gen --ide=vs out/Debug --args="target_winuwp_version="8.1" target_winuwp_family="desktop" use_rtti=true is_clang=false is_component_ffmpeg=false"   (https://groups.google.com/forum/#!topic/discuss-webrtc/9CjnkJ8QVXc)

    去掉单元测试的命令

    gn gen --ide=vs out/Debug --args="target_winuwp_version="8.1" target_winuwp_family="desktop" use_rtti=true is_clang=false libyuv_include_tests=false rtc_include_tests=false libyuv_include_tests=true rtc_use_h264=true"

    B、如何使用编译生成的库

    我们需要相应的lib文件和头文件

    需要注意的是头文件和lib文件相对路径必须要正确,所以我们在复制头文件和lib的时候要保证他们的目录结构没有改变,以下命令可以帮组我们

    以上是复制头文件的例子,自己可以变通一下修改成复制lib文件的例子。

    C、如何搭建自己的工程

     有了头文件有了库文件,那么就开始来搭建我们自己的vs工程吧!!!

    以webrtc自带的peernnection_client为例,首先来看我工程接口截图

    1、自己创建一个窗口工程名字自己随便写(不详述)

    2、把 webrtc-codesrcexamplespeerconnectionclient 把这个目录下的代码放到步骤1中创建的工程中,并引用

    3、把之前复制的头文件和lib文件的引用基本路径设置到你的工程用,

    4、为项目设置相关的宏

    应用webrtc库需要的宏一般只有三个:NOMINMAX  WIN32_LEAN_AND_MEAN WEBRTC_WIN

    但是如果在之后的过程中仍然编译不过,那么就把peerconnection_client.ninja中涉及到的所有宏都设置到工程里面。

    5、为项目添加lib,因为lib很多我就不详述了,直接列出来(一下只是webrtc相关的lib)

    #pragma comment(lib, "obj/third_party/boringssl/boringssl.lib")

    #pragma comment(lib, "obj/third_party/boringssl/boringssl_asm.lib")

    #pragma comment(lib, "obj/third_party/libjpeg_turbo/libjpeg.lib")

    #pragma comment(lib, "obj/third_party/libjpeg_turbo/simd.lib")

    #pragma comment(lib, "obj/third_party/libjpeg_turbo/simd_asm.lib")

    #pragma comment(lib, "obj/third_party/libsrtp/libsrtp.lib")

    #pragma comment(lib, "obj/third_party/libvpx/libvpx.lib")

    #pragma comment(lib, "obj/third_party/libvpx/libvpx_yasm.lib")

    #pragma comment(lib, "obj/third_party/libyuv/libyuv_internal.lib")

    //#pragma comment(lib, "obj/third_party/openmax_dl/dl/dl.lib")

    #pragma comment(lib, "obj/third_party/opus/opus.lib")

    #pragma comment(lib, "obj/third_party/protobuf/protobuf_lite.lib")

    #pragma comment(lib, "obj/third_party/usrsctp/usrsctp.lib")

    #pragma comment(lib, "obj/third_party/winsdk_samples/winsdk_samples.lib")

    #pragma comment(lib, "obj/api/audio_codecs/builtin_audio_decoder_factory.lib")

    #pragma comment(lib, "obj/api/audio_codecs/builtin_audio_encoder_factory.lib")

    #pragma comment(lib, "obj/api/audio_codecs/opus/audio_encoder_opus_config.lib")

    #pragma comment(lib, "obj/api/libjingle_peerconnection_api.lib")

    #pragma comment(lib, "obj/audio/audio.lib")

    #pragma comment(lib, "obj/audio/utility/audio_frame_operations.lib")

    #pragma comment(lib, "obj/call/call.lib")

    #pragma comment(lib, "obj/common_audio/common_audio.lib")

    #pragma comment(lib, "obj/common_audio/common_audio_sse2.lib")

    #pragma comment(lib, "obj/common_video/common_video.lib")

    #pragma comment(lib, "obj/logging/rtc_event_log_impl_base.lib")

    #pragma comment(lib, "obj/logging/rtc_event_log_impl_encoder.lib")

    #pragma comment(lib, "obj/logging/rtc_event_log_proto.lib")

    #pragma comment(lib, "obj/media/rtc_audio_video.lib")

    #pragma comment(lib, "obj/media/rtc_data.lib")

    #pragma comment(lib, "obj/media/rtc_media_base.lib")

    #pragma comment(lib, "obj/modules/audio_coding/ana_config_proto.lib")

    #pragma comment(lib, "obj/modules/audio_coding/ana_debug_dump_proto.lib")

    #pragma comment(lib, "obj/modules/audio_coding/audio_coding.lib")

    #pragma comment(lib, "obj/modules/audio_coding/audio_format_conversion.lib")

    #pragma comment(lib, "obj/modules/audio_coding/audio_network_adaptor.lib")

    #pragma comment(lib, "obj/api/libjingle_peerconnection_api.lib")

    #pragma comment(lib, "obj/api/audio_codecs/builtin_audio_decoder_factory.lib")

    #pragma comment(lib, "obj/api/audio_codecs/builtin_audio_encoder_factory.lib")

    #pragma comment(lib, "obj/api/audio_codecs/g711/audio_decoder_g711.lib")

    #pragma comment(lib, "obj/api/audio_codecs/g711/audio_encoder_g711.lib")

    #pragma comment(lib, "obj/api/audio_codecs/g722/audio_decoder_g722.lib")

    #pragma comment(lib, "obj/api/audio_codecs/g722/audio_encoder_g722.lib")

    #pragma comment(lib, "obj/api/audio_codecs/ilbc/audio_decoder_ilbc.lib")

    #pragma comment(lib, "obj/api/audio_codecs/ilbc/audio_encoder_ilbc.lib")

    #pragma comment(lib, "obj/api/audio_codecs/isac/audio_decoder_isac_float.lib")

    #pragma comment(lib, "obj/api/audio_codecs/isac/audio_encoder_isac_float.lib")

    #pragma comment(lib, "obj/api/audio_codecs/L16/audio_decoder_L16.lib")

    #pragma comment(lib, "obj/api/audio_codecs/L16/audio_encoder_L16.lib")

    #pragma comment(lib, "obj/api/audio_codecs/opus/audio_decoder_opus.lib")

    #pragma comment(lib, "obj/api/audio_codecs/opus/audio_encoder_opus_config.lib")

    #pragma comment(lib, "obj/modules/audio_coding/isac_common.lib")

    #pragma comment(lib, "obj/modules/audio_coding/legacy_encoded_audio_frame.lib")

    #pragma comment(lib, "obj/modules/audio_coding/neteq.lib")

    #pragma comment(lib, "obj/modules/audio_coding/pcm16b.lib")

    #pragma comment(lib, "obj/modules/audio_coding/red.lib")

    #pragma comment(lib, "obj/modules/audio_coding/rent_a_codec.lib")

    #pragma comment(lib, "obj/modules/audio_coding/webrtc_opus.lib")

    //#pragma comment(lib, "obj/modules/audio_conference_mixer/audio_conference_mixer.lib")

    //#pragma comment(lib, "obj/modules/audio_device/audio_device.lib")

    #pragma comment(lib, "obj/modules/audio_mixer/audio_frame_manipulator.lib")

    #pragma comment(lib, "obj/modules/audio_mixer/audio_mixer_impl.lib")

    #pragma comment(lib, "obj/modules/audio_processing/audio_processing.lib")

    //#pragma comment(lib, "obj/modules/audio_processing/audio_processing_sse2.lib")

    #pragma comment(lib, "obj/modules/audio_processing/audioproc_debug_proto.lib")

    #pragma comment(lib, "obj/modules/bitrate_controller/bitrate_controller.lib")

    #pragma comment(lib, "obj/modules/congestion_controller/congestion_controller.lib")

    #pragma comment(lib, "obj/media/rtc_media_base.lib")

    #pragma comment(lib, "obj/modules/pacing/pacing.lib")

    #pragma comment(lib, "obj/modules/remote_bitrate_estimator/remote_bitrate_estimator.lib")

    #pragma comment(lib, "obj/modules/rtp_rtcp/rtp_rtcp.lib")

    #pragma comment(lib, "obj/modules/utility/utility.lib")

    #pragma comment(lib, "obj/modules/video_capture/video_capture_module.lib")

    #pragma comment(lib, "obj/modules/video_coding/video_coding.lib")

    #pragma comment(lib, "obj/modules/video_coding/webrtc_h264.lib")

    #pragma comment(lib, "obj/modules/video_coding/webrtc_vp8.lib")

    #pragma comment(lib, "obj/modules/video_coding/webrtc_vp9.lib")

    #pragma comment(lib, "obj/modules/video_processing/video_processing.lib")

    #pragma comment(lib, "obj/modules/video_processing/video_processing_sse2.lib")

    #pragma comment(lib, "obj/p2p/libstunprober.lib")

    #pragma comment(lib, "obj/p2p/rtc_p2p.lib")

    #pragma comment(lib, "obj/pc/create_pc_factory.lib")

    #pragma comment(lib, "obj/pc/peerconnection.lib")

    #pragma comment(lib, "obj/pc/rtc_pc_base.lib")

    #pragma comment(lib, "obj/rtc_base/rtc_base.lib")

    #pragma comment(lib, "obj/rtc_base/rtc_numerics.lib")

    #pragma comment(lib, "obj/rtc_base/weak_ptr.lib")

    #pragma comment(lib, "obj/stats/rtc_stats.lib")

    #pragma comment(lib, "obj/system_wrappers/system_wrappers.lib")

    #pragma comment(lib, "obj/video/video.lib")

    #pragma comment(lib, "obj/webrtc.lib")

    6、设置windows自带的库

    dbghelp.lib
    dnsapi.lib
    msimg32.lib
    psapi.lib
    shlwapi.lib
    usp10.lib
    version.lib
    wininet.lib
    winmm.lib
    ws2_32.lib
    delayimp.lib
    crypt32.lib
    iphlpapi.lib
    secur32.lib
    dmoguids.lib
    wmcodecdspuuid.lib
    amstrmid.lib
    msdmo.lib
    strmiids.lib

    7、编译

    到这一步时语法错误和连接错误都应该已经没有了。

  • 相关阅读:
    Java集合类
    打开Eclipse报错
    FusionWidgets之AngularGauge图
    OLAP 大表和小表并行hash join
    分页SQL模板
    全表扫描分页
    Java中的a++和++a的区别
    JAVA中线程同步方法
    final、finally和finalize的区别
    HashMap和Hashtable的异同点
  • 原文地址:https://www.cnblogs.com/Haijunzhu/p/9647753.html
Copyright © 2020-2023  润新知