(十四)Rust_无畏并发 无畏并发并发相关概念 Concurrent(并发):程序的不同部分之间独立的执行。 Parallel(并行):程序的不同部分同时运行。 Rust 无畏并发:允许你编写没有细微 Bug 的代码,并在不引入新 Bug 的情况下易于重构。 2022-08-07 Rust 编程基础 Rust 编程基础 (十三)Rust_智能指针 智能指针前言本章节主要介绍 Rust 中“指针”的相关概念,包含智能指针以及其与引用的区别。 介绍标准库中常见的智能指针: Box<T>:在 heap 内存上分配值。 Rc<T>:启用多重所有权的引用计数类型。 R 2022-08-06 Rust 编程基础 Rust 编程基础 (十二)Rust_Cargo与Crates.io Cargo 与 crates.io前言本章主要内容: 通用 release profile 来自定义构建。 尝试在 crates.io 上发布库。 通过 workspaces 组织大工程。 从 crates.io 安装库。 使用自定义命令 2022-08-06 Rust 编程基础 Rust 编程基础 (十一)Rust_迭代器和闭包 迭代器和闭包闭包-使用闭包创建抽象行为 闭包:可以捕获其所在环境的匿名函数。 是匿名函数。 可以保存为变量、作为参数。 可在一个地方创建闭包,然后在另一个上下文中调用闭包来完成运算。 可从其定义的作用域捕获值。 例子-生成自定义运动计 2022-08-06 Rust 编程基础 Rust 编程基础 (十)Rust_编写与运行测试 编写与运行测试测试(函数) 测试的目的是为了验证非测试代码的功能是否与预期一致。 测试函数体通常执行 3 个操作: 测试数据/状态。 运行被测试的代码。 断言结果。 测试函数结构 测试函数需要使用 test 属性(attribute) 2022-08-06 Rust 编程基础 Rust 编程基础 (九)Rust_生命周期 生命周期什么是生命周期 Rust 每个引用都有自己的生命周期。 生命周期:引用保持有效的作用域。 大多数情况:生命周期是隐式的、可被推断的。 当引用的生命周期可能以不同的方式互相关联时:手动标注生命周期。 生命周期的作用: 主要作 2022-07-31 Rust 编程基础 Rust 编程基础 (八)Rust_泛型与Trait 泛型与 Trait重复代码提取 重复代码危害: 容易出错。 需求变更时需要在多处进行更改。 消除重复:提取函数。 识别重复代码。 提取重复代码到函数体中,并在函数签名汇总指定函数到输入和返回值。 将重复的代码使用函数调用进行替代。 2022-07-24 Rust 编程基础 Rust 编程基础 (七)Rust_错误处理 错误处理Rust 错误处理 Rust 的可靠性:错误处理。 大部分情况下:在编译时提示错误,并处理。 错误的分类: 可恢复:例如文件未找到,可以再次尝试。 不可恢复:也就是 bug,例如访问的索引超出范围。 Rust 没有类似异 2022-07-24 Rust 编程基础 Rust 编程基础 (六)Rust_常用集合 常用的集合前言Rust 笔记也做到集合部分了,强烈推荐 rustling 工具,配合官方文档或者本系列笔记作为练习题是相当不错的。 Vector 可以使用 Vector 存储多个值: Vec<T>,称为 Vector。 其由标 2022-07-24 Rust 编程基础 Rust 编程基础 (五)Rust_Package Package、Crate and ModuleRust 的代码组织 代码组织主要包括: 哪些细节可以暴露,哪些细节是私有的。 作用域内哪些名称有效。 这些组织被称为模块系统: Package(包):Cargo 的特性,使用者构建、 2022-07-22 Rust 编程基础 Rust 编程基础 (三)流媒体之FFmpeg命令行解析 流媒体之 FFmpeg 命令行解析前言对于流媒体的核心音视频数据的采集、处理等操作最常用的工具就是 ffmpeg。它还包括一个简单的媒体播放器 ffplay 与 ffprob 媒体流分析器,都是在处理音视频数据上常用的工具。 帮助命令帮助信 2022-07-16 流媒体技术 流媒体 音视频 (二)流媒体之YUV及视频帧 YUV 及视频帧时间线时间线,或者说播放器如何知道在正确的时间来播放每一帧。 当设计一个播放器时,在合适的时间播放每一帧很重要,否则音视频不同步会造成很严重的观看体验。 因此我们需要一些策略能平滑的播放每一帧。所以每一帧都有一个播放时间戳( 2022-07-07 流媒体技术 流媒体 音视频