rtmpdump for WebRTC

BUILD.gn

  • 下載
    我把修改過後的上傳到github上了,可以直接下載修改後的源碼。
$ git clone [email protected]:momo0853/rtmpdump.git
  • 爲rtmpdump添加GN編譯BUILD.gn
#----------------------------------------------------
# Author: stoneliu
# Time  : Thu May  7 18:05:00 CST 2020
#----------------------------------------------------

config("public_config") {
  include_dirs = [ "." ]
}

config("librtmp_config") {
  if (is_win) {
    cflags = [
      "/wd4047",
      "/wd4310",
      "/wd4701",
      "/wd4005",
    ]
  } else {
    cflags = [
      "-Wno-unused-const-variable",
      "-Wno-sign-compare",
      "-Wno-delete-incomplete",
      "-Wno-deprecated-register",
      "-Wno-null-dereference",
      "-Wno-non-virtual-dtor",
      "-Wno-tautological-compare",
    ]
    ldflags = [ "-lz" ]
  }

  defines = [
    "RTMPDUMP_VERSION=\"2.4\"",
    "USE_OPENSSL",
  ]
}

static_library("librtmp") {
  sources = [
    "librtmp/amf.c",
    "librtmp/hashswf.c",
    "librtmp/log.c",
    "librtmp/parseurl.c",
    "librtmp/rtmp.c",
  ]

  configs += [ ":librtmp_config" ]
  public_configs = [ ":public_config" ]
  deps = [
    "//third_party/boringssl:boringssl",
  ]
}

executable("rtmpdump") {
  sources = [ "rtmpdump.c" ]
  deps = [ ":librtmp" ]
  configs += [ ":librtmp_config" ]
}

executable("rtmpgw") {
  sources = [ "rtmpgw.c", "thread.c" ]
  deps = [ ":librtmp" ]
  configs += [ ":librtmp_config" ]
}

executable("rtmpsrv") {
  sources = [ "rtmpsrv.c", "thread.c" ]
  deps = [ ":librtmp" ]
  configs += [ ":librtmp_config" ]
}

executable("rtmpsuck") {
  sources = [ "rtmpsuck.c", "thread.c" ]
  deps = [ ":librtmp" ]
  configs += [ ":librtmp_config" ]
}

rtmpdump使用BoringSSL

rtmpdump依賴OpenSSL的,但是這裏我想用BoringSSL(因爲WebRTC內部使用的是BoringSSL),這兩個庫的MDH數據結構的成員函數名字有點點差異,所以需要修改一下。自從2015年OpenSSL出現重大漏洞,Google大部分自身的開源項目都是依賴BoringSSL。

diff --git a/librtmp/dh.h b/librtmp/dh.h
index 5fc3f32..ff7b915 100644
--- a/librtmp/dh.h
+++ b/librtmp/dh.h
@@ -266,7 +266,7 @@ DHInit(int nKeyBits)

   MP_set_w(dh->g, 2);  /* base 2 */

-  dh->length = nKeyBits;
+  dh->priv_length = (unsigned)nKeyBits;
   return dh;

BoringSSL修改

rtmpdump依賴BIO_f_base64,但是BoringSSL並沒有編譯進去。

diff --git a/third_party/boringssl/BUILD.generated.gni b/third_party/boringssl/BUILD.generated.gni
index 0e96ff54f..c69befb38 100644
--- a/third_party/boringssl/BUILD.generated.gni
+++ b/third_party/boringssl/BUILD.generated.gni
@@ -329,6 +329,10 @@ crypto_sources = [
   "src/include/openssl/x509v3.h",
 ]

+crypto_sources += [
+  "src/decrepit/bio/base64_bio.c",
+]
+
 ssl_sources = [
   "src/include/openssl/dtls1.h",
   "src/include/openssl/ssl.h",
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章