- 博客(175)
- 资源 (48)
- 问答 (1)
- 收藏
- 关注
原创 音视频开发成长之路与音视频知识总结
音视频涉及语音信号处理、数字图像处理、信息论、封装协议、编解码、渲染、流媒体协议、网络传输、视频特效、音频特效等等。而音视频在现实生活中扮演着越来越重要的角色,比如视频会议、短视频、直播、播放器、语音聊天等。所以,从事音视频工作是一件比较有意义的事情,挑战与机遇并存。本文主要从六个方面进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与音视频书籍。...
2022-01-14 01:34:32 43538 14
原创 ijkplayer播放器架构从原型到升级
ijkplayer是一款跨平台的播放器,支持Android与iOS端,核心部分基于ffmpeg,支持Android的mediacodec硬解与iOS的videotoolbox硬解,视频图像采用OpenGL进行渲染。许多主流播放器都使用ijkplayer作为播放方案。接下来我们从核心播放流程、内核播放架构、时序图、状态机、播放器整体架构进行详细分析。
2021-11-20 16:21:44 25471
原创 android端采用FFmpeg进行视频剪切、转码与添加水印
前两篇文章介绍过FFmpeg进行音频处理、音视频处理:android端采用FFmpeg进行音频混合与拼接剪切, android端采用FFmpeg进行音视频合成与分离。关于FFmpeg涉及文件导入以及cmake配置,可查看第一篇文章。现在接着探讨视频相关处理:视频转码、视频剪切、视频截图、添加水印、视频转Gif动图、图片合成视频。1、视频转码视频转码包括格式、码率、尺寸大小等转换,-f代
2018-01-25 02:16:16 48686 30
原创 FFmpeg音频处理——音频混合、拼接、剪切、转码
接触FFmpeg有一段时间了,它是音视频开发的开源库,几乎其他所有播放器、直播平台都基于FFmpeg进行二次开发。本篇文章来总结下采用FFmpeg进行音频处理:音频混合、音频剪切、音频拼接与音频转码。采用android studio进行开发,配置build.gradle文件:defaultConfig { ...... externalNativeBui
2018-01-23 02:58:47 50409 98
原创 android端使用openCV与深度学习实现车牌识别
车牌识别的应用场景随处可见:高速公路上超速抓拍、小区门口关卡、车库入口关卡,甚至出现在车载设备上。它的工作原理大致这样:使用摄像头充当“眼睛”,使用openCV与深度学习充当“大脑”。实时车牌识别工作步骤:摄像头抓拍—>openCV初步定位车牌位置—>二次确认车牌位置的左右上下边界—>车牌倾斜校正—>车牌字符切割—>车牌字符识别。其中,车牌检测是车牌识......
2018-01-11 01:30:54 49416 183
原创 Android端极致画质体验之HDR播放
高动态范围HDR视频通过扩大亮度分量的动态范围(从100cd/m2到1000cd/m2),以及采用更宽的色彩空间BT2020,提供极致画质体验。从Android10开始,支持HDR视频播放。
2023-11-29 21:40:54 3126
原创 WebRTC之丢包重传协议
丢包处理可以使用FEC前向纠错、NACK丢包重传。上一篇文章咱们介绍过前向纠错,现在来探讨丢包重传。首先是接收端发送基于RTCP反馈的请求,发送端收到请求后重传指定packet包。
2023-09-24 12:21:58 934
原创 WebRTC之FEC前向纠错协议
FEC前向纠错用于丢包恢复,对媒体包进行异或或其他算法生成冗余包进行发送。如果接收端出现丢包,可以通过冗余包恢复出原始的媒体包。FEC的代价是增加码率带宽,所以一般会根据网络状况、丢包率来动态调整FEC冗余系数,也会结合NACK/ARQ丢包重传使用。WebRTC使用的FEC包括:ULP、flex、RED三种协议。接下来,我们主要分析ULP的协议结构。
2023-08-27 13:26:40 1394
原创 H.266/VVC视频编码原理探索
在2020年7月,H.266/VVC的标准规范正式面世。据统计,VVC的编码压缩率比HEVC提升一倍,支持RPR参考帧重采样、SCC屏幕内容编码等新技术。这意味着在5G时代,VVC视频编码让4K、8K超高清视频成为可能。
2023-07-03 12:07:36 1512
原创 探索MediaPipe自定义机器学习模型
MediaPipe支持人脸识别、目标检测、图像分类、人像分割、手势识别、文本分类、语音分类。每个模块都有对应的模型,但是原有模型可能比较大、推理耗时比较长,我们可以自定义模型来进行进行优化。
2023-06-27 14:09:41 4709 2
原创 探索MediaPipe的人像分割
MediaPipe是Google开源的计算机视觉处理框架,基于TensorFlow来训练模型。图像分割模块提供人像分割、头发分割、多类分割。本文主要探索如何实现人像分割,当然在人像分割基础上,我们可以做背景替换、背景模糊。
2023-06-26 17:47:38 4666
原创 探索MediaPipe检测人脸关键点
MediaPipe是Google开源的计算机视觉处理框架,基于TensorFlow来训练模型,支持人脸识别、人脸关键点、目标检测追踪、图像分类、人像分割、手势识别、文本分类、语音分类等。我们可以使用CPU来推理,也可以选择GPU加速推理。在滤镜特效场景,经常需要用到人脸关键点。
2023-06-26 12:11:11 7249 8
原创 探索OpenCV的AI实现视频超分
OpenCV除了使用光流算法与普通插值实现图像视频超分,还提供AI深度学习实现视频超分。算法模型包括:edsr、espcn、fsrcnn、lapsrn,实现超分的倍数有2、3、4、8。通过AI实现的视频超分比传统算法的效果更好,图像更清晰。在opencv_contrib外置库的dnn_superres模块,就是用AI实现的图像/视频超分。接下来,我们对比AI算法、双三次插值、最近邻插值、LANCZOS插值的超分效果。通过计算图像的PSNR、SSIM来评估超分质量。
2023-06-21 15:24:00 1695
原创 探索OpenCV的光流算法视频超分与源码实现
在OpenCV4.0以后,视频图像超分模块已经迁移到opencv_contrib独立仓库。在视频超分有两种形式:结合光流算法实现超分、使用CNN卷积神经网络实现超分。在这里主要探索光流算法实现视频超分,然后进一步分析源码实现。
2023-06-18 21:41:12 2038
原创 OpenCV的级联分类器训练
使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。
2023-06-17 14:02:19 2499 3
原创 探索iOS之Metal标准库
Metal标准库包括:通用函数、整型函数、关系函数、数学函数、矩阵运算、SIMD运算、几何函数、纹理函数等。接下来让我们走进Metal标准库的世界。
2023-06-14 12:25:12 1280
原创 探索iOS之Metal编程指南
iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言,渲染效率比OpenGL高。在这里我们一起探索:Metal使用C++的限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。
2023-06-13 21:11:06 3221 2
原创 探索LowLatency的HLS低延迟直播协议
HLS全称为HTTP Live Streaming,其中m3u8作为描述协议,指向一系列切片文件。支持多码流与自适应码率,支持广告无缝播放,支持CMAF协议的低延时直播,也支持CDN动态选择。
2023-06-11 21:46:18 1210
原创 OpenCV转换HDR图像与源码分析
我们常见的图像位深一般是8bit,颜色范围[0, 255],称为标准动态范围SDR(Standard Dynamic Range)。SDR的颜色值有限,如果要图像色彩更鲜艳,那么就需要10bit,甚至12bit,称为高动态范围HDR(High Dynamic Range)。OpenCV有提供SDR转HDR的方法,而逆转换是通过Tone mapping实现。
2023-06-11 12:41:14 3542 2
原创 探索iOS之CoreImage框架
CoreImage提供图像处理、人脸识别、图像增强、图像滤镜、图像转场。它操作的数据来自Core Graphics、Core Video、Image IO,使用CPU或GPU进行渲染。CoreImage对底层实现进行封装,为上层提供简单易用的API。
2023-05-27 13:58:21 1361
原创 探索iOS之多摄像头预览架构
在iOS13.0开始支持多摄像头预览AVCaptureMultiCamSession,然后iOS15.0增加支持摄像头画中画预览。在使用之前,我们通过isMultiCamSupported()判断是否支持多Camera同时预览。
2023-05-22 10:12:40 1233 2
原创 探索iOS之CoreAudio核心音频框架
iOS的CoreAudio分为三层:应用服务层、驱动层、硬件层。其中,应用服务层包括:AudioQueue Service、AudioPlayer Service、AudioSession Service、AudioFile Service、AudioUnit等。
2023-05-18 12:27:12 1044
原创 探索iOS之AudioUnit音效框架
iOS的AVAudioUnit提供的音效包括:混响、延迟、均衡器、失真、变速、变调等。按照类型划分为Audio Effect和Time Effect,其中Audio Effect包括混响、延迟、均衡器和失真,而Time Effect主要是变速、变调。
2023-05-16 12:08:11 1498
原创 探索iOS之AVFoundation框架
AVFoundation框架的业务层主要是AVKit和UIKit,内核层包括CoreVideo、CoreAudio、CoreMedia、VideoToolBox等。AVFoundation作为iOS的音视频框架,提供音视频播放、录制、编辑、编解码、音效设置等。
2023-05-15 14:36:46 1399 1
原创 iOS播放与编辑HDR视频
在iPhone12发布后,支持使用Dolby Vision来录制HDR视频。至此,升级到iOS14.1系统后,已经支持录制、播放、编辑和导出HDR视频。
2023-05-14 18:07:33 1292 2
原创 安全可靠的SRT实时传输协议
Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密,运用FEC进行前向纠错,并且有流量控制、拥塞控制。类似于QUIC协议,SRT采用UDP代替TCP,在应用层提供发送确认机制、ARQ自动重传,减少端到端的延迟。
2022-12-04 17:02:44 3857
原创 一文掌握OpenGL的shader内置函数
OpenGL ES有大量的GLSL内置函数,包括:三角函数、指数函数、通用函数、浮点函数、几何函数、矩阵函数、矢量关系函数、纹理函数、原子函数、图像函数、插值函数、着色器函数等。
2022-10-24 20:00:25 4558
原创 Miracast投屏协议深入剖析
Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。
2022-10-06 16:11:59 7984 2
原创 走进音视频的世界——Opus编解码协议
Opus是一种开源免费的音频编解码器,支持音乐和语音,具有低延时、带内FEC、DTX、PLC等特点,默认22.5ms延时,非常适用网络实时传输。官网:https://www.opus-codec.org。Opus协议收录于RFC6716,使用SILK和CELT两种编码。
2022-09-01 21:45:38 4912
原创 走进音视频的世界——RGB与YUV格式
在图像的世界里,一般使用RGB作为存储格式。而在视频的世界里,一般使用YUV作为压缩存储格式。有时候面试官会问:为什么视频使用YUV来压缩存储,而不用RGB?YUV与RGB有什么区别,两者如何转换的?常见的RGB格式有哪些,常见的YUV格式又有哪些?手机摄像头的预览格式是什么,如何转换为YUV420P的?我们带着这些问题,来揭开RGB与YUV格式的面纱。............
2022-08-07 22:33:36 5673 1
原创 走进音视频的世界——mp3封装格式
MP3,全称是MPEG Audio Layer3,利用人耳对高频声音信号不敏感的特性,结合心理声学模型,把时域信号转换为频域信号,并划分多个频段,对不同频段使用不同压缩率进行压缩。整体压缩率达到1:10,甚至1:12。...
2022-07-28 21:24:02 1527
原创 走进音视频的世界——FLV视频封装格式
FLV全称为Flash Video,是一种流媒体视频格式。特点是体积小、封装简单、方便存储与传输。常见的http-flv推流直播就是使用flv格式,rtmp推流也默认支持flv格式。FLV和RTMP都是adobe公司开发的。
2022-07-25 21:57:12 735
原创 C++最佳实践之常用库介绍
C++的常用库包括:algorithm、chrono、iostream、future、memory、map、unordered_map、queue、regex、set、string、sstream、stdexcept、thread、vector、mutex等。熟悉这些C++库对我们开发有很大帮助,我们结合代码实践来介绍。.........
2022-07-06 15:40:55 14981
原创 C++最佳实践之常用关键字
C++的常用关键字包括:auto、decltype、try、catch、class、constexpr、new、delete、const_cast、static_cast、dynamic_cast、reinterpret_cast、explicit、export、friend、mutable、using、namespace、noexcept、nullptr、operator、private、public、static_assert、template等...............
2022-06-29 22:09:53 12854
原创 C语言最佳实践之库文件介绍(下)
C语言的库文件包括:pthread线程、assert断言、string字符串、time时间、math数学运算、std开头的标准库、sys开头的系统库等。其中,标准库有stdalign.h、stdarg.h、stdatomic.h、stdbool.h、stddef.h、stdint.h、stdio.h、stdlib.h。系统库有sys/mman.h、sys/stat.h、sys/ioctl.h、sys/file.h。本篇文章主要介绍std标准库和sys系统库。...............
2022-06-05 00:16:57 11945 1
原创 C语言最佳实践之库文件介绍(上)
C语言的库文件包括:std开头的标准库、assert断言、sys开头的系统库、string字符串、time时间、math数学运算、pthread线程等。其中,标准库有stdalign.h、stdarg.h、stdatomic.h、stdbool.h、stddef.h、stdint.h、stdio.h、stdlib.h。系统库有sys/mman.h、sys/stat.h、sys/ioctl.h、sys/file.h。............
2022-05-27 12:11:13 14129 2
原创 C++最佳实践之编程建议
本文介绍C++的编程建议基于C++之父Bjarne Stroustrup编写的《A Tour of C++》,包括通用指南、命名空间、异常处理、成员函数、虚函数、构造函数、模板、容器、stl标准库、线程与并发控制。
2022-05-04 23:26:18 16997
原创 c语言最佳实践之关键字
c语言的关键字包括:基本类型、void空类型、条件语句、循环语句、跳转指令、类型修饰符等。其中类型修饰符包括:const、extern、inline、static、volatile、register、restrict。下面按照功能划分,结合代码实例进行介绍。
2022-04-22 18:43:27 6071
原创 Android的JNI开发全面介绍与最佳实践
JNI全称是Java Native Interface,为Java本地接口,是连接Java层与Native层的桥梁。在Android进行JNI开发时,可能会遇到couldn't find "xxx.so"问题,或者内存泄漏问题,或者令人头疼的JNI底层崩溃问题。Java层如何调用Native方法?Java方法的参数如何传递给Native层?而Native层又如何反射调用Java方法?这些问题在本文将得到答案,带着问题去阅读会事半功倍,接下来我们开始全方位介绍与最佳代码实践。
2022-04-14 20:51:51 28388 7
仿微信底部栏透明度渐变效果并且带红点提醒和未读数统计
2016-12-15
google为android打造的响应式编程agera
2016-11-12
android客户端语音聊天
2016-11-10
带动画的弧形仪表盘统计控件
2016-11-06
利用RecyclerView实现垂直滑动的ViewPager
2016-10-22
群成员@提醒
2016-10-07
类似微信QQ分享我的位置
2016-09-22
支持拍照的图片选择器
2016-09-20
android利用windowmanager实现悬浮窗
2016-09-15
Android自定义GridView长按拖动排序
2016-03-18
android自定义GridView拖拽排序
2016-03-18
android客户端远程操作数据库
2016-01-21
window平台的nginx rtmp服务器
2018-07-12
android端基于深度学习的车牌识别
2018-04-23
android端实时车牌识别
2018-01-09
Android基于socket的TCP通信
2017-04-16
Android端使用IjkPlayer的RTSP直播低延时
2018-05-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人