- 博客(54)
- 收藏
- 关注
原创 【音视频开发】变速与硬解码
作者在开发过程中需要进行对视频进行变速不变调的开发,于是使用sonic库来实现对应的功能。sonic库github地址:https://github.com/waywardgeek/sonic其中 sonicWriteShortToStream(is->sncStream, (short*)is->audio_buf, actual_out_samples);sonicWriteShortToStream函数需要传入short*参数 因此对其大小要重新进行计算。
2025-01-21 18:05:15
313
原创 SRS流媒体服务器安装与推拉流测试
当我们推流 SRS服务器也可以收到对应flv文件的格式信息。这里使用ffmpeg进行演示(当然OBS更好)检测当前环境是否满足。
2024-07-01 18:37:27
675
原创 vscode远程连接Ubantu
安装后,打开Linux查看IP地址在VScode 中新建连接主机输入linux_name@ip地址 -A然后输入Linux的登录密码 就可以远程操控 Linux了可以在终端中远程控制Linux点击左上角的打开文件夹可以很方便的打开Linux的各种文件夹。需要注意的是在VScode远程控制Linux的情况下 安装的插件会安装到Linux中。
2024-06-27 15:22:25
423
原创 音视频开发遇到的部分问题(个人向)
往往是转化时视频源帧出现的问题,如果通过普通的拷贝可能拷贝不完整导致出现问题。获取帧后 通过API 将解码的帧全部拷贝到vp中。
2024-05-21 22:51:41
426
原创 【算法题】:回文(双指针)、判断子序列(双指针)、二叉树最大深度(递归)
【代码】【算法题】:回文(双指针)、判断子序列(双指针)、二叉树最大深度(递归)
2024-03-27 22:42:02
158
原创 【C++重新认知】:泛型编程(模板编程)
当我们设计函数或者类时,有时候需要对应不同数据类型编写相同的代码,这样的话不仅有代码冗余,而且更加的加大程序员开发事件,降低开发效率,因此泛型编程就是解决此类情况----不同的数据类型可以重用一个函数,或者可以创建不同数据类型的相同类。
2024-03-26 20:05:30
460
原创 【音视频开发】 : SDP协议
SDP(Session Description Protocol)是一种描述会话(Session)的应用层控制协议,用于在多媒体通信中传递会话相关的信息。它被广泛应用于实时流媒体、视频会议、互联网电话等领域。
2024-03-09 20:43:41
569
原创 [计算机网络]:流量控制
一条TCP连接的每一侧主机都为其设置了接收缓存,当TCP成功连接后,它发送的数据会放入接受缓存中。相关联的进程会从缓存中读取数据。但是存在一个问题,当某应用程序读取数据速率太慢,而发送数据一方不停的发送数据,会导致缓存区溢出,为了解决这类情况出现了流浪控制。:UDP并不提供流量控制,报文段由于缓存溢出后可能会在接收方丢失掉。
2024-03-04 17:37:51
741
原创 Socket编程
套接字(socket)是Linux下的一种进程间通信的机制。这个机制不仅可以在不同主机之间实现网络通信,也可以在同一台主机上的不同应用程序完成通信。socket通常使用客户端服务端这种模式完成通信。多个客户端可以同时连接到同一个服务器,由服务器完成数据处理,再将结果返回给客户端。socket是应用层与TCP/IP协议通信间的中间软件抽象层,它是一组接口。
2024-03-03 15:02:36
1767
原创 操作系统:了解操作系统(编译、操作系统管理、进程、线程)
只是一个shell进程和一个hello进程,当shell程序需要执行hello进程时,shell保存上下文,然后创建一个hello进程和它的上下文,等hello进程完成后,恢复shell进程的上下文。线程其实就是将一个非常庞大的程序分为很多细小的模块,每一个线程分别负责一块模块,这样不仅能更好的发挥计算机性能,也解决了很多开发遇到的问题。当浏览器在运行时,操作系统会给一种假象,即好像系统上只有浏览器这个程序在运行,程序看上去时在独立地占用处理器,主存和I/O设备。2、操作系统的抽象表示。
2024-02-27 17:35:02
700
原创 C++重新认知:智能指针
0/# 一、为什么要有智能指针内存泄露是我们开发大型项目时最为头疼的问题,当我们将对象建立在堆上时,因为需要我们自己手动释放,因此避免不了忘记删除,或者删除时没有考虑清楚情况的问题,从而造成悬挂指针或者是野指针的问题。
2024-02-17 14:22:27
922
原创 Qt:槽函数的五种写法
因为是以宏定义的方式展开,所以如果SIGNAL写错,或者信号名字、槽函数写错、编译器是无法检验出来的,导致出现隐性BUG,不容易发觉修改错误。
2024-02-14 14:43:21
1263
原创 QT:实现图片选择器
可以快速获取到项目目录位置。:编写config文件,记录上次打开图片的位置,下次打开图片会从上次的位置查找图片。:用于图片的缩放,防止图片过小,显示区域不能完全覆盖。
2024-02-13 21:19:40
1689
原创 [leetcode]买卖股票的最佳时机 (动态规划)
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。
2024-02-13 14:30:58
497
原创 Qt:Qt3个窗口类的区别、VS与QT项目转换
包含菜单栏、工具栏、状态栏:普通的一个窗口,什么也不包括:对话框,常用来做登录窗口、弹出窗口(例如设置页面)QDialog实现简易登录界面(部分代码)
2024-02-12 20:34:55
960
原创 [leetcode经典算法题]删除有序数组中的重复项(双指针)
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4]输出:2, nums = [1,2,_]输入:nums = [1,1,2]
2024-02-11 20:16:25
575
原创 C++多线程学习[六]: 多线程之间的同步
一、同步问题实际开发场景中有很多需要同步的情况,例如,音频和视频的同步输出、或者通讯能够第一时间同步接受处理…二、多线程同步demo可以看到cond可以阻塞等待(wait)可以通知一个线程(notify_one)也可以通知所有的线程(notify_all)等等 这里采用的通知一个线程即notify_one。#include<iostream>#include<thread>#include<mutex>#include<list>#incl
2024-02-05 18:06:03
531
原创 C++多线程学习[五]:RAII锁
使用局部对象来控制资源的技术,即它的生命周期由操作系统来管理,无需人工的介入。为什么要采用RAII技术呢?主要是在开发过程中资源的销毁容易忘记,容易造成死锁或内存泄露。
2024-02-05 16:10:24
712
原创 音视频基础知识
我们日常所见的不发光物体,它们都是靠反光才能让我们眼镜观察到,白色的不发光物体可以反射一切光,黑色则吸收一切光,因此不发光物体是由组成它材料的吸光性来决定的,但是。
2024-01-19 18:26:42
411
原创 C++多线程学习[四]:多线程的通信和同步、互斥锁、超时锁、共享锁
*如果当前互斥锁已被其他线程占用,则 lock 函数将阻塞当前线程,直到互斥锁可用为止。假设有6个线程同时要访问同一片区域数据,有5个线程要读数据,而有一个线程要写数据,那么共享锁可以让读线程的5个线程同时进行读,然后阻塞写数据的线程。可以看到在这段代码中,本来1号线程运行完,执行unlock()后,应该其他阻塞的线程应该进入代码内,但是发现进入的依旧是1号ID的线程。超时锁可以让阻塞的线程不断尝试进入,如果超过等待时间,就会执行日志结果,可以帮助我们更好的检查线程状态,检查是否超时或者是否存在死锁。
2024-01-15 16:00:10
2420
1
原创 C++多线程学习[二]:线程的传参以及传参的一些坑
首先我们知道,{}里面的变量会存在栈中,在大括号结束后,栈中的变量会销毁掉,那么线程传参的变量按理说应该找不到才是,然而答案是依旧能正常输出结果。在thread源码中,线程会单独将传入的参数拷贝一份,拷贝到列表中,再将列表中的值传入到线程句柄中。
2024-01-12 22:01:32
580
原创 C++重新认知:拷贝构造函数
对于简单变量来说,可以轻松完成拷贝。但是对于复杂的类对象来说,不仅存在变量成员,也存在各种函数等。因此相同类型的类对象是通过拷贝构造函数来完成复制过程的。可以看到成功拷贝了我们自己设计的String类(),当然这段代码是存在问题的我们可以看到两块指向m_buffer内存地址相同,所以会出现多次析构的情况(即a对象析构完了,将m_buffer释放掉后,因为b对象指向的也是m_buffer区域又要释放一次已经释放掉的),这也是浅拷贝,下面会详细讲解浅拷贝和深拷贝。
2024-01-12 17:05:29
713
原创 STL源码阅读总结从小白到大神:vector
使用vector应包括头文件,但是SGI将vector的实现代码写在了更底层的<stl_vector.h>
2024-01-11 18:12:22
642
原创 STL源码阅读总结从小白到大神:目录
长久以来,程序员们希望创造出一个可重复运用的东西,让程序员们的心血不随时间流逝被“遗忘掉”,为了建立数据结构与算法的统一标准并降低彼此结构的耦合性于是C++社区诞生了伟大的作品 STL。
2024-01-09 22:10:31
489
原创 STL源码阅读总结从小白到大神:配置器
当客端调用64bytes区块时,如果free_list[7]为空,内存池有20个32bytes的区块/10也就是10个64bytes的区块,其中一个交给客端,剩下9个留给free_list[7]维护,这时内存池又空了…oom_malloc()和oom_realloc()都有内循环,不断调用“内存不足处理历程”,但是如果“内存不足处理历程”并未被客端设定,这两个函数就会调用_THROW_BAD_ALLOC丢出bad_alloc异常信息,或利用exit(1)终止程序。
2024-01-09 22:06:53
1376
1
原创 C++重新认知:头文件的预处理
预处理的功能是对一个资源进行替换。常见的预处理指令:#define 宏定义#undef 取消宏#include 文本包含#ifdef 如果宏被定义就进行编译#ifndef 如果宏未被定义就进行编译#endif 结束编译块的控制#if 表达式非零就对代码进行编译#else 作为其他预处理的剩余选项进行编译#elif
2024-01-07 16:04:39
940
1
原创 【ffmpeg学习(四)】(代码实现) 实现音频数据解码并且用SDL播放
音频的播放比视频输出的要麻烦点啊,主要是优快云大多数都是落后的,要么是到处复制粘贴的,我在实现过程中学了很久啊,大多数优快云文章都是使用旧的API 已经被否决了,于是我读一些官方文档,和一些开源项目音视频的输出过程,才把这块弄懂,但是代码中仍然有问题比如会有刺啦刺啦声音(我猜测应该是PCM数据没有无缝连接上导致的)如果有音视频大佬看到这篇文章,希望大佬们在评论区提出宝贵意见。作者也放寒假了,在家无聊,可能会考虑直播敲个播放器吧,maybe?感觉这个专栏没多少人看呃,哎~
2024-01-06 23:00:51
1485
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人