Depth.Love Blog

本、硕计算机专业,擅长 iOS/Mac 应用开发、音视频开发。项目经验:游戏充值SDK、视频监控播放器、直播播放器/推流器、短视频、视频会议。GitHub:https://github.com/depthlove

0%

以往文章中引用的 WebRTC 开发指南主页的文档无法访问了,查了一下,原因是以前的网址前缀由 https://webrtc.org/ 变更为 https://webrtc.github.io/webrtc-org/ 了,导致之前的文章中的链接都失效了。之前文章中的链接,比如 https://webrtc.org/native-code/ios/ 出现 404 错误。如果要想继续访问,现在就需要使用 https://webrtc.github.io/webrtc-org/native-code/ios/

链接的域名由 webrtc.org 变为 webrtc.github.io 了,webrtc.org 变成了一个纯粹的 WebRTC 产品介绍的主页了,说明 Google 对 WebRTC 产品更加重视了,会将其作为一个产品来重点推广应用。

阅读全文 »

很久没更新文章了,一个字“忙”。忙碌起来,满脑子都是想:

  1. 问题是如何出现的
  2. 如何解决问题
  3. 有没有更好的解决方法

这个过程持续了一年,只能说有些许收获,谈不上有欢喜之感,更多的是身体和精神上的疲惫。

我是如何走上 Mac 应用开发这条路的呢?答案是项目需要。

阅读全文 »

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 的视频帧处理逻辑以及渲染逻辑是怎样的呢?这需要通过阅读代码来理清楚流程。

阅读全文 »