【问题标题】:WebRTC library remote audio rendering via AddSinkWebRTC 库通过 AddSink 进行远程音频渲染
【发布时间】:2014-08-01 08:09:41
【问题描述】:

当连接建立并准备就绪时,我的webrtc::PeerConnectionObserver 实现会收到对

的调用
void OnAddStream(webrtc::MediaStreamInterface* stream);

我将webrtc::AudioTrackInterface 拉出webrtc::MediaStreamInterface

我从这里得到一个有效的(非空)指针,称之为track

webrtc::AudioTrackInterface* track;

然后我继续调用track->AddSink(sink),其中sink 是我从webrtc::AudioTrackSinkInterface 继承并实现的类的实例

  virtual void OnData(const void* audio_data,
                      int bits_per_sample,
                      int sample_rate,
                      int number_of_channels,
                      int number_of_frames) = 0;

此时,我希望通过解码的音频数据接收到我的具体类的常规回调,就像我在视频数据可用时通过cricket::VideoFrame* 接收到我的webrtc::VideoRendererInterface 的调用一样,但我没有。

我做错了什么?

【问题讨论】:

    标签: webrtc libjingle


    【解决方案1】:

    除了使用尚未实现的接口之外,您没有做错任何事情。好吧,接口已经实现了,但是它背后没有代码可以真正调用你的OnData()方法!

    有问题的接口在 WebRTC 的mediastreaminterface.h 中。文件下方有一条注释提示AddSink()OnData() 的未实现状态:

    // Get a pointer to the audio renderer of this AudioTrack.
    // The pointer is valid for the lifetime of this AudioTrack.
    // TODO(xians): Remove the following interface after Chrome switches to
    // AddSink() and RemoveSink() interfaces.
    virtual cricket::AudioRenderer* GetRenderer() { return NULL; }
    

    不幸的是,这里引用的AudioRenderer 类看起来不太容易使用。它在 Chromium 的 audio_renderer.h 中定义,并使用各种 Chromium 内部类型。如果您知道如何处理它,请告诉我,因为我正在尝试自己解决同样的问题。

    我确实注意到 WebRTC 的 mediastreamhandler.cc 中的一些代码使用 OnData() 的方式与您和我尝试的方式相同。有一个LocalAudioTrackHandler 构造函数调用音轨上的track->AddSink() 并将LocalAudioSinkAdapter 类的实例传递给它。这个类有一个OnData() 方法,它转发到sink_->OnData()track->AddSink() 调用确实被执行,但 OnData() 方法永远不会被调用!

    我认为这个 AddSink()/OnData() 代码是在 Chromium 内部实现这些调用的预期中添加的,所以当他们切换时它将开始使用这个代码而不是 AudioRenderer 代码。这避免了更新两个代码库彼此完美同步的需要。

    所以我只能等到调用 OnData() 的代码在 Chromium 中实现。

    【讨论】:

    • 那么,这有没有实现过? mediastreaminterface.h 中的 cmets 似乎不再存在,但我正在尝试使用 AudioTrackSinkInterface 并且永远不会调用 onData 回调。
    • 看起来它已经实现了,但是(据我所知)它只适用于远程流,而不适用于本地流(VideoSinkInterface 两者都适用)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多