WebRTC在Ubuntu中调试

环境:Ubuntu 16.04

编译器:g++-5.4

设备:需要两个USB摄像头

WebRTC peerconnection在Ubuntu中运行会报错,出现段错误,现针对报错做以下修改。

vi  physical_socket_server.cc +1171 注释检测行代码

//RTC_DCHECK(!waiting_);

//RTC_DCHECK(!*value_);

vi linux/main_wnd.cc

void GtkMainWnd::OnRedraw()
{

   gdk_threads_enter();

    VideoRenderer* remote_renderer = remote_renderer_.get();
    if (remote_renderer && remote_renderer->image() != NULL && draw_area_ != NULL) {
        width_ = remote_renderer->width();
        height_ = remote_renderer->height();
        int width = 640; int height = 480;
        if (!draw_buffer_.get()) {
            draw_buffer_size_ = (width * height) * 4;
            draw_buffer_.reset(new uint8_t[draw_buffer_size_]);
            gtk_widget_set_size_request(draw_area_, width, height);
        }

        const uint32_t* image = reinterpret_cast<const uint32_t*>(remote_renderer->image());
        uint32_t* scaled = reinterpret_cast<uint32_t*>(draw_buffer_.get());
        memset(scaled, 0xff, draw_buffer_size_);
        for (int r = 0; r < height_; r += 1) {
            for (int c = 0; c < width_; c += 1) {
                int x = c / 1;
                scaled[x] = image[c];
            }
            image += width_;
            scaled += width_;
        }
        gtk_widget_queue_draw(draw_area_);
    }

    gdk_threads_leave();
}
void GtkMainWnd::Draw(GtkWidget* widget, cairo_t* cr) {
#if GTK_MAJOR_VERSION != 2
  cairo_format_t format = CAIRO_FORMAT_ARGB32;
  cairo_surface_t* surface = cairo_image_surface_create_for_data(
      draw_buffer_.get(), format, width_ * 1, height_ * 1,
      cairo_format_stride_for_width(format, width_ * 1));
  cairo_set_source_surface(cr, surface, 0, 0);
  cairo_rectangle(cr, 0, 0, width_ * 1, height_ * 1);
  cairo_fill(cr);
  cairo_surface_destroy(surface);
#else
  RTC_DCHECK_NOTREACHED();
#endif
}

调试结果

猜你喜欢

转载自blog.csdn.net/qq_31231915/article/details/122478156