NDK学习笔记
NDK下C/C++ FFmpeg OpenGL.ES 等学习笔记。
Mr_Zzr
这个作者很懒,什么都没留下…
展开
-
NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流
NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流本篇将是RtmpPusher 的最后一篇。在之前的3篇文章里,我们已经把原生的视频YUV格式编码成h264,把音频的PCM格式编码成aac。现在我们借助rtmpdunmp库,把这些数据包以RTMP的协议打包并推到指定url的流服务器。这里需要配合生产者-消费者的设计模式来优雅地完成这个任务,整个落成框架如下...原创 2019-03-07 22:42:44 · 927 阅读 · 0 评论 -
NDK学习笔记:RtmpPusher之利用faac库将pcm格式编码为aac
NDK学习笔记:RtmpPusher之利用faac将pcm格式编码为aac打算一篇总结完知识点。faac的源码编译过程就不介绍了,网上很多。而且faac版本貌似已经稳定不更新,所以直接拿人家编译好的库也没问题(我github工程里面就是已经是最后一个版本的了)。不废话,开始代码,java层代码如下: private AcousticEchoCanceler cancele...原创 2019-03-06 11:56:23 · 586 阅读 · 0 评论 -
NDK学习笔记:RtmpPusher之深度学习编码协议h264
NDK学习笔记:RtmpPusher之深度学习编码协议h264认识编码协议 h264x264是根据h264编译协议写出来的一个编码库,两者就是这样关系。so,什么是h264编码协议?首先我们从简单的说起:在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。在H264中图像以序列为单位进行组织,...原创 2019-03-02 11:28:11 · 853 阅读 · 0 评论 -
NDK学习笔记:RtmpPusher之认识x264编码库
NDK学习笔记:RtmpPusher之认识x264编码库在家过了个懒散年,为自己定了些小目标(譬如一个亿什么的,人要有梦想是吧)哈哈。祝大家诸事顺景,代码没bug,服务器不宕机。距离上一篇文章一个多月了,之前的文章主要是学习ffmpeg关于视音频解码同步的部分内容(native_decode),接下来的几篇文章,我们来学习关于x264/faac的视音频编码内容(native_encode),通...原创 2019-03-01 16:18:41 · 484 阅读 · 0 评论 -
NDK学习笔记:FFmpeg音视频同步3(你追我赶,升级ffmpeg/libyuv支持neon)
NDK学习笔记:FFmpeg音视频同步3 本篇内容说多不多,但如果要说得明明白白的,可能就有点难度了。所以我决定把我的调试过程日志都呈现出来,方便大家理解。继上一篇文末,我们学习到了什么是DTS/PTS,还有音视同步的三种策略。那再FFmpeg框架中,又怎么体现这些变量?我们以音频的解码线程为例,如下代码所示。void* audio_avframe_decoder(void* arg...原创 2019-01-23 18:52:01 · 809 阅读 · 2 评论 -
NDK学习笔记:FFmpeg音视频同步2.5(内存池的优化)(DTS/PTS && 视频IPB帧)
NDK学习笔记:FFmpeg音视频同步2.5(内存池的优化) 继续上一篇 AV_PACKET_BUFFER内存池应用。FFmpeg音视频同步1~2的代码,demo运行的效果应该是怪怪的。 怎么怪?前几秒视频丢失 \ 混乱花屏 \ 视频慢、音频快。这一章我们一一分析这些问题的根本原因,以及解决方法。所以出现这些问题的原因是什么?为啥在之前的教学例子没有出现?显然这跟我们新添加的AV_PA...原创 2019-01-20 10:16:06 · 901 阅读 · 0 评论 -
NDK学习笔记:FFmpeg音视频同步2(内存池应用)
NDK学习笔记:FFmpeg音视频同步2(内存池应用) 本章继续上一篇的内容,实现nativePlay方法,创建简易的AVPacket缓冲区,实现高效的存储。废话不说,直接上代码。JNIEXPORT void JNICALLJava_org_zzrblog_ffmp_SyncPlayer_nativePlay(JNIEnv *env, jobject instance){ ...原创 2019-01-17 23:13:22 · 1016 阅读 · 0 评论 -
NDK学习笔记:FFmpeg音视频同步1(视频解码+音频解码)
NDK学习笔记:FFmpeg音视频同步1(视频解码+音频解码) 0、开篇先来点废话本篇文章开始,我和大家一起来讨论这个经久不衰的音视频开发的难点 —— 音视频同步。囊括内容比较多,大到代码组织,小至C语法糖,尽力做到每一个像我一样的菜鸡都能掌握解决方法。正式开始之前,我又想起了之前利用OpenGLES+MediaCodec的水印录制系列文章,当时没有处理音频,合成出来的mp4只有图...原创 2019-01-14 22:37:06 · 1734 阅读 · 0 评论 -
NDK学习笔记:线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?)
NDK学习笔记:线程JNIEnv,JavaVM,JNI_OnLoad 此文章是关于NDK线程的第二篇理论知识笔记。主要有两个点,如下:pthread_create(Too many arguements, expected 1) ? 线程中如何获取JNIEnv?GetEnv返回NULL? FindClass返回NULL ?首先我们在主页MainActivity的代码如下:p...原创 2018-12-27 17:31:44 · 3672 阅读 · 0 评论 -
NDK学习笔记:POSIX-thread 用法总结(pthread_join、pthread_cancel、pthread_mutex_、pthread_cond_ )
NDK学习笔记:POSIX-thread 用法总结三个简单的例子,记录NDK中的POSIX-thread线程的常用用法。好记性不如烂笔头。 第一个例子,创建,退出,自杀,它杀。#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <pthread.h>...原创 2018-12-25 17:45:07 · 2608 阅读 · 0 评论 -
NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)
NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM题目有点复杂,不过确实就是那么回事。这章想记录的内容比较多,先列出来:native static 与 native的参数列表 区别 JNI 调用 Java的方法(相关API、方法签名的获取) native使用java对象 常用实用技巧。废话不说,直接撸码public class ZzrF...原创 2018-12-19 16:04:27 · 2280 阅读 · 0 评论 -
NDK学习笔记:FFmpeg解压MP34提取音频PCM(swrContext、swr_alloc_set_opts)
NDK学习笔记:FFmpeg解压MP34提取音频PCM 承接 FFmpeg解压MP4提取视频YUV ,这次我们需要提取的是音频原始数据PCM。代码流程大同小异,主要区别就是AVFrame->PCM数据的转换。废话不说了,直接贴代码。public class ZzrFFmpeg { public static native int Mp34TOPcm(String in...原创 2018-12-17 17:44:42 · 2002 阅读 · 0 评论 -
NDK学习笔记:FFmpeg + SurfaceView = 播放 解码后的AVFrame(ANativeWindow_fromSurface)
NDK学习笔记:FFmpeg + SurfaceView = 播放AVFrame 承接上一篇FFmpeg解压MP4得YUV,在我们解压媒体文件(MP4,AVI,RMVB等)之后获取得到yuv420p格式的AVFrame之后,该怎么优雅的显示到Android的屏幕上呢?此时我们应该想到Android绘制用的SurfaceView / TextureView。接下来允许我装下*,写一个最简易丑...原创 2018-12-13 22:57:13 · 1464 阅读 · 0 评论 -
NDK学习笔记:FFmpeg解压MP4提取视频YUV
NDK学习笔记:FFmpeg解压MP4提取视频YUV 继上一篇NDK的开发笔记,既然我们已经从源码手动编译ffmpeg-so出来了,这篇文章就当是检验编译的so是否可用,对FFmpeg进行一番学习,写一个最简单的例子。并结合工作中的一些架构内容,推出一些简单架构的话题。欢迎大家互相学习。事不宜迟,马上撸码。一、准备工作定义native方法的java入口。FFmpegUtils...原创 2018-12-07 18:12:11 · 1047 阅读 · 3 评论 -
NDK学习笔记:AndroidStudio NDK 日志输出 & 断点调试
NDK学习笔记:AndroidStudio NDK日志输出 & 断点调试一、 Why I need log&debug ?在我们正常的开发过程中,业务调整必须依靠日志的输出;出现非业务逻辑的异常状况,我们就必须靠断点调试来排查问题。so,我们在NDK开发,怎样设置合理的日志和调试功能呢?以下提供给大家,方便大家提高开发效率。二、日志 log_common....原创 2018-12-10 11:52:52 · 1234 阅读 · 2 评论 -
NDK学习笔记:手动编译Android使用的FFmpeg库(Linux)
此文主要是翻查整理当年自己手动编译FFmpeg的记录,之前是在网易云笔记上,现在搬到CSDN上。 一、环境配置开发机windows10 64位,安装xshell+xftp方便与编译机器文件传输和操作通信。官网下载链接,注册的时候是教育自用而非商用。编译机Ubuntu 14.04.5 LTS,需要安装开始ssh的远程通信协议服务。问题主要一点,就是xshell链接不上Ubuntu...原创 2018-11-21 23:46:25 · 906 阅读 · 2 评论 -
NDK学习笔记:一起来变萝莉音!FMOD学习总结(下)
NDK学习笔记:一起来变萝莉音!FMOD学习总结(下)一、创建自己的变音demo上一节我已经能够在AndroidStudio上跑起了fmod的基础教程。还有疑问的同学可以重新阅读跟着来跑一次。这章节计划参照官方的play_sound.cpp + effect.cpp,实现类似变音器的效果。并且带大家熟悉AS的NDK代码的编写流程,毕竟往下的计划文章都慢慢的向NDK靠近,所以希望同学们...原创 2018-11-05 11:59:38 · 2486 阅读 · 0 评论 -
NDK学习笔记:一起来变萝莉音!FMOD学习总结(上)
NDK学习笔记:一起来变萝莉音!FMOD学习总结(上)一、不是fmod(),不是/fmod,是FMOD!关于 FMOD,总感觉全网关于它的文章不多,也不够细,Android平台上的总结更是如数家珍。可能是FMOD自身没有中文说明介绍的原因吧,另外一个原因可能就是闭源商用付费吧。我自己是在2016年末,在一个在线教学(TX的动脑学院)接触使用这个音频开发库的,算是接触NDK音视频的第一步,在...原创 2018-10-14 22:12:44 · 2362 阅读 · 0 评论