Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 49 additions & 38 deletions BUILD.gn
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import("../webrtc.gni")

declare_args() {
libwebrtc_intel_media_sdk = false
libwebrtc_desktop_capture = false
}

if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
Expand All @@ -19,6 +24,25 @@ config("external_config") {
}

rtc_shared_library("libwebrtc"){
libs = []
include_dirs = [
".",
"include",

]

defines = [
"USE_LIBYUV",
"WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE",
"LIB_WEBRTC_API_EXPORTS",
]

if(is_win){
defines += [ "WEBRTC_WIN", ]
}

public_configs = [ ":external_config" ]

sources = [
"include/libwebrtc.h",
"include/rtc_audio_device.h",
Expand Down Expand Up @@ -103,7 +127,8 @@ rtc_shared_library("libwebrtc"){
"src/rtc_dtmf_sender_impl.h",
]

if(is_win) {
# intel media sdk
if(is_win && libwebrtc_intel_media_sdk) {
sources += [
"src/win/commontypes.h",
"src/win/msdkcommon.h",
Expand Down Expand Up @@ -135,26 +160,17 @@ rtc_shared_library("libwebrtc"){
"src/win/d3d11_manager.h",
"src/win/nativehandlebuffer.h",
]
}

include_dirs = [
".",
"include",

]

defines = [
"USE_LIBYUV",
"WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE",
]

if(is_win) {
include_dirs += [ "src/win/include" ]
defines += [ "USE_INTEL_MEDIA_SDK" ]
defines += [ "USE_INTEL_MEDIA_SDK", ]
configs += [ "//build/config/win:windowed" ]
libs += [ "libmfx_vs2015.lib", "dxgi.lib", "d3d11.lib", ]
lib_dirs = [ "src\win\lib\x64" ]
ldflags = [
"/ignore:4098",
"/ignore:4099",
]
}

public_configs = [ ":external_config" ]

if (is_win && is_clang) {
cflags = [
"-Wno-microsoft-extra-qualification",
Expand All @@ -166,11 +182,6 @@ rtc_shared_library("libwebrtc"){
#suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}

if(is_win){
configs += [ "//build/config/win:windowed" ]
defines += [ "WEBRTC_WIN", "LIB_WEBRTC_API_EXPORTS", ]
}

deps = [
"../api:create_peerconnection_factory",
"../api:libjingle_peerconnection_api",
Expand All @@ -193,27 +204,27 @@ rtc_shared_library("libwebrtc"){
"//third_party/abseil-cpp/absl/memory",
"//third_party/libyuv",
]
libs = []


if(is_win) {

# screen capture device
if(libwebrtc_desktop_capture) {
defines += [ "RTC_DESKTOP_DEVICE"]
sources += [
"include/rtc_desktop_device.h",
"include/rtc_desktop_capturer.h",
"include/rtc_desktop_media_list.h",
"src/rtc_desktop_device_impl.h",
"src/rtc_desktop_device_impl.cc",
"src/rtc_desktop_device_impl.cc",
"src/rtc_desktop_capturer_impl.h",
"src/rtc_desktop_capturer_impl.cc",
"src/rtc_desktop_media_list_impl.h",
"src/rtc_desktop_media_list_impl.cc",
"src/interanl/desktop_capturer.h",
"src/internal/desktop_capturer.cc",
"src/internal/desktop_capturer.cc",
]
deps += [
"../modules/desktop_capture",
"//third_party/libjpeg_turbo:libjpeg",
]
deps += ["../modules/desktop_capture"]
}
if(is_win) {
libs += [ "libmfx_vs2015.lib" ]
lib_dirs = [ "src\win\lib\x64" ]
ldflags = [
"/ignore:4098",
"/ignore:4099",
]
}
}

15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ Use the https://github.com/webrtc-sdk/webrtc.git branch m97_release to compile.

### Create checkout dir

```
```bash
mkdir webrtc_src_m97
cd webrtc_src_m97
```

### Create .gclient

```
```bash
solutions = [
{
"name" : 'src',
Expand All @@ -36,14 +36,15 @@ target_os = ['win']

### Synchronize source code

```
```bash
gclient sync
```

### Compile steps for libwebrtc

Confirm that it is currently in the `src`.

```
```bash
git clone https://github.com/webrtc-sdk/libwebrtc
```

Expand All @@ -67,17 +68,17 @@ index e60d7dd0bd..b9b6acab8b 100644

### GN

```
```bash
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_MSVS_VERSION=2019
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
cd src
gn gen out-debug/Windows-x64 --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=false is_clang=true is_debug=true rtc_use_h264=true rtc_include_tests=false" --ide=vs2019
gn gen out-debug/Windows-x64 --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=false is_clang=true is_debug=true rtc_use_h264=true ffmpeg_branding=\"Chrome\" rtc_include_tests=false rtc_build_examples=false libwebrtc_desktop_capture=true" --ide=vs2019
```

### Compile

```
```bash
ninja -C out-debug/Windows-x64 libwebrtc
```
45 changes: 45 additions & 0 deletions include/rtc_desktop_capturer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#ifndef LIB_WEBRTC_RTC_DESKTOP_CAPTURER_HXX
#define LIB_WEBRTC_RTC_DESKTOP_CAPTURER_HXX

#include "rtc_types.h"
#include "rtc_video_device.h"
#include "rtc_desktop_media_list.h"

namespace libwebrtc {

class DesktopCapturerObserver;

class RTCDesktopCapturer : public RefCountInterface {
public:
enum CaptureState { CS_RUNNING, CS_STOPPED, CS_FAILED};
public:
virtual void RegisterDesktopCapturerObserver(
DesktopCapturerObserver* observer) = 0;

virtual void DeRegisterDesktopCapturerObserver() = 0;

virtual CaptureState Start(uint32_t fps) = 0;

virtual void Stop() = 0;

virtual bool IsRunning() = 0;

virtual scoped_refptr<MediaSource> source() = 0;

virtual ~RTCDesktopCapturer() {}
};

class DesktopCapturerObserver {
public:
virtual void OnStart(scoped_refptr<RTCDesktopCapturer> capturer) = 0;
virtual void OnPaused(scoped_refptr<RTCDesktopCapturer> capturer) = 0;
virtual void OnStop(scoped_refptr<RTCDesktopCapturer> capturer) = 0;
virtual void OnError(scoped_refptr<RTCDesktopCapturer> capturer) = 0;

protected:
~DesktopCapturerObserver() {}
};

} //namespace libwebrtc

#endif // LIB_WEBRTC_RTC_DESKTOP_CAPTURER_HXX
19 changes: 5 additions & 14 deletions include/rtc_desktop_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,17 @@
#define LIB_WEBRTC_RTC_DESKTOP_DEVICE_HXX

#include "rtc_types.h"
#include "rtc_video_device.h"


namespace libwebrtc {

class RTCDesktopCapturer : public RefCountInterface {
public:
virtual ~RTCDesktopCapturer() {}
};
class MediaSource;
class RTCDesktopCapturer;
class RTCDesktopMediaList;

class RTCDesktopDevice : public RefCountInterface {
public:
virtual scoped_refptr<RTCDesktopCapturer> CreateScreenCapturer(uint64_t screen_id) = 0;
virtual scoped_refptr<RTCDesktopCapturer> CreateWindowCapturer(uint64_t window_id) = 0;

virtual bool GetScreenList(SourceList& sources) = 0;
virtual bool GetWindowList(SourceList& sources) = 0;
virtual SourceList EnumerateWindows() = 0;
virtual SourceList EnumerateScreens() = 0;

virtual scoped_refptr<RTCDesktopCapturer> CreateDesktopCapturer(scoped_refptr<MediaSource> source) = 0;
virtual scoped_refptr<RTCDesktopMediaList> GetDesktopMediaList(DesktopType type) = 0;
protected:
virtual ~RTCDesktopDevice() {}
};
Expand Down
64 changes: 64 additions & 0 deletions include/rtc_desktop_media_list.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#ifndef LIB_WEBRTC_RTC_DESKTOP_MEDIA_LIST_HXX
#define LIB_WEBRTC_RTC_DESKTOP_MEDIA_LIST_HXX

#include "rtc_types.h"

namespace libwebrtc {

class MediaSource : public RefCountInterface {
public:
// source id
virtual string id() const = 0;

// source name
virtual string name() const = 0;

// Returns the thumbnail of the source, jpeg format.
virtual portable::vector<unsigned char> thumbnail() const = 0;

virtual DesktopType type() const = 0;

virtual bool UpdateThumbnail() = 0;

protected:
virtual ~MediaSource() {}
};

class MediaListObserver {
public:
virtual void OnMediaSourceAdded(scoped_refptr<MediaSource> source) = 0;

virtual void OnMediaSourceRemoved(scoped_refptr<MediaSource> source) = 0;

virtual void OnMediaSourceNameChanged(scoped_refptr<MediaSource> source) = 0;

virtual void OnMediaSourceThumbnailChanged(scoped_refptr<MediaSource> source) = 0;

protected:
virtual ~MediaListObserver() {}
};

class RTCDesktopMediaList : public RefCountInterface {
public:
virtual void RegisterMediaListObserver(
MediaListObserver* observer) = 0;

virtual void DeRegisterMediaListObserver() = 0;

virtual DesktopType type() const = 0;

virtual int32_t UpdateSourceList(bool force_reload = false, bool get_thumbnail = true) = 0;

virtual int GetSourceCount() const = 0;

virtual scoped_refptr<MediaSource> GetSource(int index) = 0;

virtual bool GetThumbnail(scoped_refptr<MediaSource> source, bool notify = false) = 0;

protected:
~RTCDesktopMediaList() {}
};

} //namespace libwebrtc

#endif // LIB_WEBRTC_RTC_DESKTOP_MEDIA_LIST_HXX
2 changes: 2 additions & 0 deletions include/rtc_peerconnection_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

#include "rtc_audio_source.h"
#include "rtc_audio_track.h"
#ifdef RTC_DESKTOP_DEVICE
#include "rtc_desktop_device.h"
#endif
#include "rtc_media_stream.h"
#include "rtc_mediaconstraints.h"
#include "rtc_video_device.h"
Expand Down
19 changes: 1 addition & 18 deletions include/rtc_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
#define LIB_WEBRTC_API
#endif

#if !defined(RTC_DESKTOP_DEVICE) && defined(WIN32)
#define RTC_DESKTOP_DEVICE
#endif

#include "base/fixed_size_function.h"
#include "base/portable.h"
#include "base/refcount.h"
Expand Down Expand Up @@ -103,20 +99,7 @@ struct SdpParseError {
string description;
};

enum SourceType {
kWindow,
kEntireScreen,
};

struct Source {
public:
string id;
string title;
SourceType type;
};

// typedef portable::vector<Source> SourceList;
using SourceList = portable::vector<Source>;
enum DesktopType { kScreen, kWindow };

} // namespace libwebrtc

Expand Down
Loading