Depth Love Blog

计算机硕士,音视频方向。GitHub:https://github.com/depthlove

0%

WebRTC 开发(五)编译与运行 Mac 工程 一文中,介绍了如何运行 Mac 工程,可以参考其流程,来运行 iOS 工程,将 WebRTC 应用安装到 iOS 设备上。

编译 WebRTC 的 iOS 工程

进入 WebRTC 源码目录

1
2
3
cd /Users/suntongmian/Documents/workplace 

cd webrtc/src

修改 iOS 应用的 Info.plist 文件

为什么要修改 Info.plist 文件?原因是运行 iOS 应用,应用的 bundle id 和 iOS 证书要匹配。

编辑 examples/objc/AppRTCMobile/ios/Info.plist

1
vi examples/objc/AppRTCMobile/ios/Info.plist

根据 iOS 证书来指定一个可用的 bundle id,替换下面的 com.google.AppRTCMobile

1
2
<key>CFBundleIdentifier</key>
<string>com.google.AppRTCMobile</string>

改为

1
2
<key>CFBundleIdentifier</key>
<string>com.tms.AppRTCMobile</string>
阅读全文 »

做音视频相关的产品,不可避免的要 dump 一些音视频数据用来分析音视频处理逻辑的正确性。FFmpeg 工具会经常用到,比如用 ffplay 播放视频。今天在分析一段视频数据时,想用 ffplay 来播放视频看看数据的正确性,结果在执行命令后遇到了 “zsh: no matches found: 1920*1024” 报错,导致无法使用 ffplay。

遇到问题

在给出解决方案前,先描述下问题是如何产生的。

在 Mac 电脑的终端下执行命令:

1
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920*1024 -framerate 15 dump-1920x1024.yuv

执行后,终端显示结果为:zsh: no matches found: 1920*1024。从这个报错信息可以看出,“*” 这个符号没有被支持。

阅读全文 »

废话不多说,直接上步骤。

下载 Flutter SDK

在终端执行命令:

1
2
3
cd /Users/suntongmian/Documents/workplace

git clone -b v1.13.2 git@github.com:flutter/flutter.git flutter

配置环境变量

配置环境变量前,需要获知电脑默认使用的 shell 类型,在终端执行命令:

1
echo $SHELL
阅读全文 »

前文 WebRTC 开发(六)摄像头采集与视频渲染分析 提到了 WebRTC 视频渲染的大概流程,但没有具体分析每个实现文件的功能,本文会深入到具体的实现文件。

渲染的代码位置

代码位置:webrtc/src/sdk/objc/components/renderer

1
2
3
4
5
6
7
8
9
10
# opengl

RTCNSGLVideoView.h RTCNSGLVideoView.m
RTCEAGLVideoView.h RTCEAGLVideoView.m
RTCOpenGLDefines.h RTCVideoViewShading.h
RTCDefaultShader.h RTCDefaultShader.mm
RTCShader.h RTCShader.mm
RTCNV12TextureCache.h RTCNV12TextureCache.m
RTCI420TextureCache.h RTCI420TextureCache.mm
RTCDisplayLinkTimer.h RTCDisplayLinkTimer.m
阅读全文 »

将 Xcode 升级到 Xcode 11.1 版本后,工程 AppRTCMobile 编译报错 “code object is not signed at all”。详细信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
Showing Recent Messages
CodeSign /Users/suntongmian/Documents/workplace/webrtc/src/out/mac/AppRTCMobile.app (in target 'AppRTCMobile' from project 'products')
cd /Users/suntongmian/Documents/workplace/webrtc/src/out/mac
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate

Signing Identity: "-"

/usr/bin/codesign --force --sign - --entitlements /Users/suntongmian/Library/Developer/Xcode/DerivedData/all-cnckbsrgoylvrsaprwpepbkuujvx/Build/Intermediates.noindex/products.build/mac/AppRTCMobile.build/AppRTCMobile.app.xcent --timestamp=none /Users/suntongmian/Documents/workplace/webrtc/src/out/mac/AppRTCMobile.app

/Users/suntongmian/Documents/workplace/webrtc/src/out/mac/AppRTCMobile.app: code object is not signed at all
In subcomponent: /Users/suntongmian/Documents/workplace/webrtc/src/out/mac/AppRTCMobile.app/Contents/Frameworks/WebRTC.framework
Command CodeSign failed with a nonzero exit code
阅读全文 »

在上一篇文章 WebRTC 开发(五)编译与运行 Mac 工程 中,我们编译了 WebRTC 的工程 AppRTCMobile,也看到了 App 启动后的初始界面。本文基于 WebRTC M76 ,将通过展示两人加入视频会议的 App 界面来分析视频画面的渲染流程。

不管是远端还是本地的用户的视频画面渲染,我们可以将网络或本地的一些预处理看成一个盒子或者模块,我们可以从盒子或模块中不断的取出视频帧,然后通过 cpu 或 gpu 的处理将视频帧,也就是一张图片呈现到显示器上。WebRTC 的视频帧处理逻辑以及渲染逻辑是怎样的呢?这需要通过阅读代码来理清楚流程。

阅读全文 »

WebRTC 开发(四)源码下载与更新 一文中,我们获取到了可以在 iOS,macOS 平台运行的 WebRTC 源码。其中,在执行命令 fetch --nohooks webrtc_ios 时,我们可以明确看到代码支持的平台 ios, mac

1
2
3
4
5
6
7
8
9
10
11
12
13
suntongmiandeMacBook-Pro:webrtc suntongmian$ fetch --nohooks webrtc_ios
Running: gclient root
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
Running: gclient config --spec 'solutions = [
{
"url": "https://webrtc.googlesource.com/src.git",
"managed": False,
"name": "src",
"deps_file": "DEPS",
"custom_deps": {},
},
]
target_os = ["ios", "mac"]

以前,我的精力一直放在 iOS 平台的项目开发上,现在主要投入 Mac 平台的项目开发,所以,对 Mac 项目的关注度更大一些。下面的编译也以 Mac 为切入点。

WebRTC 的编译可以使用 ninja,也可以使用 Xcode。本文采用 Xcode 来编译 WebRTC 的 Mac 工程。

阅读全文 »

前文 WebRTC 开发(二)源码下载与编译 提到了 WebRTC 的下载和编译,但没有提及切换到某个 release 分支去做编译。

看了下博客的文章归档记录,有五个多月没更新音视频相关的文章了。至于是哪些因素影响了,我会在后续的随笔中写写。回归正题,在这五个多月里,WebRTC 更新了一些版本,我们可以通过 https://webrtc.org/release-notes/ 看下2019年1月到现在,Google 的 WebRTC 的进展。

M76 Release Notes, 2019年7月1日

M75 Release Notes, 2019年5月16日

M74 Release Notes, 2019年3月27日

M73 Release Notes, 2019年2月26日

WebRTC 是个庞大的项目,阅读项目的架构和每个版本的 release notes 是很有必要的。

这里顺带提下 Google 的工程开发日历 https://chromiumdash.appspot.com/schedule,可以了解 Google 项目开发的规划。

代码分支 https://chromiumdash.appspot.com/branches 上可以看 Google 浏览器的版本和内置的工具版本,比如 WebRTC

1
2
3
4
5
Milestone  Chromium   Skia     V8       WebRTC  Pdfium
79 3945 m79 7.9-lkgr m79 3945
78 3904 m78 7.8-lkgr m78 3904
77 3865 m77 7.7-lkgr m77 3865
76 3809 m76 7.6-lkgr m76 3809

前面松松散散开了个头,接下来的内容就是实际操作 WebRTC 源码的下载、更新、代码分支的切换。最后将分支 branch-heads/m76 拉取到了本地,后续的文章将基于 m76 这个版本来做讲解和分析。

通过 git branch -r 可以看到存在 branch-heads/m79,但是为什么不用 m79 呢?原因是 m76 是最新的 release 版本,稳定性和可调试性可以得到保证。

阅读全文 »

《搬瓦工搭建 ShadowSocks 翻墙(VPN)系列》

(1) 搬瓦工搭建 ShadowSocks 翻墙(VPN)
(2) 搬瓦工搭建 ShadowSocks 翻墙(VPN)- 解决 IP 被墙
(3) 搬瓦工搭建 ShadowSocks 翻墙(VPN)- 解决 port 被封
(4) 搬瓦工搭建 ShadowSocks 翻墙(VPN)- 更换密码

我写一篇文章时,都要交待下写作的原因。交待下原因,透露出多的信息,会更好的发挥文章的价值。在 搬瓦工搭建 ShadowSocks 翻墙(VPN) 一文发布后不久,就收到了同学的留言“VPN 服务搭建完成后,想更换密码该怎么操作?”。请允许我过多的使用同学一词,因为我觉得这个叫法很亲切,谓之同学,乃共同进步之意。

刚开始看到这个留言的时候,我觉得这不是什么硬需求,毕竟密码设置这个东西在我们操作的时候肯定是在脑海中思考好了的。如果真的出现设置的密码不好记、密码太长、密码忘记了该怎么办呢?真的就需要重新再搭建一次 VPN 服务?有没有更好更简单的办法解决问题?

阅读全文 »