ffmpeg
文章平均质量分 56
原总破局
刻意训练,积极反馈。
展开
-
AVFilterLink的channels设置
我们通过上面代码可以知道link的channel来自于link->incfg.channel_layouts->channel_layouts[0]的转化。我们知道link的输入是link->src对应filter,那么这个配置也应该是src对应的filter进行配置。将相应的占位符进行替换后会发现channel_layouts取的是OutputFilter的是channel_layout字段。现在的问题就成了ost->enc_ctx->channels怎么来的?我们将相应占位符带入后发现其实找的是。原创 2024-05-09 09:44:35 · 245 阅读 · 0 评论 -
音频相关问题
音频、pcm、ffmpeg原创 2022-08-26 23:49:39 · 727 阅读 · 0 评论 -
ANativeWindow
Surfaceview中的surface是用来渲染视频的,而编解码一般都是用C或C++来实现的。那么Native就要能够操作SurfaceView中的surface。而ANativeWindow正是android为我们提供的Surface。先上流程图ANativeWindow_fromSurface /** * Return the ANativeWindow associated with a Java Surface object, * for interacting wi.原创 2021-07-15 11:35:07 · 2189 阅读 · 0 评论 -
Android 录制音视频
打开cameraprivate void openCamera(int position) {if (mCamera == null) {mCamera = Camera.open(position);int degree = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 0 : 90;mCamera.setDisplayOrientation(degre...原创 2021-06-15 22:53:22 · 661 阅读 · 4 评论 -
Android 采集音频与音频解码
使用AudioRecord采集音频pcm数据,使用MediaCodec转化为aac数据package com.yuanxuzhen.yuanrecord;import android.content.Context;import android.media.AudioFormat;import android.media.AudioRecord;import android.media.MediaRecorder;import java.io.File;import java.io.F原创 2021-06-10 21:34:40 · 847 阅读 · 2 评论 -
Filter7--------filter相关的结构体
重要的结构体AVFilter AVFilterPad AVFilter的端口,每个AVFilter有输入也有输出 AVFilterLink AVFilterFormats AVFilterFormatsAVFiltername filter的名字,比如drawboxdescription 当前filter用来做什么?const AVFilterPad *inputs; 输入引脚const AVFilterPad *outputs; 输出引脚 描述的是自身这里和我们前...原创 2021-06-04 17:38:40 · 235 阅读 · 0 评论 -
Filter6----如何自定义一个filter
我们今天来看看如何新建一个filter然后可以让ffmpeg使用。如何实现一个filter?找一个现成filter作为模板 替换代码中所有的filter name 关键字 修改libavfilter 中的Makefile,增加新的filter 修改allfilters.c,增加新的filter,并重新编译ffmpeg我们进入libavfilter目录复制一份drawbox滤镜文件cp vf_drawbox.c vf_yuan.c我们打开vf_yuan.c 我们发...原创 2021-06-04 16:18:03 · 518 阅读 · 0 评论 -
ffmpeg的安装
首选我们要去github上下载一个正式版本https://github.com/FFmpeg/FFmpeg原创 2021-06-04 16:00:56 · 436 阅读 · 0 评论 -
Filter5----使用 filter
使用filter的步骤获得解码后的原始数据 YUV/PCM 将数据添加到buffer filter 从buffer sink中取处理好的数据 当所有数据处理完后,释放资源原创 2021-06-03 11:48:47 · 281 阅读 · 1 评论 -
Filter4----初始化 filter
1、创建graphavfilter_graph_alloc相当于一张图,filter的各种操作就按照这张图2、创建buffer filter 和buffersink filterbuffer filter 解码后的数据放在buffer filterbuffersink filter filter处理后的数据放在buffersink filter3、分析filter描述符,并构建AVFilterGraph4、使构建好的AVFilterGraph生效...原创 2021-06-02 17:52:04 · 583 阅读 · 0 评论 -
Filter3 -------命令与参数查找
ffmpeg-filters 查看可用的filters 我们结合linux的grep和more命令进行查看例子ffmpeg -filters | grep drawbox我们了解到 drawbox 用来在输入视频上画一个颜色框查询特定filter的参数ffmpeg -h filter=xxxxx例子ffmpeg -h filter=drawbox我们可以看到drawbox有x,y,width,height等参数drawbox的使用ffpla...原创 2021-06-02 17:04:17 · 185 阅读 · 0 评论 -
Filter2------原理
filter的处理过程如下通过API方式使用Fliter两个特殊的filterbuffer filter 解码后的数据都要塞进buffer filter buffershink filter filter处理后的数据放置的位置...原创 2021-06-01 16:20:42 · 200 阅读 · 0 评论 -
Filter1------基础知识
可以用来干什么?音视频倍速播放 视频添加与删除水印 视频画中画 ...Filter的基本原理命令行使用FilterAPI使用Filter原理将压缩后的每一帧数据进行解码 对解码后的数据进行运算 最后再将处理好的数据进行压缩添加水印的原理图片B上添加水印图片A。只需要在图片B的右上角区域置换成图片A的数据。Fillter的类型简单滤镜复杂滤镜滤镜的级联简单滤镜复杂滤镜滤镜级联...原创 2021-06-01 14:08:53 · 201 阅读 · 0 评论 -
android ffmpeg opengl播放器渲染
opengl真是博大精深,现在只是网上扒拉了一顿代码实现了视频的渲染,就暂时做下记录吧。https://www.jianshu.com/p/ec8af2c459c6这篇文章写的很好,感谢原创 2021-06-01 12:00:47 · 362 阅读 · 0 评论 -
android studio 使用ffmpeg库
我们通过https://blog.csdn.net/qq_15255121/article/details/117414931?spm=1001.2014.3001.5501这一节已经生成了android要使用的ffmpeg库。接下来我们看如何使用?我们按照https://blog.csdn.net/qq_15255121/article/details/115244956中的步骤创建native工程。https://blog.csdn.net/qq_15255121/article/detai原创 2021-05-31 19:48:50 · 873 阅读 · 0 评论 -
编译android的ffmpeg库
我们要让android或者ios使用ffmpeg,那么我们就要编译出来android使用的ffmpeg库。下面我们以mac编译android使用的ffmpeg库。1、下载ndk https://developer.android.google.cn/ndk/downloads/ 我们下载r21版本2、生成交叉编译工具链 (生成mac下可以用来编译android库的工具)我们先解压下ndk r21在ndk的根目录下/build/tools/make-standalone-toolchain原创 2021-05-31 13:57:06 · 507 阅读 · 0 评论 -
ffmpeg sdl 播放器实现(音视频同步实现)
这篇文章要结合https://blog.csdn.net/qq_15255121/article/details/117327999?spm=1001.2014.3001.5501来看原创 2021-05-28 15:57:33 · 598 阅读 · 1 评论 -
ffmpeg sdl 播放器实现(非同步2)
前面的文章虽然实现了播放器,但是架构是混乱的,这一篇我们做一个结构清晰的播放器。播放器架构图解复用、视频解码、音频解码都是很耗时的所以我们都要新建线程来完成。由于音频的播放是由音频设备来来拉取的,所以音频的线程不需要创建。解复用后的数据要放在队列中,所以我们新建了一个队列,用来存放解复用后的AVPacket,音频放在音频队列,视频放在视频队列。由于解复用、视频解码、音频解码在不同的线程。所以对队列的操作也是多线程对于数据的操作,要用到SDL锁。typedef stru.原创 2021-05-27 14:42:55 · 269 阅读 · 0 评论 -
SDL 线程 锁 信号量
我们开发android的时候知道,主线程不能执行耗时的操作,否者的话就会导致ANR错误。SDL的开发也同样不能在主线程执行耗时操作,或者就会导致播放器接收不到我们的输入操作。SDL创建线程的函数如下:SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data);fn 要执行的函数name 线程的名字data 执行函数的参数 可以是任何类型的指针。线程的互斥与同步互斥:资源某一时刻只能有一..原创 2021-05-27 12:06:28 · 333 阅读 · 0 评论 -
多媒体播放器---非同步 ffmpeg sdl
本节是https://blog.csdn.net/qq_15255121/article/details/117115391?spm=1001.2014.3001.5501https://blog.csdn.net/qq_15255121/article/details/117000908?spm=1001.2014.3001.5501https://blog.csdn.net/qq_15255121/article/details/116805910?spm=1001.2014.3001.55原创 2021-05-21 15:50:55 · 113 阅读 · 0 评论 -
播放多媒体文件中的音频流
用到的知识https://blog.csdn.net/qq_15255121/article/details/115168456https://blog.csdn.net/qq_15255121/article/details/116948495?spm=1001.2014.3001.5501https://blog.csdn.net/qq_15255121/article/details/116136754?spm=1001.2014.3001.5501原理就是从多媒体文件中通过av_re原创 2021-05-21 12:35:14 · 281 阅读 · 0 评论 -
播放多媒体文件1------只播放图像
我们今天实现一个能够播放视频的播放器。播放的是多媒体文件 比如 flv mp4 m3u8等。、要用到的只是是https://blog.csdn.net/qq_15255121/article/details/116805910?spm=1001.2014.3001.5501 YUV播放器https://blog.csdn.net/qq_15255121/article/details/116795766?spm=1001.2014.3001.5501 SDL 纹理https://...原创 2021-05-18 21:09:21 · 100 阅读 · 0 评论 -
pcm播放器---SDL
https://blog.csdn.net/qq_15255121/article/details/115168456声音三要素:采样率 采样大小 声道数播放声音,不是我们推送,而是设备找我们拉取数据。 数据的多少是由声卡的音频参数决定的SDL音频的APIextern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired,SDL_AudioSpec * obtained);extern DECLSPEC voi.原创 2021-05-17 20:56:45 · 485 阅读 · 0 评论 -
YUV播放器
我们先回顾下YUV格式,可以通过下面的链接了解YUV的基础知识https://blog.csdn.net/qq_15255121/article/details/115469018我们先用ffmpeg的命令提取一段yuv数据。提取YUV数据ffmpeg-iinput.mp4-an-c:vrawvideo-pixel_formatyuv420pout.yuv·-c:vrawvideo指定将视频转成原始数据·-pixel_formatyuv420p指定转...原创 2021-05-14 21:02:58 · 1304 阅读 · 0 评论 -
ffmpeg SDL之纹理
纹理渲染什么是纹理?比如一条渐变颜色的线,如果用RGB描述,需要一个一个点的去描述非常麻烦和耗内存。而用纹理只需要描述一个起始点、一个终点、渐变的方法告诉GPU即可渲染。纹理特点:内存小GPU处理RGB特点内存大CPU计算后交给GPUSDL渲染的基本原理SDL_WINDOWSDL_RenderSDL_TexttureSDL_Surface区别?SDL_WINDOW 逻辑上窗口的概念SDL_Render 渲染器SDL_Texttu...原创 2021-05-14 16:24:46 · 293 阅读 · 2 评论 -
ffmpeg SDL基础
SDL(simple DirectMedia Layer)作用我们可以理解为用来创建窗口渲染视频。SDL是由C语言实现的跨平台的媒体开源库SDL用于开发游戏、模拟器、媒体播放器等多媒体领域编译与安装我们下载源码 网址http://www.libsdl.org/编译生成Makefile: configure --prefix=/usr/local安装 sudo make && make install使用SDL的步骤第一步 SDL初始化...原创 2021-05-12 20:41:42 · 215 阅读 · 0 评论 -
ffmpeg 从视频中提取图像
原理就是,提取出视频流,然后进行解码,将解码后的数据转化为bitmap进行保存。如何解码可以查看https://blog.csdn.net/qq_15255121/article/details/116330738下面是完整的代码#include <stdio.h>#include <stdlib.h>#include <libavformat/avformat.h>#include <libavcodec/avcodec.h>#incl原创 2021-05-12 13:46:06 · 648 阅读 · 0 评论 -
ffmpeg 为视频添加背景音乐---单音频轨道stream
我们知道多媒体文件是由多个stream组成,每个stream对应不同的内容。比如视频,音频,字幕。如果要用A视频的图像,B视频的音乐,生成C视频。原理就是提取出A视频的视频流数据,B视频的的音频流数据,写入C视频的视频流和音频流中。流程图如下#include <stdlib.h>#include <libavutil/log.h>#include <libavutil/timestamp.h>#include <libavformat/avf原创 2021-05-11 20:51:29 · 1666 阅读 · 4 评论 -
从多媒体文件中裁剪一段视频
使用到的重要apiint av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,int flags);下面是流程图下面是源代码#include <stdlib.h>#include <libavutil/log.h>#include <libavutil/timestamp.h>#include <libavformat/avformat.h>原创 2021-05-07 21:43:59 · 156 阅读 · 0 评论 -
mp4转化为flv
多媒体文件是一个容器,里面有视频流、音频流、字幕流。大体逻辑就是找出我们需要的流,然后根据指定容器的时间戳转化pts,dts,duraction等。下面是流程图接下来我们一步一步解析:第一步 打开输入文件,获取文件上下文if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {fprintf(stderr, "Could not open input file '%s'", in_...原创 2021-05-06 21:20:56 · 461 阅读 · 0 评论 -
h264转yuv
h264解码成yuv与aac解码成pcm原理是一样的。下面是流程图aac转pcm h264转yuv 从流程图看,步骤是完全一样的。下面我们上完整的代码#include <stdio.h>#include <...原创 2021-05-01 15:49:53 · 1532 阅读 · 4 评论 -
yuv转h264
转码步骤和pcm转aac是一致的 我把两张图放这里进行对比pcm转aac yuv转h264所以我们只要掌握了一种编码,其他就照猫画虎。下面是完整的代码#include "libavutil/avutil.h"#include "libavutil/imgutils.h"#include "libavformat...原创 2021-04-30 18:07:55 · 1013 阅读 · 1 评论 -
ffmpeg 提取h264文件
从多媒体文件中提取数据,第一步我们就是打开输入文件,获取AVFormatContext.if((err_code = avformat_open_input(&fmt_ctx, src_filename, NULL, NULL)) < 0){ av_strerror(err_code, errors, 1024); av_log(NULL, AV_LOG_DEBUG, "Could not open source file: %s, %d(%s)\n",原创 2021-04-29 21:46:59 · 1623 阅读 · 0 评论 -
ffmpeg aac转pcm
我们首先明确一点aac是编码后的数据,pcm是原始数据。所以我们也就是要对aac进行解码操作。我们先上解码的流程图,然后一步一步进行解析。 第一步创建输入文件AVFormatContext fmt_ctx = avformat_alloc_con...原创 2021-04-25 21:03:37 · 2198 阅读 · 1 评论 -
ffmpeg pcm转化为aac
我们先看一张pcm转化为aac的流程图 我们根据流程图第一步获取AVOutputFormatff_const59 AVOutputFormat *av_guess_format(const char *short_name,const char *filename,const char *...原创 2021-04-24 23:27:36 · 1311 阅读 · 1 评论 -
ffmpeg提取音频数据
学习就是要学习基础,学习原理。所以大家想学习下面的内容,最好看下下面几篇我写的文章,然后再看下面的内容就会so easy.https://blog.csdn.net/qq_15255121/article/details/115168456https://blog.csdn.net/qq_15255121/article/details/115301516https://blog.csdn.net/qq_15255121/article/details/115348454抽取音频数据原创 2021-04-22 20:36:12 · 1010 阅读 · 0 评论 -
ffmpeg 基本概念
多媒体文件其实是个容器(比如mp4是个包装盒,里面可以放mp3/aac, h264视频数据) 在容器里有很多流(Stream/Track) 每种流是由不同的编码器编码的 从流中读取的是包,在一个包中包含着一个或多个帧常用结构体AVFormatContext 格式上下文AVStream 流AVPacket打印音视频信息avformat_open_input/avformat_close_input av_find_input_format av_dump_...原创 2021-04-22 15:40:58 · 303 阅读 · 0 评论 -
ffmpeg文件与目录操作
ffmpeg文件操作文件操作所在的头文件libavformat/avformat.h文件的删除与重命名avpriv_io_delete() avpriv_io_move() 重命名和移动目录我们看下使用#include<libavformat/avformat.h>#include<libavutil/log.h>#include<stdio.h>void deleteFile(){ char* filename = "./te原创 2021-04-22 13:58:20 · 725 阅读 · 0 评论 -
ffmpeg日志系统
FFmpeg 日志的使用及目录的操作介绍FFmpeg的基本概念以及常用结构体对复用和解复用及流的操作的各种实战ffmpeg代码结构libavcodec 编解码器的实现libavformat 多媒体容器的操作,流的操作, IO的访问libavutil . 工具函数libavfilter 各种音视频过滤器libavdevice 设备接口libswresample 音频操作的接口libswscale 视频操作的接口av_log_set_level 设置日志级别..原创 2021-04-21 21:00:17 · 215 阅读 · 0 评论