设为首页 收藏本站
查看: 86|回复: 0

[经验分享] 【大厂C++面试突击手册】Day9:协议解析×编码优化×算法手...

[复制链接]
累计签到:50 天
连续签到:1 天
发表于 2025-3-14 13:34:21 | 显示全部楼层 |阅读模式
哔哩哔哩
RTSP、RTMP、HLS的区别

1. RTSP(Real Time Streaming Protocol):
    ○ 用途: 主要用于视频监控和视频会议系统。
    ○ 特点: 支持暂停、播放、快进等操作,实现了对流媒体的实时控制。
    ○ 延迟: 低至几百毫秒,适合实时交互。
○ RTMP(Real Time Messaging Protocol):
    ○ 用途: 初期主要用于Adobe Flash播放器,现在用于直播。
    ○ 特点: 在传输过程中可以加密,更加安全。
    ○ 延迟: 较低,适合直播。
○ HLS(HTTP Live Streaming):
    ○ 用途: 主要用于在线视频平台和OTT(Over The Top)流媒体。
    ○ 特点: 基于HTTP传输,易于跨平台,且便于跨防火墙和代理服务器传输。
    ○ 延迟: 较高,通常在几秒到十几秒,但最新的技术进展已能显著减低延迟。

视频编码
常见的视频编码标准包括H.264、H.265、VP9等。

影响编码效率的因素
1. 编码算法:不同编码标准如H.264、H.265的算法复杂性不同,影响效率。
2. 分辨率和帧率:高分辨率和高帧率视频需要更多的数据处理。
3. 码率:码率高时数据量大,编码负荷更重。
4. 内容复杂度:场景复杂多变的视频比静态或重复场景的视频编码难度大。
5. 颜色深度:颜色深度大的视频如10bit比8bit的视频编码更费时。
6. 并发编码算法:硬件加速和多线程技术可以提高编码效率。
7. 压缩方式:使用更高级的压缩技术(如CABAC)可以提升编码效率。

视频延迟来自于哪些方面
1. 采集延迟:摄像头和麦克风捕捉数据的时间。
2. 编码延迟:将原始视频和音频数据编码成数字流的处理时间。
3. 处理延迟:视频图像的预处理、滤镜应用等额外处理步骤。
4. 封装延迟:将编码后的数据打包成特定格式的时间。
5. 网络传输延迟:数据包通过网络从发送者到接收者的时间,包括传播、排队、处理和解包时间。
6. 缓冲延迟:为了平滑网络抖动,在客户端进行的数据缓冲。
7. 解码延迟:客户端将接收的数据流解码为可播放的视频和音频的时间。
8. 播放延迟:视频渲染和播放的等待时间。

开源流媒体服务器了解吗
1. SRS  - 简单高效的RTMP/HLS直播服务器。
2. Nginx-RTMP - 基于Nginx开发的RTMP流媒体服务器。
3. Red5 - 使用Java开发的流媒体服务器,支持多种流媒体协议。
4. MediaSoup - 针对WebRTC的高性能SFU服务器。
5. Janus - 实时通信服务器,支持WebRTC等多种协议。

编码的参数有哪些
1. 比特率(Bitrate):编码时的数据传输速率,直接影响视频和音频质量。
2. 帧率(Frame Rate):每秒显示的图片数,影响视频流畅度。
3. 分辨率(Resolution):视频的宽度和高度,影响视频清晰度。
4. 编码格式(Codec):影响文件兼容性,如H.264, H.265等。
5. GOP(Group of Pictures):影响I帧(关键帧)的频率,进而影响视频可寻址性和压缩效果。

I帧、P帧、B帧
I帧:关键帧,独立编码,不依赖其他帧。P帧:向前预测帧,依赖前面的I帧或P帧进行编码。B帧:双向预测帧,依赖前后帧进行编码,压缩率最高。

多态
C++的多态是通过指向基类的指针,来调用实际子类的方法,让不同的子类对象可以执行各自的操作。多态主要包括虚函数(动态多态)和函数重载(静态多态)两种形式。

手撕大小端转换
1. 掩码并取得各个字节。
2. 通过移位把字节放到相反位置。
3. 组合这些字节得到最终结果。

[C++] 纯文本查看 复制代码
uint32_t swapEndian(uint32_t value) {
    return ((value & 0x000000FF) << 24) |
           ((value & 0x0000FF00) << 8) |
           ((value & 0x00FF0000) >> 8) |
           ((value & 0xFF000000) >> 24);


手撕合并区间
1. 对区间按照起始位置进行排序。
2. 遍历排序后的区间列表,逐一判断当前区间是否可以与结果数组的最后一个区间合并:
    ○ 如果可以合并(当前区间的起始位置小于或等于结果数组最后一个区间的结束位置),则更新结果数组最后一个区间的结束位置为两个区间结束位置的较大值。
    ○ 如果不可以合并,直接将当前区间加入到结果数组中。
[C++] 纯文本查看 复制代码
#include <vector>
#include <algorithm>

std::vector<std::vector<int>> mergeIntervals(std::vector<std::vector<int>>& intervals) {
    if (intervals.empty()) return {};
    
    std::sort(intervals.begin(), intervals.end());  // 按区间起始位置排序
    std::vector<std::vector<int>> merged;
    
    for (const auto& interval : intervals) {
        // 如果结果数组为空,或当前区间与结果数组最后一个区间不重叠,直接添加
        if (merged.empty() || merged.back()[1] < interval[0]) {
            merged.push_back(interval);
        }
        // 否则,合并当前区间与结果数组最后一个区间
        else {
            merged.back()[1] = std::max(merged.back()[1], interval[1]);
        }
    }
    
    return merged;
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1005697-1-1.html 上篇帖子: 2025 年,C++ 还能“硬核”多久? 下篇帖子: 【大厂C++面试突击手册】Day10:ECS架构×内存管理×C++底层高...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表