自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 BPlay1.0系列(10:项目优化)

目前BPlay1.0的功能已经全部完成,但是在使用时还存在许多缺陷,后面会继续优化这些点,使体验更加舒适。

2022-10-23 21:18:54 427 1

原创 BPlay1.0系列(9:按钮联动和进度条)

目前BPlay1.0的主要功能(视频播放)已经基本实现,但是开启/暂停按钮和进度条还是无法控制视频的播放进度,本节将这两个功能收尾掉。

2022-10-16 22:18:30 170

原创 BPlay1.0系列(8:音视频同步)

实现了音频数据的播放,但是实际上拿媒体数据测试时会发现视频播放的速度要远快与音频播放速度,这样就导致视频播放完成之后音频还在播放,这就是视音频不同步现象。本文将修复这个Bug,让音视频数据播放同步起来。

2022-10-15 21:05:26 568

原创 BPlay1.0系列(7:音频播放)

已经完成了媒体文件的视频数据播放功能,但是播放时速度(帧率)无法控制并且是没有声音的,这就需要实现音频播放的功能来解决这两个问题。

2022-10-15 14:18:47 184

原创 BPlay1.0系列(6:视频播放)

前面我们已经完成了工程的构建、ffmpeg装载以及基本控件添加,现在就开始BPlay1.0核心部分的分析:视频播放。

2022-10-06 21:44:37 546

原创 BPlay1.0系列(5:自定义按钮控件)

开始/暂停按钮时每个视频播放器必备的部分,BPlay1.0也需要配备一个按钮来控制媒体文件的开/关,选择自定义一个PushButton来实现这个开关的功能,首先创建一个新的类继承于QPushButton,我将它命名为Bbutton:这个按钮首先想要具备的功能是:1、每次鼠标点击后,开关的状态需要改变,同时需要通知媒体做出相应的动作;2、媒体加载完、播放完等需要按钮改变状态时需要与其联动。

2022-10-06 20:41:05 157

原创 BPlay1.0系列(4:Bffmpeg单例模式设计+媒体流文件检测)

成功装载了ffmpeg库,接下来就是媒体文件的载入检测,但是在实际实现时发现:Bffmpeg加载媒体文件时,需要记录媒体文件相关信息:上下文、音视频索引等,这些需要定义成员变量保存在Bffmpeg类中,加载文件的方法如果定义成静态成员函数,那么将无法访问到保存的媒体信息变量,如果定义成普通成员函数,则需要实例化一个对象,但该对象在工程中只需要一个即可。基于以上考虑,最后选择采用单例模式来设计Bffmpeg。

2022-10-05 13:09:57 415

原创 BPlay1.0系列(3:QT下装载ffmpeg)

实现了从本地向BPlay1.0载入一个媒体文件,但是却无法解析该文件,本节将通过向QT载入ffmpeg解决这个问题。

2022-10-04 20:03:25 151

原创 BPlay1.0系列(2:Bwidget控件创建和打开媒体文件)

QFileDialog模态框反回后,便可获取到媒体文件路径,此时需要做判空和媒体文件有效性校验,上面代码已经进行了判空处理,媒体文件有效性判断想要装载ffmpeg库后才可以处理,ffmpeg库装载在本系列下一小节进行介绍!Bwidget具体的功能暂时可以先不实现,后续调试时按需添加即可!

2022-10-04 17:27:23 244

原创 BPlay1.0系列(1:方案设计+工程构建)

首先介绍一下BPlay1.0:BPlay1.0是一款基于ffmpeg和QT制作的本地视频播放器,1.0版本功能比较基础,旨在软件基本框架的设计以及音视频功能测试.

2022-10-04 16:41:47 142

原创 字符串解码

问题描述:给定一个经过编码的字符串,返回它解码后的字符串。编码字符串由 N[XXX] 这样的格式组成,N为一个十进制数字,XXX为字母和 N[XXX] 的组合, N[XXX] 表示 XXX 连续出现N次。例如:"3[z]2[2[y]pq4[2[jk]e1[f]]]ef"的解码结果为“zzzyypqjkjkefjkjkefjkjkefjkjkefyypqjkjkefjkjkefjkjkefjkjkefef”思路:整体想法是找寻 数字[纯字母] 这种形式,将其以完整的格式展开并且替代原编码格式,直到

2022-05-02 16:17:54 807

原创 sha256算法细节详解

sha256算法

2022-04-10 17:32:36 3829

原创 最短无序连续子数组

问题描述:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 :输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。思路:维护两个单调栈,一个是数组从左到右遍历的递增栈s(只有大于等于栈顶的数据才可以入栈),一个是数组从右往左遍历的递减栈s2(只有小于等于栈顶的数据才

2022-02-27 23:04:08 198

原创 任务调度器

问题描述给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。示例 1:输入:tasks = [“A”,“A”,“A”,“B”,“B

2022-02-20 22:29:05 128

原创 单调栈应用(每日温度)

问题描述:给定一个整数数组temperatures,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]思路分析:首先构造一个单调栈类型的容器,只允许往栈里面插入小于等于栈顶数据的元素,整个栈呈现一个"金字塔"形状,如下图就是一个单调栈:对于te

2022-02-19 22:58:27 361

原创 c++的引用

引用的概述:使用int& 给变量起别名int a = 10; //有一块4字节名称为a的内存空间存放10,通过对a赋值可以操控这块内存int &b = a; //给这块内存起别名b,通过对b赋值可以操控这块内存。&a和&b输出结果都是这块内存的地址注意:int a = 10;int c = 20;int &b; //引用必须要初始化,非法int &b1 = a;b1 = c; //赋值操作,而不是给c起别名引用做函数的参数:v

2021-12-26 22:04:48 223

原创 Z 字形变换

问题描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:原字符串根据规则得到Z字形变换结果之后,输出需要从左往右逐行读取,产生出一个新的字符串,根据上图,上述字符串 “PAYPALISHIRING” 的变换结果就是:“PAHNAPLSIIGYIR”。再如输入字符串为 “PAYPALISHIRING” 行数为4时,排列如下:上述字符串 “PAYPALISHIRING” 的变

2021-12-18 21:56:57 532

原创 Manacher算法

此篇文章给出了最长回文串的普通解法:https://blog.csdn.net/qq_45987579/article/details/121324132?spm=1001.2014.3001.5501但是这种解法计算每个遍历点时并没有充分利用之前遍历点计算出的结论,时间复杂度为O(n2),本文算法充分利用回文字符串的性质,降低算法时间复杂度,该算法就是马拉车算法。首先给出一段字符串分析:“abctftghjhgtftclu”,这个字符串首先可以拆分成3段:第一段:“ab”第二段:“ctftgh

2021-12-11 22:44:05 712

原创 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。类似这样的字符串属于回文字符串:“a”, “aa”, “aba”, “baab”。思路:遍历整个s,每个遍历处都进行向前向后查找,得到以该点为中心的最长回文字符串。实现:char * longestPalindrome(char * s){ int max = 1; int i = 0, j = 0, k1 = 0, k2 = 0; char *p = s; for(i = 0; i < strlen(s)

2021-11-14 21:44:24 177

原创 使用FFMPEG5.0和SDL2.0编写视频简单播放器

使用ffmpeg5.0和SDL1.2编写视频播放器daemon时,视频卡在第一帧会报错:测试例程如下:int B_Play_Openfile(const char* szFilePath){ int iRet = 0; int iVideo_index = 0; char szError[128] = {0}; unsigned char *out_buffer = NULL; AVFormatContext *FormatContext = avformat_alloc_context()

2021-10-06 22:55:38 810 2

原创 无重复字符的最长子串

问题描述:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。初步思路:类似这种数组类型的,想要查找某种条件下存在前后关联的问题,第一个想到的方法就是动态规划:要想获取结果子串,必须遍历整个字符串,假设在遍历到第n个节点之后,想要去比对该节点与其相邻目标子串比对字符:1、相邻目标子串存在n节点字符,想要根据目标子串改字符的位置,取改字符之后的字符串和n节点字符重新规划目标子串;2、相邻目标子串不存在n节点字符,将n节点加入子串即可;实现:int lengthOfLongestS

2021-10-04 10:53:15 69

原创 打家劫舍!

问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。初步思路:每一个数组的元素都会被遍历到才有可能得到最后的结果,每一个遍历节点都会有一个其对应的最大金额,由于小偷不能偷两隔壁的现金,所以对于每一户被偷的人家,他的隔壁的隔壁或者隔壁的隔壁的隔壁一定会被偷

2021-10-03 18:12:45 62

原创 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入的数组记录在int* nums里面,数组成员个数记录在int numsSize里面。循环numsSize次,每次去查找当前位置一直往前可以找到的最大连续子数组,最后会得到numsSize个最大值,再取其中最大值即可。采用动态规划实现:int maxSubArray(int* nums, int numsSize){ int i = 0; int MaxTemp = nums[0];

2021-09-04 21:26:45 54

原创 创建第一代属于自己的实时系统

基于STM32,CM3内核下,实现的简单RTOS。设定Prio_Max个有优先级,每个优先级下可挂载任意线程,同时还具备同优先级下基于Tick时基循环调度,阻塞延时,线程挂起等多种功能。OS消息通信及内存管理等进阶项目还在开发中,目前功能如下:OS内核实现(基于外部72M晶振,时基为10ms,若采用内部72M晶振,时基将变为1.1ms,相关设置可改动Task_Timer 的值来实现):#i...

2021-07-24 18:59:00 141

原创 这半年的目标:制作一个视频播放器

目标:暂定今年(2021)下半年,在Linux下完成一个视频播放器的制作,OS平台使用Ubuntu16.04_x64,音视频处理平台采用FFMPEG,GUI界面采用QT,开发进度和学习历程会通过博客来记录。由于现在已经进入企业工作了(目前处在软件开发岗),整体制作进度可能没办法像学校里一样花大笔投入,但是至少保证每周一天+的投入量。环境搭建:1、首先从FFMPEG官网:http://www.ffmpeg.org/download.html下载FFMPEG源码,我是直接下载了当天的每日编译,读者也可以根

2021-07-18 21:01:11 244 1

原创 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。typedef int type; //定义队列数据类型struct QueueNode{ int data; struct QueueNode *next;};// end(移除端) ---> Node -next> Node -next> Node <--- first(插入端)struct

2020-07-04 14:10:22 100

原创 Linux下多线程打印奇数偶数

练习Linux多线程环境下的第一个例程:存在三个不同的线程:线程1只输出----------。线程2只输出偶数。线程3只输出奇数。结果输出:-----------0-----------1-----------2-----------3一直到:-----------999-----------1000定义结构体:struct oddevenzero_tstruct oddevenzero_t 8 { 9 pthread_mutex_t m

2020-06-09 22:04:05 836

原创 c语言函数调用原理

c语言函数被调用时,寄存器和内存都干了啥,你知道吗?本人不想设置超复杂的代码故弄玄虚,以这段小学生代码为例,足以说明问题,学习就是要从最基础的开始研究,一开始就上一段OS底层代码,呵呵,怕是没多少初学者愿意继续啃下去。。。。。。源代码:#include “stdio.h”unsigned char test1(unsigned char a);int main(){unsigned ...

2020-02-10 20:20:46 293

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除