BTV
BTVFLV 是 http 长连接,请求一次后服务器持续返回视频流数据。网络抖动断连需要重新连接 2RTT 额外延迟。flv 容器通过每帧的 tag 播放,无需等待延迟低。HLS 是不断轮询的短请求序列,获取视频分片,等待切片延迟较大。hls 容器有时长和序列号,可以支持回退。fmp4 容器比 ts 容器的时间戳更精确,且使用索引文件保存初始化信息,每个分片精简。https://www.cnblogs.com/yangchin9/p/18153222https://blog.csdn.net/2301_79941386/article/details/154443573 MP4 重新封装核心步骤 创建 MP4 容器上下文 avformat_alloc_output_context2 首帧时间戳归零 avoid_negative_ts = AVFMT_AVOID_NEG_TS_MAKE_ZERO2. 复制原音视频流参数 avcodec_parameters_copy 配置 movflags = +faststart (moov前置) 寻找首个关键帧对齐 (丢弃开头残帧) 时间基重...
几种音视频编码标准
H.264/H.265/AV1 编码
音视频技术栈基础
分别介绍 SPS / PPS / IDR,以及 NALU
播放器起播流程(整合 FFmpeg 实战)
BTV 解析
MVC 对比 MVVM 架构
一句话总结 MVC:Controller 手动”指挥” View 和 Model,View 的更新靠代码一行行写。 MVVM:View 和 ViewModel 通过数据绑定自动同步,几乎不需要手写”更新界面”的代码。 两种架构各是什么MVC(Model-View-Controller) 角色 职责 Model 数据和业务逻辑 View 显示界面 Controller 接收用户操作,修改 Model,并通知 View 刷新 数据流:用户点击 → Controller 处理 → 改 Model → Controller(或 Model 的信号)手动调用 View 更新。 MVVM(Model-View-ViewModel) 角色 职责 Model 数据和业务逻辑 View 只负责声明”界面长什么样”,并绑定到 ViewModel 的属性 ViewModel 把 Model 的数据加工成”界面直接能用的状态”,并暴露操作命令 数据流:ViewModel 的属性一变,绑定机制自动刷新 View;用户操作调用 ViewModel 的方法。V...
Qt 容器和类型
容器QStringQString 是 Qt 的 Unicode 字符串类型,以 UTF-16 保存文字,并提供查找、截取、替换和编码转换等操作。 QString 与 std::string 的不同存储编码、操作单位和配套功能。 对比 std::string QString 编码 本身不规定编码,常约定为 UTF-8 UTF-16 size() char 数量,存 UTF-8 时就是字节数 UTF-16 码元数 截取单位 char 字节 UTF-16 码元 文本工具 基本拼接、查找、截取等 另有 Unicode 大小写、字符分类、规范化和编码转换等 普通复制 建立独立字符存储 通常先共享存储,修改时分离 接口配合 标准 C++ 及许多第三方库 Qt 控件、QML、模型、网络等 Unicode 给字符规定编码标识;UTF-8、UTF-16 则规定这些字符怎样存成字节或码元。 123456789// 假设源文件和窄字符串字面量使用 UTF-8 编码。std::string bytes = "中国";bytes.size(); ...
Qt 控件
Qwidget 类 用途 常用操作或信号 QLabel 显示文字、图片 setText()、setPixmap() QPushButton 按钮 clicked() QLineEdit 单行输入框 text()、textChanged() QTextEdit 多行文本编辑 setPlainText()、toPlainText() QCheckBox 勾选开关 isChecked()、toggled(bool) QComboBox 下拉选择 addItem()、currentIndexChanged() QSlider 拖动调节数值 setRange()、valueChanged(int) QSpinBox 输入整数 setRange()、value() QStackedWidget 多个页面切换,同一时间显示一个 setCurrentIndex() QListWidget 简单列表 addItem()、currentRowChanged() QDialog 设置、确认等对话框 open()、accept()、reject() ...
Qt 事件与消息循环
事件https://subingwen.cn/qt/event_handler/Qt 框架提供了一些列的事件处理机制,当窗口事件产生之后,事件会经过:事件派发 -> 事件过滤->事件分发->事件处理几个阶段。Qt 窗口中对于产生的一系列事件都有默认的处理动作,如果有特殊需求就需要在合适的阶段重写事件的处理动作。 事件(event)是由系统或者 Qt 本身在不同的场景下发出的。当用户按下/移动鼠标、敲下键盘,或者是窗口关闭/大小发生变化/隐藏或显示都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如鼠标/键盘事件等;另一些事件则是由系统自动发出,如计时器事件。 每一个Qt应用程序都对应一个唯一的 QApplication 应用程序对象,然后调用这个对象的 exec() 函数,它启动了主线程的事件循环,这样 Qt 框架内部的事件检测就开始了(程序将进入事件循环来监听应用程序的事件)。 1234567int main(int argc, char *argv[]){ QApplication a(arg...
数据库基础
包括 MySQL,redis 等

