方便地将字符串分割。
字符串使用字符指针偏移的方法分割
1
printf("%s\n", "123456789" + 3); // 输出:456789
或
1
2const char *str = "123456789";
printf("%s\n", str + 3); // 输出:456789
方便地将字符串分割。
字符串使用字符指针偏移的方法分割
1 | printf("%s\n", "123456789" + 3); // 输出:456789 |
或
1 | const char *str = "123456789"; |
本文翻译自
https://sourcey.com/precompiled-webrtc-libraries
在开发Webrtc过程中,下载超过10GB的庞然大物和众多的依赖,为加快开发进度。本文介绍怎么获取编译好的Webrtc库。
WebRTC(Web Real-Time Communication),网页即时通信的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API(音视频的采集、编解码、网络传输、显示等功能)。Webrtc不仅仅应用在网页端,同时还支持跨平台windows,linux,mac,android。
在许多请求之后,我们开始提供WebRTC构建来帮助LibSourcey开发人员。构建中包含了Windows和Linux上本地WebRTC开发所需的所有库和头文件,尽管构建是为LibSourcey开发人员设计的,但它们是完全可移植的,可以被所有人使用。
WebRTC存储库是一个超过10GB的庞然大物,有无数依赖项,没有从谷歌获得丰厚报酬的开发人员不应该去处理这些依赖项。然而,一旦多余的文件储存空间减少,归档构建的大小就可能降低到50mb左右,包括所有静态库和头文件。Jenny Craig感到很自豪的!
为自己节省创建WebRTC的泪水和挫折。预编译的本地WebRTC库和头文件可在本文末链接打开选择下载。Linux和Windows的调试和发布版本是为x86和x64架构提供的。
下载与平台系统架构相关的包后解压它们,将它们链接到您的项目,不需要编译任何东西或跳过任何限制。
在Windows上,您需要7-Zip来提取归档文件,而在Linux上,归档文件是.tar.gz格式的。为了方便起见,所有静态WebRTC库都已合并到单个库中(Windows上的lib webrtc_full.lib和Linux上的lib webrtc_full.a),因此您只需将这一个库与项目链接,即可包含所有WebRTC组件。
文件夹结构已经设置,因此您可以将同一版本的x64和x86存档文件提取到单个根目录中:1
2
3
4
5
6
7
8
9
10webrtc-build/
├── third_party/ <-- webrtc依赖内容
├── webrtc/ <-- webrtc核心内容
└── lib/
├── x64/
│ ├── Debug <-- x64调试库
│ ├── Release <-- x64版本库
├── x86/
│ ├── Debug <-- x86调试库
│ ├── Release <-- x86版本库
Windows库是用Visual Studio 2015 Update 3编译的,而Linux构建是在Ubuntu 16.10上用gcc编译的。
调试构建是在启用所有调试符号的情况下创建的,并且版本构建已经进行了优化,以获得最大的性能。gn的具体构建选项如下:1
2
3
4gn gen out/x86/Debug --args="is_debug=true rtc_include_tests=false target_cpu=\"x86\""
gn gen out/x86/Release --args="is_debug=false rtc_include_tests=false target_cpu=\"x86\" symbol_level=0 enable_nacl=false"
gn gen out/x64/Debug --args="is_debug=true rtc_include_tests=false target_cpu=\"x64\""
gn gen out/x64/Release --args="is_debug=false rtc_include_tests=false target_cpu=\"x64\" symbol_level=0 enable_nacl=false"
github仓库
1 | https://github.com/sourcey/webrtc-precompiled-builds |
网页端
1 | https://sourcey.com/precompiled-webrtc-libraries |
Qt项目加载库文件,一般时在pro后缀的项目文件上添加。
-L
是连接库目录,而-l
则为加载库的名字;/usr/local/lib/libtest.so
;C:/mylibs/test.lib
。1 | unix:LIBS += -L/usr/local/lib -ltest |
1 | unix:LIBS += "-L/home/user/test libs" -ltest |
QThread类提供一种独立于平台的线程管理方式。
一个QThread实例管理程序中的一个线程。QThread的执行开始于run()。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。
你可以使用QObject::moveToThread()将工作对象移动到线程中使用。
1 | class Worker : public QObject |
将线程移动到工作线程内执行。因为在线程中有队列的信号槽连接机制,所以在不同线程中使用信号槽是安全的。
另一种单独在线程中执行的方式是继承QThread后重新实现run()函数(run函数内用户的执行操作)。
1 | class WorkerThread : public QThread |
使用select接口写高精确延时。
int select(int maxfdp, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
1 | void usleep(unsigned long usec) |
Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
命令 | 含义 |
---|---|
Esc | 切换到命令行模式 |
a | 在当前光标的右边插入 |
dd | 剪切当前行 |
yy | 拷贝当前行 |
p | 将剪贴板内容复制到光标后 |
:wq | 保存并退出 |
:q! | 强制退出并忽略所有更改 |
/text | 查找text,按n健查找下一个,按N健查找上一个 |
利用nslookup获取dns服务器地址,再通过正则表达式过滤。
process.start("cmd", QStringList()<<"/c"<<"nslookup %COMPUTERNAME% | findstr /i address");
/i
为匹配不区分大小写。QRegExp reg("[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}")
reg.cap(0)
为dns地址;1 | #include <QCoreApplication> |