webrtc 支持openh264

h264转视频编解码上还是有所优势,因为x264不支持视频分层,所以优先选择了openh264。

windows上的要支持openh264,需要做一些设定。由于专利等的原因,缺省方式下不支持openh264。下面描述一下支持h264上windows上需要做的事情。

在webrtc m76版本下。

1. 生成工程文件:

使用

gn gen out/Debug32 --ide=vs2017 --args=" proprietary_codecs=true   is_debug=true target_cpu=\"x86\" is_clang=false ffmpeg_branding=\"Chrome\"  rtc_use_h264=true rtc_include_tests=false"

生成工程文件,注意使用上面的生成方式,还需要设置一些环境变量,具体的可以到网上搜一下。

使用了is_clang=false是因为希望生成lib文件可以直接被vc编译器使用

proprietary_codecs=true  表示要用到h264/aac/mp3等编解码。不过,在不使用clang的情况下,还是需要将rtc_use_h264直接设置为true。

另外 use_openh264是否设置不影响。

2. 编译

如果直接使用  ninja -C  out/debug32 编译,会报告一些错误。

首先时,将 modules\video_coding\codecs\h264\目录下的 h264_decoder_impl.h、h264_encoder_impl.h、\h264_color_space.h 几个文件中的#error "See: bugs.webrtc.org/9213#c13."  注释掉。

另外, m76版本中, 还需要注释掉\third_party\ffmpeg\libavcodec\pcm.c的最后一行,原因是PCM_VIDC这个标志未定义,通过宏定义无法正确生成,导致编译报错  C2059  error "string"。


3. 运行

在sdp协商中,如果有多种视频编码,h264往往被放在最后一个,可以在./media/engine/internal_encoder_factory.cc文件中

std::vectorInternalEncoderFactory::GetSupportedFormats() 函数中将h264第一个放进去。

这样,会有协商过程中,会优先使用openh264.

编译通过了,都好了。

你可能感兴趣的:(webrtc 支持openh264)