0%

命令行工具简介

x264 命令行工具执行流程如下:

  1. 首先调用 parse() 解析输入的命令行参数
    1. parse()首先调用 x264_param_default() 为存储参数的结构体 x264_param_t 赋默认值
    2. 循环中调用 getopt_long() 逐个解析输入的参数,并作相应的处理
    3. 调用 select_output() 解析输出文件格式(例如 raw,flv,MP4…)
    4. 调用 select_input() 解析输入文件格式(例如 yuv,y4m…)
  2. 然后调用 encode() 进行编码
    1. encode() 首先调用 x264_encoder_open() 打开 H.264 编码器
    2. 然后调用 x264_encoder_headers() 输出 H.264 码流的头信息(例如 SPS、PPS、SEI)
    3. 循环调用 encode_frame() 逐帧编码视频
      1. encode_frame()中调用了x264_encoder_encode()完成了具体的编码工作
    4. 调用x264_encoder_close()关闭解码器

x264 简介

x264 是一个免费的软件库和应用程序,用于将视频流编码为 H.264/MPEG-4 AVC 压缩格式,并且根据 GNU GPL 的条款发布。

功能概述

  • 提供一流的性能、压缩和功能。
  • 在单个消费级计算机上实时编码 4 个或更多 1080p 流,实现显著性能。
  • 提供最佳质量,具有最先进的心理视觉优化。
  • 支持许多不同应用所需的功能,如电视广播、蓝光低延迟视频应用程序和 Web 视频。
  • x264 是许多网络视频服务的核心,如 Youtube、Facebook、Vimeo 和 Hulu。它被电视广播公司和 ISP 广泛使用。

简介

PES(Packetized elementary stream) 是 MPEG-2 Part 1, Systems(ISO/IEC 13818-1) 和 ITU-T H.222.0 中的规范,它们定义了 PS(MPEG program streams) 和 TS(MPEG transport streams) 中数据包中 ES(elementary stream)(通常是音频或视频编码器的输出)的携带。 通过将 PES 数据包头内 ES 的顺序数据字节封装组成 PES。

RTCP 协议

SR (Sender Report RTCP Packet)

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
header |V=2|P|    RC   |   PT=SR=200   |             length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         SSRC of sender                        |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
sender |              NTP timestamp, most significant word             |
info   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             NTP timestamp, least significant word             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         RTP timestamp                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                     sender's packet count                     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      sender's octet count                     |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_1 (SSRC of first source)                 |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1    | fraction lost |       cumulative number of packets lost       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           extended highest sequence number received           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      interarrival jitter                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         last SR (LSR)                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                   delay since last SR (DLSR)                  |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_2 (SSRC of second source)                |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  2    :                               ...                             :
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       |                  profile-specific extensions                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

MPEG2-PS 简介

PS 流(MPEG program stream)是用于多路复用数字音频、视频等的容器格式。PS 格式在 MPEG-1 Part 1 (ISO/IEC 11172-1) 和 MPEG-2 Part 1, Systems (ISO/IEC standard 13818-1/ITU-T H.222.0) 中指定。

RTP 协议

RTP Header

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

概述

协议简介

RTSP

RTSP(Real-Time Stream Protocol) 实时流传输协议是一种基于文本的应用层协议,常被用于 建立的控制媒体流的传输,该协议用于 C/S 模型, 是一个 基于文本 的协议, 用于在客户端和服务器端建立和协商实时流会话。

$ Astyle --style=ansi --indent=spaces=4 -L -xC100 -V -f -z2 -H -p -U --suffix=none --quiet
# --style=ansi
# --indent=spaces=4 更改缩进 4 个空格
# -L 缩进label,让 label 比当前的内容先前一个缩进距离,而不是通通靠左
# -xC100 最长80个字符
# -V 将tab转换为空格
# -f 在两行不相关的代码之间插入空行
# -H 在if for等关键字后面,加一个空格
# -p 在操作符两边加空格
# -U 去掉()内部不必要的空格
# --suffix=none 不备份原始文件

树莓派开不开机了,身边暂时没有显示器,所以打算直接重装系统吧…… 记录以下装系统过程,方便以后再发生如此问题(希望不会)

树莓派安装 Ubuntu 的作用:

  1. 作为流媒体服务器学习音视频传输技术
  2. 搭建 Web 服务器学习 Nginx 原理
  3. 学习 Linux 基本操作和 Shell 脚本
  4. 尝试简单的内核级开发

Linux I/O 模型

  • Blocking IO - 阻塞 IO
  • NoneBlocking IO - 非阻塞 IO
  • IO multiplexing - IO 多路复用
  • signal driven IO - 信号驱动 IO
  • asynchronous IO - 异步 IO

Select, Poll, Epoll 就是 IO multiplexing 的三种机制。

初识 libevent

libevent 概述

Libevent 有几个显著的亮点:

  • 事件驱动(event-driven),高性能;
  • 轻量级,专注于网络,不如 ACE 那么臃肿庞大;
  • 源代码相当精炼、易读;
  • 跨平台,支持 Windows、Linux、*BSD 和 Mac Os;
  • 支持多种 I/O 多路复用技术, epollpolldev/pollselectkqueue 等;
  • 支持 I/O,定时器和信号等事件;
  • 注册事件优先级;

Libevent 已经被广泛的应用,作为底层的网络库;比如 memcachedVomitNylonNetchat 等等。

应用1:寻找和为target的两个数

167. 两数之和 II - 输入有序数组

题目链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/

应用2:判断链表是否有环

142. 环形链表 II

题目链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/

287. 寻找重复数

题目链接:https://leetcode-cn.com/problems/find-the-duplicate-number/

应用3:荷兰国旗问题

75. 颜色分类

题目链接:https://leetcode-cn.com/problems/sort-colors/

应用4:三数之和

15. 三数之和

题目链接:https://leetcode-cn.com/problems/3sum/

16. 最接近的三数之和

题目链接:https://leetcode-cn.com/problems/3sum-closest/

滑动窗口

「滑动窗口」是一类使用「双指针」技巧,通过两个变量在数组上同向交替移动解决问题的算法。这一类问题的思考路径通常是:先思考暴力解法,分析暴力解法的缺点(一般而言暴力解法的缺点是重复计算),然后 结合问题的特点,使用「双指针」技巧对暴力解法进行剪枝。因此,思考算法设计的合理性是更关键的,这一点适用于所有算法问题。

  • 「力扣」第 1004 题:最大连续 1 的个数 III;
  • 「力扣」第 1208 题:尽可能使字符串相等;
  • 「力扣」第 1493 题:删掉一个元素以后全为 1 的最长子数组。
  • 「力扣」第 3 题:无重复字符的最长子串;
  • 「力扣」第 209 题:长度最小的子数组;
  • 「力扣」第 76 题:最小覆盖子串;
  • 「力扣」第 438 题:找到字符串中所有字母异位词;
  • 「力扣」第 567 题:字符串的排列。