Windows下webrtc.lib 的编译及vs工程中使用

4,023 阅读1分钟

 一、生成

  • 不支持ffmpeg和openh264的64位debug版:

gn gen --target=x64 --args="is_clang = true use_custom_libcxx = false use_rtti=true rtc_include_tests=false enable_iterator_debugging=true symbol_level=0" --ide=vs2017 out/x64_debug

  • 支持ffmpeg和openh264的64位debug版(支持h264编解码):
  • gn gen --target=x64 --args="is_clang = true use_custom_libcxx = false use_rtti=true rtc_include_tests=false rtc_libvpx_build_vp9=true enable_iterator_debugging=true symbol_level=0 proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\"" --ide=vs2017 out/x64_debug

    提示done后,会在out/x64_debug目录下生成all.sln,使用vs2017打开就能翻阅webrtc的源码了


    二、编译

    编译命令:

    ninja -C out/x64_debug

    编译会使用cang_cl进行编译,速度比较快。

    编译完成后,out\x64_debug\obj目录下会生成我们需要的webrtc.lib库,另外还有可能会用到的.obj文件。

    查看out\x64_debug\obj目录下的webrtc.ninja文件, 发现webrtc.lib 链接了各个模块的.obj文件生成的:

    build obj/webrtc.lib: alink obj/api/libjingle_peerconnection_api/candidate.obj obj/api/libjingle_peerconnection_api/crypto_options.obj obj/api/libjingle_peerconnection_api/data_channel_interface.obj obj/api/libjingle_peerconnection_api/dtls_transport_interface.obj obj/api/libjingle_peerconnection_api/jsep.obj ...

    gn 生成的支持h264版本的webrtc.ninja文件中可发现link了ffmpeg和openh264相关的obj:

    video_coding/webrtc_h264/h264_decoder_impl.obj obj/modules/video_coding/webrtc_h264/h264_encoder_impl.obj obj/third_party/ffmpeg/ffmpeg_internal/ac3_parser.obj obj/third_party/ffmpeg/ffmpeg_internal/ac3tab.obj ...


    三、webrtc.lib的使用

    1、使用vs生成空的PeerConnectionClientDemo工程


    2、拷贝\examples\peerconnection\client下的文件到工程中




    3、添加webrtc 的头文件和库文件

    • 提取头文件的脚本

    #!/bin/bash  
    
    src=`find src/ -name "*.h*"` 
    echo $src  for obj in $src  
    do    
      echo "cp header file $obj"    
      cp --parents $obj include/  
    done
    • 拷贝webrtc.lib、 json.obj、 json_reader.obj、 json_value.obj、 json_writer.obj、field_trial.obj。添加依赖项


    #pragma comment(lib, "ws2_32.lib")
    #pragma comment(lib, "winmm.lib")
    #pragma comment(lib, "secur32.lib")
    #pragma comment(lib, "iphlpapi.lib")
    #pragma comment(lib, "crypt32.lib")
    #pragma comment(lib, "dmoguids.lib")
    #pragma comment(lib, "wmcodecdspuuid.lib")
    #pragma comment(lib, "amstrmid.lib")
    #pragma comment(lib, "msdmo.lib")
    #pragma comment(lib, "d3d11.lib")
    #pragma comment(lib, "dxgi.lib")
    • 添加预处理器定义

    NOMINMAX
    WIN32_LEAN_AND_MEAN
    WEBRTC_WIN
    _CRT_SECURE_NO_WARNINGS
    WIN32
    


    • 编译、运行
    配合out\x64_debug目录下的peerconnection_server.exe 就可以实现视频、语音通话。



    Demo 入口:github.com/kwan530/Pee…


    如有问题,请联系4755879@qq.com.