音视频开发
文章平均质量分 82
徐福记456
生命不息,奋斗不止,热爱音视频,努力维护开源社区,记录自己成长之路。
展开
-
Android端极致画质体验之HDR播放
高动态范围HDR视频通过扩大亮度分量的动态范围(从100cd/m2到1000cd/m2),以及采用更宽的色彩空间BT2020,提供极致画质体验。从Android10开始,支持HDR视频播放。原创 2023-11-29 21:40:54 · 3143 阅读 · 0 评论 -
H.266/VVC视频编码原理探索
在2020年7月,H.266/VVC的标准规范正式面世。据统计,VVC的编码压缩率比HEVC提升一倍,支持RPR参考帧重采样、SCC屏幕内容编码等新技术。这意味着在5G时代,VVC视频编码让4K、8K超高清视频成为可能。原创 2023-07-03 12:07:36 · 1526 阅读 · 0 评论 -
安全可靠的SRT实时传输协议
Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密,运用FEC进行前向纠错,并且有流量控制、拥塞控制。类似于QUIC协议,SRT采用UDP代替TCP,在应用层提供发送确认机制、ARQ自动重传,减少端到端的延迟。原创 2022-12-04 17:02:44 · 3866 阅读 · 0 评论 -
Miracast投屏协议深入剖析
Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。原创 2022-10-06 16:11:59 · 8024 阅读 · 2 评论 -
走进音视频的世界——Opus编解码协议
Opus是一种开源免费的音频编解码器,支持音乐和语音,具有低延时、带内FEC、DTX、PLC等特点,默认22.5ms延时,非常适用网络实时传输。官网:https://www.opus-codec.org。Opus协议收录于RFC6716,使用SILK和CELT两种编码。原创 2022-09-01 21:45:38 · 4922 阅读 · 0 评论 -
走进音视频的世界——RGB与YUV格式
在图像的世界里,一般使用RGB作为存储格式。而在视频的世界里,一般使用YUV作为压缩存储格式。有时候面试官会问:为什么视频使用YUV来压缩存储,而不用RGB?YUV与RGB有什么区别,两者如何转换的?常见的RGB格式有哪些,常见的YUV格式又有哪些?手机摄像头的预览格式是什么,如何转换为YUV420P的?我们带着这些问题,来揭开RGB与YUV格式的面纱。............原创 2022-08-07 22:33:36 · 5688 阅读 · 1 评论 -
走进音视频的世界——mp3封装格式
MP3,全称是MPEG Audio Layer3,利用人耳对高频声音信号不敏感的特性,结合心理声学模型,把时域信号转换为频域信号,并划分多个频段,对不同频段使用不同压缩率进行压缩。整体压缩率达到1:10,甚至1:12。...原创 2022-07-28 21:24:02 · 1532 阅读 · 0 评论 -
走进音视频的世界——FLV视频封装格式
FLV全称为Flash Video,是一种流媒体视频格式。特点是体积小、封装简单、方便存储与传输。常见的http-flv推流直播就是使用flv格式,rtmp推流也默认支持flv格式。FLV和RTMP都是adobe公司开发的。原创 2022-07-25 21:57:12 · 739 阅读 · 0 评论 -
Android音视频全面介绍与代码实践之CameraX(三)
Android在应用层提供丰富的音视频多媒体接口,本文主要介绍CameraX,背景是在Camera2基础上,提供Lifecycler生命周期管理,提供更加简洁易用接口,包括摄像头预览、拍照、录像、图片分析,另外支持扩展接口:自动切换弱光模式、焦外成像、HDR拍摄等。原创 2022-04-02 15:32:45 · 22112 阅读 · 4 评论 -
Android音视频全面介绍与代码实践(二)
Android在应用层提供丰富的音视频多媒体接口,第一篇文章已经探讨:MediaPlayer、MediaCodec、AudioTrack、MediaMuxer、MediaExtractor。本文主要介绍MediaRecorder、MediaMetadataRetriever、AudioRecord、AudioManager,并且结合代码实例,希望能让大家对Android多媒体有深刻认识。...原创 2022-03-29 21:04:01 · 7230 阅读 · 0 评论 -
Android音视频全面介绍与代码实践(一)
Android在应用层提供丰富的音视频多媒体接口,包括MediaPlayer、MediaCodec、AudioTrack、MediaMuxer、MediaExtractor、MediaRecorder、MediaMetadataRetriever、AudioRecord、AudioManager、Camera/Camera2/CameraX等。本文对咱们常用的多媒体API进行介绍,并且结合代码实例,希望能让大家对Android多媒体有深刻认识。原创 2022-03-24 20:35:33 · 10086 阅读 · 1 评论 -
FFmpeg源码分析:avcodec_send_frame()和avcodec_receive_packet()音视频编码
FFmpeg在libavcodec模块,旧版本提供avcodec_encode_video2()作为视频编码函数,avcodec_encode_audio2()作为音频编码函数。在FFmpeg 3.1版本新增avcodec_send_frame()与avcodec_receive_packet()作为音视频编码函数。后来,在3.4版本把avcodec_encode_video2()和avcodec_encode_audio2()标记为过时API。原创 2022-03-05 23:57:44 · 7283 阅读 · 0 评论 -
FFmpeg源码分析:avcodec_send_packet()与avcodec_receive_frame()音视频解码
FFmpeg在libavcodec模块,旧版本提供avcodec_decode_video2()作为视频解码函数,avcodec_decode_audio4()作为音频解码函数。在FFmpeg 3.1版本新增avcodec_send_packet()与avcodec_receive_frame()作为音视频解码函数。后来,在3.4版本把avcodec_decode_video2()和avcodec_decode_audio4()标记为过时API。原创 2022-03-03 23:17:59 · 23549 阅读 · 0 评论 -
FFmpeg源码分析:avcodec_open()打开编解码器
FFmpeg在libavcodec模块提供编解码能力,使用流程:寻找编解码器、分配编解码器上下文、打开编解码器、编码成AVPacket/解码成AVFrame、关闭编解码器。本文以avcodec_open()打开编解码器为主,对编解码整体流程进行分析。原创 2022-02-23 00:02:05 · 18854 阅读 · 0 评论 -
FFmpeg源码分析:av_seek_frame()与avformat_seek_file()
在播放视频过程中,想要跳过中间直接看精彩片段怎么办呢?或者看到精彩片段,想回到某个位置重新观看又该怎么办呢?所以播放器得提供seek操作实现快进快退功能,FFmpeg在libavformat模块提供此功能的API,av_seek_frame()属于旧版API,而avformat_seek_file()属于新版API并且兼容旧版本。原创 2022-02-20 16:17:31 · 24589 阅读 · 2 评论 -
Vulkan与OpenGL对比——Vulkan的全新渲染架构
OpenGL是Khronos Group组织发布的跨平台图像渲染引擎。在这里科普一下Khronos组织,由Intel、Nvidia等公司共同创立,致力于创建开放标准的应用程序API。大名鼎鼎的OpenGL、OpenGL ES、WebGL、Vulkan都是来自Khronos。而vulkan称为“下一版本的OpenGL”,旨在提供更低的CPU开销和更多GPU控制。Android API 24以后支持vulkan,iOS在WWDC2014也推出Metal图像渲染。本文主要探讨Vulkan的全新渲染架构。原创 2022-02-14 10:05:50 · 33975 阅读 · 6 评论 -
FFmpeg源码分析:写媒体文件尾av_write_trailer()
FFmpeg在libavformat模块提供音视频的muxer封装与demuxer解封装。其中muxer封装文件包括avformat_write_header()、av_write_frame()和av_write_trailer()。本文主要探讨av_write_trailer函数如何写入文件尾,最终完成多媒体文件的封装。原创 2022-02-13 15:55:38 · 19643 阅读 · 2 评论 -
FFmpeg源码分析:写音视频帧av_write_frame()
FFmpeg在libavformat模块提供音视频的muxer封装与demuxer解封装。其中muxer封装文件包括avformat_write_header()、av_write_frame()和av_write_trailer()。本文主要探讨av_write_frame函数如何写入音视频帧数据,包括音视频交错与音视频非交错两种情况。原创 2022-02-13 00:28:17 · 21804 阅读 · 0 评论 -
Android端使用AAduio实现高性能音频
AAudio 是在 Android O 版本中引入的全新 Android C API,与AAudio类似的是oboe库。此 API 专为需要低延迟的高性能音频应用而设计。应用通过读取数据并将数据写入流来与 AAudio 进行通信。AAudio 在应用与 Android 设备的音频输入端及输出端之间传输音频数据。应用通过读取和写入以 AAudioStream 结构表示的音频流来传入和传出数据。这些读写操作可以是阻塞式调用或非阻塞式调用。原创 2022-02-09 15:31:59 · 6489 阅读 · 0 评论 -
FFmpeg源码分析:写媒体文件头avformat_write_header()
FFmpeg在libavformat模块提供mux封装视频的API,包括avformat_write_header()写文件头、av_write_frame()写音视频帧、av_write_trailer()写文件尾。本文主要介绍写文件头的方法avformat_write_header()。通过分析源码,与大家一起探讨FFmpeg是如何封装视频文件的。原创 2022-02-08 00:19:42 · 23519 阅读 · 0 评论 -
音视频开发成长之路与音视频知识总结
音视频涉及语音信号处理、数字图像处理、信息论、封装协议、编解码、渲染、流媒体协议、网络传输、视频特效、音频特效等等。而音视频在现实生活中扮演着越来越重要的角色,比如视频会议、短视频、直播、播放器、语音聊天等。所以,从事音视频工作是一件比较有意义的事情,挑战与机遇并存。本文主要从六个方面进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与音视频书籍。...原创 2022-01-14 01:34:32 · 43661 阅读 · 14 评论 -
FFmpeg源码分析:AVFilterGraph与AVFilter
FFmpeg在libavfilter模块提供简单与复杂的音视频滤镜,所有滤波器由AVFilterGraph滤波器图表连接起来。简单滤镜为一对一输出,复杂滤镜为多对一输出。重要的结构体包括:AVFilterGraph、AVFilterLink、AVFilterContext、AVFilter。支持在滤波器图表指定位置插入AVFilter滤波器,然后由AVFilterLink把滤波器连接起来。原创 2021-12-31 23:49:10 · 21928 阅读 · 0 评论 -
FFmpeg源码分析:连接AVFilter的桥梁buffersrc与buffersink
FFmpeg在libavfilter模块提供音视频滤镜,而buffersrc与buffersink是连接AVFilter滤镜的桥梁。其中buffersrc是输入缓冲区,buffersink是输出缓冲区。通过调用av_buffersrc_add_frame_flags(),把待滤波的音视频帧推送到输入缓冲区;调用av_buffersink_get_frame_flags()从输出缓冲区取出滤波后的音视频帧。原创 2021-12-28 00:50:42 · 12732 阅读 · 3 评论 -
FFmpeg源码分析:视频滤镜之deshake抗抖动
FFmpeg在avfilter模块提供各种音视频滤镜。本篇文章主要介绍deshake抗抖动,又称为去抖动,用于修复水平和/或垂直移动中的小变化。运用SAD块匹配运动补偿来消除垂直或水平方向漂移带来的微小偏差。此滤波器有助于消除手持相机、在车辆上移动时产生的相机抖动。原创 2021-12-26 22:15:25 · 28604 阅读 · 0 评论 -
FFmpeg源码分析:视频滤镜介绍(下)
FFmpeg在libavfilter模块提供音视频滤镜。所有的视频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-v代表视频。本篇文章主要介绍视频滤镜,包括:绘制文字、边缘检测、淡入淡出、高斯模糊、左右镜像、图层叠加、视频旋转。原创 2021-12-23 00:55:34 · 30375 阅读 · 0 评论 -
FFmpeg源码分析:视频滤镜介绍(上)
FFmpeg在libavfilter模块提供音视频滤镜。所有的视频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-v代表视频。本篇文章主要介绍视频滤镜,包括:黑色检测、视频叠加、色彩均衡、去除水印、抗抖动、矩形标注、九宫格。原创 2021-12-22 01:14:04 · 30516 阅读 · 0 评论 -
FFmpeg源码分析:音频滤镜介绍(下)
FFmpeg在libavfilter模块提供音视频滤镜。所有的音频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-a代表音频。本篇文章主要介绍音频滤镜,包括:混音、静音填充、哈斯效应、合唱效果、均衡器、iir与fir滤波器、低通滤波器、带通滤波器、高通滤波器、变速变调、音量调节、静音检测。原创 2021-12-21 09:56:27 · 30265 阅读 · 0 评论 -
FFmpeg源码分析:音频滤镜介绍(上)
FFmpeg在libavfilter模块提供音视频滤镜。所有的音频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-a代表音频。本篇文章主要介绍音频滤镜,包括:延时、回声、混音、均衡器、限幅器、iir与fir滤波器、低通滤波器、带通滤波器、高通滤波器、变速、变调、静音检测。原创 2021-12-20 00:34:38 · 30648 阅读 · 0 评论 -
FFmpeg源码分析:resample重采样
FFmpeg在libswresample模块提供重采样函数。音频重采样过程是先建立原始音频信号,然后重新采样。重采样分为上采样和下采样,其中上采样需要插值,下采样需要抽取。从高采样率到低采样率转换是一种有损过程,FFmpeg提供若干选项和算法进行重采样。原创 2021-12-19 01:03:55 · 30319 阅读 · 0 评论 -
FFmpeg源码分析:获取声道布局与声道数
FFmpeg在libavutil模块封装有获取声道布局与声道数的API。声道布局包括:单声道、立体声道、环绕声道、5.0声道、5.1声道、7.0声道、7.1声道等。声道掩码包括:前方左边、前方右边、前方中央、低频、后方左边、后方右边、后方中央、左环绕、右环绕等。声道布局、声道名字和声道位置可以互相转换。原创 2021-12-17 00:05:36 · 22188 阅读 · 0 评论 -
FFmpeg源码分析:swr_convert()音频格式转换
FFmpeg在libswresample模块提供提供音频转换函数,以前使用的libavresample模块已经过时。根据官方文档说明:libswresample提供深度优化的音频重采样、声道布局转换与格式转换。音频重采样过程是先建立原始音频信号,然后重新采样。重采样分为上采样和下采样,其中上采样需要插值,下采样需要抽取。从高采样率到低采样率转换是一种有损过程,FFmpeg提供若干选项和算法进行重采样。原创 2021-12-16 01:08:17 · 34541 阅读 · 0 评论 -
FFmpeg源码分析:音频采样格式相关API
FFmpeg针对音频采样格式的获取与处理,封装有专门工具类。音频采样格式枚举类型与相关API,位于libavutil模块的samplefmt.h,包括获取采样格式名字、获取采样格式类型、获取每个采样所占字节、获取采样数所需缓冲区大小、填充采样数组、分配采样缓冲区、拷贝采样数据、填充采样数据为静音。原创 2021-12-14 00:51:08 · 32646 阅读 · 0 评论 -
FFmpeg源码分析:sws_scale图像缩放与图像转换
FFmpeg在libswscale模块提供图像缩放与图像转换功能,比如1080P图像缩放为720P,或者YUV422P转换为YUV420P。图像缩放函数有个SwsContext结构体作为上下文,上一篇文章有介绍:SwsContext图像转换上下文。原创 2021-12-11 23:43:38 · 34016 阅读 · 0 评论 -
FFmpeg源码分析:SwsContext图像转换上下文
FFmpeg的libswscale模块提供图像缩放、图像格式转换功能。其中贯穿整个模块的是SwsContext结构体,方法包括sws_alloc_context分配、sws_init_context初始化、sws_getContext获取上下文、sws_get_cachedContext获取缓存,sws_freeContext释放上下文的方法。原创 2021-12-11 17:10:34 · 33403 阅读 · 0 评论 -
FFmpeg源码分析:图像常用操作
FFmpeg有封装图像的常用操作,位于libavutil/imgutils.c,包括图像拷贝、图像填充、获取图像大小、分配图像、检测图像宽高比是否有效。在视频图像缩放、像素格式转换、视频截图保存等操作,经常需要用到图像操作方法。原创 2021-12-09 09:34:11 · 16569 阅读 · 0 评论 -
FFmpeg源码分析:内存管理系统
FFmpeg有专门的内存管理系统,包括:内存分配、内存拷贝、内存释放。其中内存分配包含分配内存与对齐、内存分配与清零、分配指定大小的内存块、重新分配内存块、快速分配内存、分配指定最大值的内存、分配数组内存、快速分配数组内存、重新分配数组内存。原创 2021-12-08 09:27:10 · 16670 阅读 · 0 评论 -
FFmpeg源码分析:log日志系统
FFmpeg的封装专有的log日志系统,支持设置日志等级log level,也支持日志回调log callback,方便开发者调试与排查问题。原创 2021-12-07 00:09:43 · 33440 阅读 · 0 评论 -
FFmpeg源码分析:avcodec_find_decoder()查找解码器
FFmpeg提供两种方式查找解码器,通过codecId查找avcodec_find_decoder()与通过名字查找avcodec_find_decoder_by_name()。同样地,也提供两种方式查找编码器,通过codecId查找avcodec_find_encoder()与通过名字查找avcodec_find_encoder_by_name()。源码位于libavcodec/allcodecs.c中。原创 2021-12-05 12:17:57 · 42139 阅读 · 2 评论 -
FFmpeg源码分析:avcodec_register_all()注册编解码器
FFmpeg的avcodec_register_all()用于注册编解码器,FFmpeg4.0版本以前是调用该方法,运行期把所有编译的编解码器添加到链表。但是FFmpeg4.0版本以后,改为编译期自动生成编解码数组,还有解析器数组。原创 2021-12-05 00:57:10 · 36031 阅读 · 0 评论 -
FFmpeg源码分析:avfilter_register_all()注册AVFilter
FFmpeg的avfilter_register_all()用于注册所有AVFilter滤镜,包括音频、视频、音视频。但是FFmpeg4.0以后,注册函数已经被标记为过时,保留该方法是为了兼容以前版本。改为编译期自动生成AVFilter,保存在数组中。原创 2021-12-04 21:33:42 · 33732 阅读 · 0 评论