结构体信息可以看这里 https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapfileheader 这里最容易出错的地方就是这里的 #pragma pack(push, 1) // 确保结构体对齐方式与 BMP 格式一致 #pragma pack(pop) 对这个的讲解我这里直接引用了AI的(讲的是真的好(〃` 3′〃)) #pragma pack(push, 1) 和 #pragma pack(pop) 的作用 这两个编译指令用来控制 结构体成员的对齐方式,特别是设置如何在内存中排列结构体的数据。
大体内容和https://stardm.ddns-ip.net/2024/12/01/③实现电脑音频和视频的录制并封装成mp4/ 这一篇的相同,这里主要展示改变有变动的部分 音频采集步骤 这里的序号与③实现电脑音频和视频的录制并封装成mp4这篇里的对应 打开AAC编码器 1open_encoder(&codec_ctx); 配置重采样上下文(主要就是多了这一步) 1init_resampler(codec_ctx, &swr_ctx, &src_data, &dst_data); 配置解码后数据的frame容器及音频帧 123456789101
在使用cloudflare时发现了SSL的证书安全问题,经过一段时间的折腾,证书安全问题倒是解决了。但是我发现cloudflare里SSL显示的有效证书与我网站的真实证书不一致,所以就找到了这个调用官方API的方法。但调用成功后,我发现网站的实际证书还是不一样(很可能是我一开始瞎搞弄成这样的/(ㄒoㄒ)/~~)。总之静观其变吧,看看它续签的时候会不会换回来…(ノへ ̄、) 错了错了,因为我的博客网站是部署在github上的,而github pages为自定义域名颁发的证书和cloudflare的证书有没有关系,这取决于cloudflare SSL/TLS的加密模式。 灵活就没有关系,同时证书使用
核心代码 找其中一个源文件的音频流 1234567891011121314151617for(int i = 0; i < ifmt1->nb_streams; i++){ AVStream *instream1 = ifmt1->streams[i]; AVStream *outstream = NULL; AVCodecParameters *inCodecPar1 = instream1->codecpar; if(inCodecPar1->codec_type == AVMEDIA_TYPE_AUDIO){
核心代码 起始读入位置偏移到与starttime位置最近的后一个帧 12345ret = av_seek_frame(pFmtCtx, -1, starttime * AV_TIME_BASE, AVSEEK_FLAG_BACKWARD);if(ret < 0){ av_log(oFmtCtx, AV_LOG_ERROR, "%s", av_err2str(ret)); goto __ERROR;} 申请存储起始读入帧的内存 12dts_start_time = av_calloc(pFmtCtx->nb_streams,
程序步骤 1. 处理参数 123456789101112131415161718char* src; //输入数据char* dst; //输出数据int *stream_map = NULL;AVFormatContext *pFmtCtx = NULL;AVFormatContext *oFmtCtx = NULL;AVPacket pkt;av_log_set_level(AV_LOG_DEBUG);if(argc < 3){ //argv[0] 就是这个extra_audio名字 av_log(NULL, AV_LOG_INFO, "argume
时间基与时间戳的基本概念 在 FFmpeg 中,时间基(time_base)是时间戳(timestamp)的单位,时间戳值乘以时间基,可以得到实际的时刻值(以秒等为单位)。 pts和dts 这里我将pts和dts简单的理解为pts是播放时间,dts是解码时间 视频帧的解码时间和播放时间可能不同,尤其是当视频帧包含B帧时。 对于I帧,解码时间和播放时间相同。而B帧和P帧的dts和pts就会不一样。 音频帧的解码时间和播放时间绝大多数的情况下是相同的,因为音频帧按顺序解码并播放。 视频流和音频流pts和dts的设置(基于裸流) 视频流 视频按帧播放,所以解码后的原始视频帧时间基为 1/帧率
从网上找到了一个教程,解决了一个烦人的问题 设置代理 12git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 取消和查看代理 取消代理 12git config --global --unset http.proxy git config --global --unset https.proxy 查看代理 123git config --global --get http.proxy git config --globa
实现了从一个 FLV 文件读取音视频数据,并通过 RTMP 协议进行推流。核心步骤包括: FLV 文件头解析 (openfile) 功能: 打开并读取 FLV 文件,跳过文件头(9 字节)。 步骤: 打开指定的 FLV 文件。 检查文件是否成功打开。如果打开失败,则返回 nullptr。 跳过文件头的 9 字节,定位到数据部分。 123456789static QFile *openfile(char *flv_name) { QFile *file = new QFile(flv_name); if(!file->open(QFile::ReadOn
头文件部分 内容比较少,我就全部放这了, 自己看吧~ 1234567891011121314151617181920212223242526272829303132333435#include "AudioRecorder.h"#include "videoRecorder.h"#include <QMainWindow>QT_BEGIN_NAMESPACEnamespace Ui {class MainWindow;}QT_END_NAMESPACEclass MainWindow : public QMainWind