- 博客(1363)
- 收藏
- 关注
原创 FFmpeg解码H264视频裸流(直接可用)
1、写在前面此文章主要包含解码H264视频流数据,主要有以下几点:1、H264视频帧为Annex B格式,若使用AVCC格式可自行研究;2、H264视频裸流,非解码视频文件(若有需要我后期可添加这部分代码);3、支持输出RGB24或YUV420格式,其他可自行修改;4、FFmpeg官网代码迭代及接口变更较大,代码适应于FFmpeg3.4.2"Cantor"、3.3.7"Hilbert"等版本,较旧接口请看旧版本代码;
2023-11-30 20:00:00
1396
原创 CUDA和FFMPEG硬件解码视频流
其他博客给出的教程要么只是给出了伪代码,非常的模糊,要么是基于D3D进行显示,使得给出的源码非常复杂,而无法看出CUDA解码的核心框架,而本文将其他非核心部分剥离出去,视频播放部分通过opencv调用cv::mat显示。示例中NvDecodeD3D9.cpp实现了D3D环境的创建,CUDA模块的初始化,其中取视频帧图像显示的函数如下,该函数实现了从解码图像队列取出图像(实际上是显存指针),完成格式转换(NV12到ARGB),最后映射到D3D的Texture进行显示等功能,代码中我给出了关键部位的解释。
2023-11-30 16:07:32
1464
原创 FFmpeg 集成 x265 编译及解码
x265 是一个免费的软件库和应用程序,用于将视频流编码为 H.265/MPEG-H HEVC 压缩格式,并在 GNU GPL 条款下发布。FFmpeg 为了支持 H.265 编、解码可以集成 x265 编译,在编译 FFmpeg 之前需要先编译 x265,但并不是所有的版本都能直接使用,比如笔者同时编译 Android、Window 和 Linux 三个平台时,使用 Android NDK r21e 会遇到很多报错,符号缺失,无法编译 .S 文件都是可能遇到的问题。
2023-11-30 14:30:59
1753
原创 Android 利用 FFmpeg 解码音视频数据
在 avcodec_send_packet与avcodec_receive_frame应该是异步操作的,avcodec_send_packet 会将 AvPacket 放入到缓存队列中去解码,avcodec_receive_frame初次被调用时因为异步的原因可能没有获取到,也有可能可以获取多个 AvFrame,主要还是依赖解码的速度,因此通过循环去调用 avcodec_receive_frame 是比较妥当的做法。本文是基于之前写的几篇文章的,因此之前描述过的内容,在本文就不再重复了。
2023-11-29 19:45:00
1016
原创 Android 实现基于RTMP视频播放
这个怎么说,确实很坑,确实能实现播放视频的功能,但是需要build的版本太低,无法兼容别的功能(eg:权限的管理,build版本必须在23一下,这个就很坑了)。再烂别的,中间也找了很多,最后用到的是:基于ijkplayer项目进行的播放器,jjdxm_ijkplayer。直播的时候,直接想地址换为自己的地址就可以了。找到你下载的demon中的release 目录,其中有so文件,直接将其中的文件拷贝到app的libs目录中。导入之后,将导入的项目中的相关版本改为与app的版本一致,以免发生冲突。
2023-11-29 14:30:10
1313
原创 FFmpeg 内存H264流发布rtmp
由于新版FFmpeg和旧版FFmpeg在接口上已经有发生了一些区别,所以我这边就拿最新版本的FFmpeg来做,首先用FFmpeg的remuxing.c例程出来做测试,主要是用来读取IPC出来的rtsp流存成FLV或者发布成rtmp,进过试验,存成的flv格式是正确的格式,rtmp也能正常在播放器上面播放,在flv.js上面播放都没问题(我的nginx是有集成nginx-http-flv-module的)。读取内存264直接发布成rtmp的资料,发现这方面的资料很少,最近做了这方面的功能,特此记录下。
2023-11-29 14:12:19
991
原创 Android端实现基于RTMP的音视频推流
出现这个错误是因为使用最新版的NDK造成的,最新版的NDk将头文件和库文件进行了分离,我们指定的sysroot文件夹下只有库文件,而头文件放在了NDK目录下的sysroot内,只需在--extra-cflags中添加 "-isysroot $NDK/sysroot" 即可,还有有关汇编的头文件也进行了分离,需要根据目标平台进行指定 "-I$NDK/sysroot/usr/include/arm-linux-androideabi",将 "arm-linux-androideabi" 改为需要的平台。
2023-11-28 15:04:51
1497
原创 Android下RTMP推流h264和aac数据
将I420数据放入img中的三个平面内,然后编码输出h264,这里在初始化x264,设置每个I帧都带有sps 和 pps,spspps和h264数据要按照格式分别打包rtmppacket。基本流程就已经完成了,在我们初始化rtmp,开启循环从queue中读取rtmp包发送之前,需要先调用audioChannel->getAudioTag,获取音频编码信息帧,发送。在初始化faac的时候,设置了编码帧不带ADTS,所以要自己获取编码信息,在rtmp发送aac数据之前要先发送编码信息。
2023-11-28 14:34:21
493
原创 WebRTC-Android 探索 - 创建音视频通话程序的基本姿势
若要在 Android 上实现一个 WebRTC 通话应用,需要通过这五步的工作。WebRTC 中为开发者做了一系列的封装,减轻了开发者开发一个通话应用的压力。本篇文章将通过介绍这五步的实现简单介绍一下基本的使用姿势。准备工作关于信令交换方式及信令服务器,不管是官方还是开源社区会有一大堆的开源项目,可以选择各种例如 WebSocket、XMPP 等方式进行信令通讯以交换相关信息创建连接。具体在此系列文章不进行叙述,可在文章末尾链接下载一整系列的代码(来自公司里我很敬佩的一位前辈)。
2023-11-27 15:50:49
473
原创 互动直播之WebRTC服务器Kurento实战
1. KurentoKurento的主要组件是(KMS),负责媒体传输,处理,记录和播放。KMS建立在出色的GStreamer。
2023-11-26 14:15:00
1760
原创 如何用 ffmpeg + canvas 写一个在线可视化音视频编辑工具
如何在浏览器运行 ffmpeg 处理音视频;如何用 canvas 实现一个视频轨道;如何结合轨道、播放器和 ffmpeg, 实现视频编辑可视化;直接看一个官方给的 demo,通过几行脚本,就可以完成一个格式转换的任务。// 设置参数// 加载 ffmpeg.wasm-core 脚本// 输入文件需要调用 FS 方法,这样 ffmpeg 才能够进行”消费“// 执行 ffmpeg 命令// node 端将生成的文件直接写到文件中})();大概流程如下图。
2023-11-25 20:16:24
1281
1
原创 短视频技术详解:Android端的短视频开发技术
这块画布是存在于GPU内存中的。可以优化的一个点是,先将原始的MP4视频进行解码,然后将解码后的YUV数据映射到GPU的纹理上进行亮度、饱和度等参数的调节,做到文件编辑的所见即所得,然后将调好的参数配置为ffmpeg进行编辑处理。这里有一个需要注意的地方,Android的camera采集到SurfaceTexture上的纹理是GL_TEXTURE_EXTERNAL_OES 类型的纹理,而目前市面的很多滤镜算法,如开源的GPUImage中很多的滤镜都是基于GL_TEXTURE_2D类型的纹理进行图像处理的。
2023-11-23 19:45:00
470
原创 音视频小白如何实现一个录音/播放器
如果你从未接触过音视频开发,但有实现一个录音器、播放器的需求或想法,本文会是一个比较好的入门内容。音频基础知识。
2023-11-23 14:44:17
114
原创 Android Media3(二) — 在后台播放视频
自定义继承= null= null// 创建ExoPlayer// 基于已创建的ExoPlayer创建MediaSessionexoPlayer?// 释放相关实例exoPlayer?
2023-11-22 14:09:32
883
原创 Android Media3 (一)— 简单播放视频
在App开发中偶尔会需要播放视频,JetPack Media3是目前官方主推的视频播放库,使用ExoPlayer作为默认播放器,让开发人员可以轻松的实现播放视频和音频功能。本文简单介绍下如何使用Media3库播放视频。
2023-11-22 14:08:19
863
原创 聊聊真实的 Android TV 开发技术栈
智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了。但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样。
2023-11-21 20:30:00
308
原创 android音视频指南-支持的媒体格式
翻译自本文描述了Android平台提供的媒体编解码器、容器和网络协议支持。作为应用程序开发人员,您可以使用任何可以在任何Android设备上使用的媒体编解码器,包括Android平台提供的媒体编解码器和特定于设备的媒体编解码器。然而,使用与设备无关的媒体编码配置文件是一种最佳实践。下表描述了Android平台中内置的媒体格式支持。不保证在所有Android平台版本上都可用的编解码器在括号中注明,例如:(Android 3.0+)。
2023-11-21 14:42:17
66
原创 使用声网 SDK 为Android APP添加视频直播功能
视频互动直播是当前比较热门的玩法,我们经常见到有PK 连麦、直播答题、一起 KTV、电商直播、互动大班课、视频相亲等。本文将演示如何通过声网视频 SDK 在 Android 端实现一个视频直播应用。后,开发者每个月可获得 10000 分钟的免费使用额度,可实现各类实时音视频场景。话不多说,我们开始动手实操。一些前提条件一、 通过开源Demo,体验视频直播可能有些人,还不了解我们要实现的功能最后是怎样的。
2023-11-21 14:21:50
278
原创 android音视频指南-媒体应用架构概述
翻译自本节将解释如何将媒体播放器应用程序分离为媒体控制器(用于UI)和媒体会话(用于实际播放器)。它描述了两种媒体应用程序架构:一种客户端/服务器设计,适用于音频应用程序,另一种是视频播放器的单活动设计。它还展示了如何使媒体应用程序响应硬件控制并与使用音频输出流的其他应用程序合作。播放器和用户界面媒体会话media session和媒体控制器media controller虽然UI和播放器的api可以是任意的,但是对于所有媒体播放器应用程序来说,这两部分之间的交互本质上是相同的。
2023-11-20 20:15:00
61
原创 Android音视频合成,OpenGL视频转场效果
处理音频的时候,由于每个视频出现的位置不一样,每个视频原声什么时候开始播放也不一样,所以音画同步很重要,每个视频开始时间点的偏移量要跟音频同步,并且还要混合bgm,所以还是选用ffmpeg来实现。可以看出很明显的OpenGL对于性能的提升,2.0版本是进行了优化并且没有丰富的转场效果前提下才达到这个性能,3.0使用OpenGL做出了比较多的转场效果,可参考。这里的效果主要是转场效果,视频之间的转场,ffmpeg没有转场的功能命令,所以需要自己用骚操作实现,但这样会导致大量的性能损耗,这一点之前的文章说过。
2023-11-20 15:22:20
206
原创 Android多媒体框架之MediaCodec
关键技术处理EOS当没有输入数据时,必须通过queueInputBuffer携带标志位通知Codec,BUFFER_FLAG_END_OF_STREAM可以与最后一个合法输入帧一起输入,也可以单独输入一个带BUFFER_FLAG_END_OF_STREAM的空帧,此时带BUFFER_FLAG_END_OF_STREAM的空帧的pts值会被忽略。然后,Codec会继续输出数据,直到没有更多输出数据了。
2023-11-20 15:10:57
369
原创 Android音视频开发之音频录制和播放
1.封装音频录制工具类:2.音频录制方法:3.播放音频方法:4.播放pcm流边录边播:5.播放所有音频方法:7.暂停播放音频方法:8.回收资源和播放器方法:9.音频播放、文件读写权限申请:10.调用开始录音:11.调用播放音频:12.调用停止录音:13.设置录音、播放、停止按钮状态:14.布局文件代码如下:15.布局预览效果如下:16.完整MainActivity代码:17.工具类完整代码如下:18.项目源码地址
2023-11-19 12:30:00
193
原创 Android | 音视频方向进阶路线及资源合集
有Android开发的小伙伴问有没有系统学习音视频的路线或者资料,今天抽空写一篇文章,整理一条从难到易从浅入深的路线,并配套对应的主流代码库.音视频从采集到播放都经历了哪些流程呢::通过上面的图,我们简单的把音视频方向分为主要的两块:我们这篇文章不再从音视频专业知识开始,而Android系统API的角度,逐层深入.我们最开始接触的摄像拍照是通过Intent调用系统摄像头:我们要播放视频最原始的是基于VideoView系统控件.但是系统相机和系统控件VideoView的局限性都是可定制型太差,系统相机的
2023-11-18 14:52:39
103
原创 Android 音视频开发第1弹 - 基本理论
如今的应用市场,音视频相关的软件可谓 “百花齐放,百家争鸣”,作为一名 Android 开发者,对音视频开发还是比较感兴趣的,所以打算出个系列,做个系统的学习记录,这个系列会持续更新,希望对想学音视频开发的大伙有所帮助。
2023-11-17 14:30:06
39
原创 Android 音视频开发第3弹 - CameraX 图像视频采集
CameraX 是一个用于 Android 相机开发的 Jetpack 组件,它简化了相机功能的实现过程,并提供了一套一致的 API 接口,支持搭载 Android 5.0 及以上的设备,确保各设备间的一致性,支持大多数常见的相机用例,例如预览,图片拍摄,图片分析,视频拍摄等。添加依赖这些权限需要动态申请的,这里不再赘述。
2023-11-17 14:12:44
220
原创 音视频学习之路--了解音视频基础
前面的文章学习了一些关于C/C++和NDK相关的知识点,那么现在就来简单的入门一些关于音视频的相关概念,万层高楼平地起,还是从最基础开始。
2023-11-16 15:29:19
60
原创 浅析Android音频焦点
即应用程序A正在前台使用语音唤醒功能的时候,应用B拨打了一个语音电话过来,这时Android系统会把音频焦点分配给应用B,但应用A的语音唤醒功能并没有被剥夺、仍然可以使用。为什么会有音频焦点的出现?这时就需要约定一个规则,当应用程序失去音频焦点的时候,就需要暂停使用音频或降低音频音量,把音频通道让给占有音频焦点的应用程序使用。最近线上用户反馈了一些语音唤醒功能无法使用的问题(即无法通过语音来和应用交互),因此专门梳理了Android应用对音频焦点的处理逻辑并提出一些优化思路,下文是一次总结整理。
2023-11-16 14:56:48
217
原创 Android音频开发——对讲机实时语音对话
前言由于公司需求, 安排我研究对讲机的实时语音对话. 对讲机点击按钮发起对话, Android 端接听, 然后进行语音对话.研究了几天第三方对讲机Demo,发现这个demo只是简单播放音频, 而且还没有提供Android客户端相关代码,Java版也要自己看底层实现,没办法只有自己动手造, 我只想说 ***!!!准备工作一开始本来打算用Web端来做客户端, 但是由于技术有限, 中途换成端, 后台是SpringBoot. 前后端交互是通过WebSocket。
2023-11-15 16:39:53
347
原创 音视频从入门到起飞之Android NDK
本节中主要介绍了如下知识:(1)jni方法和Java层方法相互传值和类型(2)jni方法的动态注册和静态注册的区别和使用(3)三种引用的区别和使用(4)最后是创建线程然后调用Java层方法更新UI的方法原文音视频从入门到起飞之Android NDK★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。见下方!
2023-11-15 15:51:59
50
原创 Android多媒体系统的业务
典型的数据流在Android媒体播放器中的运行情况是:上层的Java应用程序将媒体的URI(可以是媒体文件和流媒体)作为输入设置到媒体播放器中,经过Java框架、JNI和本地框架,一直设置到由PVPlayer中。取景器实现了预览(Preview)功能,拍摄照片的输出是照片文件,取景器预览的输出是Android的Surface。Android的录音机功能比较单一,其数据流的运转情况通常是从音频的输入环节中获得PCM数据,经过PVAuthor进行编码,编码后加入媒体的头信息形成音频媒体文件。
2023-11-14 15:22:07
45
原创 Android音频知识介绍-从AndroidRecord看起
this,MediaRecorder.AudioSource.MIC, //麦克风数据16000, //采样率16kAudioFormat.CHANNEL_CONFIGURATION_MONO, //单声道// 16bit的采样精度上面一个初始化麦克风的调用,涉及到了很多知识,大概是大学时数字信号处理课程或者是信号与系统学的。相关觉得有必要科普一下,不然大家永远是在复制代码,遇到相关问题的时候如果不了解会一头雾水,优化效果更提不上了。
2023-11-14 15:08:12
85
原创 Android 性能优化—— 启动优化提升60%
默认情况下会出现白屏现象,系统默认会在启动应用程序的时候 启动空白窗口 ,直到 App 应用程序的入口 Activity 创建成功,视图绘制完毕系统默认会在启动应用程序的时候 启动空白窗口 ,直到 App 应用程序的入口 Activity 创建成功,视图绘制完毕系统默认会在启动应用程序的时候 启动空白窗口 ,直到 App 应用程序的入口 Activity 创建成功,视图绘制完毕。:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
2023-11-13 16:53:01
47
原创 基于Linphone开发Android音视频通话
1,Linphone简介1.1 简介LinPhone是一个遵循GPL协议的开源网络电话或者IP语音电话(VOIP)系统,其主要如下。使用linphone,开发者可以在互联网上随意的通信,包括语音、视频、即时文本消息。linphone使用SIP协议,是一个标准的开源网络电话系统,能将linphone与任何基于SIP的VoIP运营商连接起来,包括我们自己开发的免费的基于SIP的Audio/Video服务器。
2023-11-13 15:08:26
1438
1
原创 Android音视频(四)MediaCodec编解码AAC
MediaCodec类可以访问底层媒体编解码框架(StageFright 或 OpenMAX),即编解码组件,它是Android基本的多媒体支持基础架构的一部分,通常和MediaExtractor、MediaSync、MediaMuxer、MediaCrypto、MediaDrm、Image、Surface和AudioTrack一起使用。它本身并不是Codec,它通过调用底层编解码组件获得了Codec的能力。MediaCodec的工作方式MediaCodec处理输入数据产生输出数据。
2023-11-11 17:45:00
498
1
原创 Android音视频(二)音频AudioRecord和AudioTrack
如果只是想简单地做一个录音机,录制音频文件,就使用 MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输、直播等应用,则建议使用 AudioRecord。AudioRecord和AudioTrack是Android系统提供的用于实现录音、播放音频的功能类,使用这两个类做音频的采集与播放还是非常简单的。在Android中播放声音也是有两套API:MediaPlayer和AudioTrack,两者还是有很大的区别的。作者:MzDavid。
2023-11-11 14:30:00
238
原创 Android音视频(一) Camera2 API采集数据
这是Android音视频的第一篇文章,终于回到了我的老本行上。之前好像从来没有做过Camera相关的开发,这块对我来说还是有点陌生,所以从头开始学起。
2023-11-10 15:54:41
757
原创 Android音视频——Libyuv使用实战
近期换部门,从事之前从未接触过的Android音视频开发,主要涉及到USB摄像头调用、libyuv处理Nv21图像、直播推流等功能,对应的库有等,刚接触没经验也没人带挺难搞的,而且网上资料很凌乱,所以,开此篇总结&汇总一下近期的研究,兴许可以帮助到别人,本人亦是新手,文中如有不正确的地方,欢迎指出点评。一、libyuv入门。
2023-11-10 14:00:07
300
1
原创 Android音视频--H.264视频流解码
1. 简介H.264是比较多开发者使用较多的一种数字视频压缩格式,主要用于直播流的传输与视频网站的视频流传输,也有不少开发者开始使用H.265进行视频压缩,性能较H.264提升较大。本篇文章着重介绍使用MediaCodec硬件H.264裸字节流数据的实现方式,有关于更多H.264的介绍可以查看参考文章中H.264的结构介绍。2.使用MediaCodec硬解码2.1 MediaCodec介绍。
2023-11-09 21:00:00
289
原创 Android音频基础与录制播放
采样率表示在1秒内对声音的模拟信号采样的次数,假设上面是声音在1秒内的模拟信号,那么采样就只有2次,以频率作为计量单位,所以这里采样率2Hz。由此 ,可以看出采样率越高,采样得到的数字信号数据就越多,声音在播放过程就会越真实越接近原声,但这也占用很大的数据存储。在存储和传输过程,通常不使用PCM格式,虽然无损以及可以直接被声卡和DAC解析,但存储大小过大,会造成本地和网络资源的浪费。,根据奈奎斯特·香农采样定理,采样后的音频要还原成人耳可以识别声音,采样率需要为人耳可以识别频率的2倍,而人耳上限是。
2023-11-09 16:21:24
186
原创 QT环境实现低延迟RTSP|RTMP播放器
好多开发者在QT环境下实现RTMP或RTSP播放时,首先考虑到的是集成VLC,集成后,却发现VLC在延迟、断网重连、稳定性等各个方面不尽人意,无法满足上线环境需求。大牛直播SDK有MFC的demo,所以在QT上实现播放轻车熟路,如果需要多窗口播放,也可以参考转发的demo,转发的那个4窗口预览的demo做了二次封装,调用更方便。相对MFC,QT环境下在实现更酷炫和实用的逻辑显然体验更好一些。调用封装后的播放接口,记得多实例播放环境下,Init()和UnInit()接口仅需要调用一次,测试URL可自行设置。
2023-11-09 14:30:00
764
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人