SDL中文论坛
标题:
webrtc修改汇总
[打印本页]
作者:
ancientcc
时间:
2017-1-3 10:35
标题:
webrtc修改汇总
本帖最后由 ancientcc 于 2018-10-21 11:52 编辑
<webrtc>/common_audio/signal_processing/dot_product_with_scale.cc改名为dot_product_with_scale1.cc。——在NDK编译时,用dot_product_with_scale.cc总是被认为dot_product_with_scale.c,然后出了找不到源文件错。
<webrtc>/base/signalthread.cc
要让在Release时也进行验证。
SignalThread::~SignalThread()中的内容
ASSERT(refcount_ == 0);
改为
RTC_CHECK(refcount_ == 0);
复制代码
SignalThread实现双线程协作的后台任务时有个特殊地方:删除时不能直接调用析构函数,而是调用SignalThread:
estroy。此个修改避免app还是调用析构函数。
<webrtc>/modules/video_capture/android
支持了Andorid采集视频,增加此目录。
<webrtc>/modules/utility/source/jvm_android.cc
loaded_classes[]增加
struct {
const char* name;
jclass clazz;
} loaded_classes[] = {
......
{"org/webrtc/videoengine/WebRtcVideoCapturer", nullptr},
}
复制代码
<webrtc>/modules/video_capture/video_capture_factory.cc
VideoCaptureFactory::Create、VideoCaptureFactory::CreateDeviceInfo,所有平台一样处理。
rtc::scoped_refptr<VideoCaptureModule> VideoCaptureFactory::Create(
const char* deviceUniqueIdUTF8) {
return videocapturemodule::VideoCaptureImpl::Create(deviceUniqueIdUTF8);
}
VideoCaptureModule::DeviceInfo* VideoCaptureFactory::CreateDeviceInfo() {
return videocapturemodule::VideoCaptureImpl::CreateDeviceInfo();
}
复制代码
<webrtc>/modules/utility/include/jvm_android.h
class GlobalRef增加两个方法。
JNIEnv* const jni() { return jni_; }
const jobject j_object() { return j_object_; }
复制代码
Android项目中需要复制的java文件
android_library("libjingle_peerconnection_java")
{
......
deps = [
"../../modules/audio_device:audio_device_java",
"../../rtc_base:base_java",
]
}
复制代码
对于jin_generator.py生成的*.h
#include <jni.h>
改为
#include "sdk/android/src/jni/jni_generator_helper.h"
复制代码
android不要忘了編译jni_onload.cc,否则SDL得到的JavaVM会传不到webrtc模块
为让MediaCodec解码h264流需进行些修改,详见
MediaCodec解码h264流
,floor#2
作者:
ancientcc
时间:
2017-2-24 22:03
本帖最后由 ancientcc 于 2017-2-24 22:06 编辑
webrtc-20170224,个人认为Windows平台的的声音设备AudioDeviceWindowCore有BUG!_ptrClientOut->IsFormatSupported会失败。
AudioDeviceWindowCore::CoreAudioIsSupported中的p->PlayoutDevices()返回2,#0时执行以下语句
hr = _ptrClientOut->GetMixFormat(&pWfxOut);
复制代码
hr是S_OK,pWfxOut是以下格式。
(webrtcvoiceengine.cc:1019): webrtc: wFormatTag : 0xFFFE (65534)
(webrtcvoiceengine.cc:1019): webrtc: nChannels : 2
(webrtcvoiceengine.cc:1019): webrtc: nSamplesPerSec : 44100
(webrtcvoiceengine.cc:1019): webrtc: nAvgBytesPerSec: 352800
(webrtcvoiceengine.cc:1019): webrtc: nBlockAlign : 8
(webrtcvoiceengine.cc:1019): webrtc: wBitsPerSample : 32
(webrtcvoiceengine.cc:1019): webrtc: cbSize : 22
复制代码
_ptrClientOut->IsFormatSupported能成功。
但在#1,GetMixFormat返回的hr是S_OK,pWfxOut是以下格式。
(webrtcvoiceengine.cc:1019): webrtc: wFormatTag : 0xFFFE (65534)
(webrtcvoiceengine.cc:1019): webrtc: nChannels : 4
(webrtcvoiceengine.cc:1019): webrtc: nSamplesPerSec : 48000
(webrtcvoiceengine.cc:1019): webrtc: nAvgBytesPerSec: 768000
(webrtcvoiceengine.cc:1019): webrtc: nBlockAlign : 16
(webrtcvoiceengine.cc:1019): webrtc: wBitsPerSample : 32
(webrtcvoiceengine.cc:1019): webrtc: cbSize : 22
复制代码
_ptrClientOut->IsFormatSupported却失败了!试过把IsFormatSupported前去尝试Wfx.nChannels,但还是失败。
这个失改会导致AudioDeviceModuleImpl::CreatePlatformSpecificObjects()时不能创建ptrAudioDevice,程序非法退出。
解决这问题有两种办法,一是重用Webrtc旧版本的AudioDeviceWindowsWave,二是用我自个写的基于SDL的AudioDeviceSDL。考虑到要向后兼容,决定使用AudioDeviceSDL。AudioDeviceSDL在Android是有问题的,为此只是用在Windows。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3