音视频
路过独木桥!!
本人从事6年的android app开发和framework开发 从事过rk 展锐 MTK等平台os定制开发
展开
-
Android 8.1 如何查看系统支持哪些音视频编解码格式
代码路径:frameworks/av/media/libstagefright/omx/SoftOMXPlugin.cpp在SoftOMXPlugin.cpp文件中kComponents[]结构体中可以查看音视频编解码支持格式static const struct { const char *mName; const char *mLibNameSuffix; const char *mRole;} kComponents[] = { { "OMX.google.a原创 2021-11-11 15:17:31 · 3986 阅读 · 0 评论 -
RTMP 两种方式推流:推H.264、ACC和推FLV封装格式
一、RTMP推流方式一:推H.264、ACC1、创建一个线程来初始化RTMP。void RtmpPush::init() { LOGE("init()"); mCallJava->onConnectint(THREAD_MAIN); pthread_create(&push_thread, NULL, callBackPush, this);}void *callBackPush(void *data){ RtmpPush *rtmpPush =原创 2021-09-01 14:16:18 · 1753 阅读 · 0 评论 -
MediaCodec进行H.264、AAC编码后封装成FLV格式
一、初始化FLV封装包FlvPacker private void init(){ mFlvPacker = new FlvPacker(); mFlvPacker.initVideoParams(WIDTH, HEIGHT, FRAME_RATE); mFlvPacker.initAudioParams(44100, AudioFormat.ENCODING_PCM_16BIT,false); mFlvPacker.setPacketLi原创 2021-08-31 20:15:00 · 743 阅读 · 1 评论 -
MediaCodec进行H.264编码(Camera采集YUV数据)
在这里插入代码片```# 系列文章目录<font color=#999AAA >提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1"><font color=#999AAA >提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档原创 2021-08-31 20:02:26 · 1370 阅读 · 0 评论 -
MediaCodec进行AAC编码(AudioRecord采集录音)
一、使用AudioRecord采集录音,创建一个采集录音管理类AudioRecorderManager.javapublic class AudioRecorderManager { private static final String TAG = "AudioRecorderManager"; // 音频获取 private final static int SOURCE = MediaRecorder.AudioSource.MIC; // 设置音频采样率,44原创 2021-08-31 19:38:45 · 1510 阅读 · 7 评论 -
FFmpeg Android 实现本地推流直播
1\在AndroidManifest.xml文件中添加权限<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" />&原创 2021-08-27 09:34:04 · 476 阅读 · 0 评论 -
x264以及fdk-aac 编译
编译 x264x264 是采用 GPL 授权的开源视频编码库,主要用于 H.264/MPEG-4 AVC 的视频编码,仅作为编码器使用。下载地址http://download.videolan.org/pub/videolan/x264/snapshots/ https://www.videolan.org/developers/x264.htmlgit clone https://github.com/mirror/x264.git在 x264 解压目录下创建编译脚本build_x264.原创 2021-08-26 15:37:43 · 6761 阅读 · 0 评论 -
FFmpeg 4.2 开发 报错总结
报错:错误 1:G:\wang\work\FFmpegAndroid\app\src\main\cpp\include\libavutil\pixfmt.h:29:10: fatal error: ‘libavutil/avconfig.h’ file not found解决办法:由于avconfig.h文件里面是空的,所以我们可以把引入的该头文件去掉错误2:In file included from G:\wangqi\work\FFmpegAndroid\app\src\main\cpp\nati原创 2021-08-25 15:38:47 · 1508 阅读 · 0 评论 -
H264/H265/YUV码流分析工具记录
H264/H265/YUV码流分析工具记录1.CodecVisa(跨平台:H264/H265...)http://www.codecian.com/downloads.html 2.H264BSAnalyzer(H264/H265)https://github.com/latelee/H264BSAnalyzer 3.GitlHEVCAnalyzer(H264)https://github.com/lheric/GitlHEVCAnalyzer 4.Elecard HEVC/AVC An原创 2021-08-09 13:41:36 · 2303 阅读 · 0 评论 -
Rtmp信令交互过程分析四-发布(publish)
概述连接成功之后由客户端选择publish还是play,这里讲的是publish。1、C->S : releaseStream、FCPublish、createStream releaseStream:释放stream,这一步的作用是通知服务端释放对应的stream,以便接下来重新创建stream。 FCPublish createStream2、S->C : _result服务端对客户端releaseStream、FCPublish、createStrea原创 2021-07-02 13:37:06 · 598 阅读 · 0 评论 -
Rtmp信令交互过程分析三-连接(connect)
概述握手之后就是连接(connect),由客户端发起,服务端响应,connect指定的app。1、C->S : connect app:需要connect的app名称 flashVer tcUrl fpad capabilities audioCodecs videoCodecs videoFunction2、S->C : Window Acknowledgement Size指定Window Acknowledgem原创 2021-07-02 11:50:54 · 389 阅读 · 0 评论 -
Rrtmp信令交互过程分析二-握手(Handshake)
rtmp信令第一步是握手(Handshake),握手有Simple Handshake和Complex Handshake,Simple Handshake为简单握手,不需要使用加密算法校验,Complex Handshake为复杂握手,需要使用openssl的算法校验。一、Simple Handshake1) C0 1 byte,表示客户端RTMP的版本号。2) C1 1536 bytes (4-time + 4-zero + 1528-random) 时间:4 bytes。时间戳。原创 2021-07-02 11:42:23 · 414 阅读 · 0 评论 -
Rtmp信令交互过程分析
使用wireshark抓包分析rtmp推流和拉流过程的信令,大致如下:箭头>>>表示C->S,箭头<<<表示S->C通用部分>>> Handshake C0+C1<<< Handshake S0+S1+S2>>> Handshake C2>>> AMF0 Command connect(‘app’)<<< Window Acknowledgement Siz原创 2021-07-02 10:45:17 · 513 阅读 · 0 评论 -
rtmp一些状态信息详解
下表说明了 code 和 level 属性可能的字符串值。代码属性 级别属性 意义"NetStream.Buffer.Empty" "status" 数据的接收速度不足以填充缓冲区。数据流将在缓冲区重新填充前中断,此时将发送 NetStream.Buffer.Full 消息,并且该流将重新开始播放。"NetStream.Buffer.Full" "status" 缓冲区已满并且流将开始播放。"NetStream.Buffer.Flush" "status" 数据已完成流式处理,剩余的缓冲区将被清空。原创 2021-07-01 15:26:14 · 761 阅读 · 0 评论 -
libRTMP 整体说明
一、函数结构(libRTMP)的整体的函数调用结构图如下图所示:二、基本流程使用RTMP下载一个流媒体的大致流程是这样的:RTMP_Init();//初始化结构体 InitSockets();//初始化Socket RTMP_ParseURL();//解析输入URL RTMP_SetupStream();//一些设置 fopen();//打开文件,准备写入 RTMP_Connect();//建立NetConnection RTMP_ConnectStream()//建立Net原创 2021-06-29 14:55:15 · 349 阅读 · 0 评论 -
获取MediaCodec的SPS和PPS
一、SPS和PPS文档说明二、NALU类型三、获取SPS、PPS两种方式1、同步方式ByteBuffer spsb = videoEncodec.getOutputFormat().getByteBuffer("csd-0");byte[] sps = new byte[spsb.remaining()];spsb.get(sps, 0, sps.length);ByteBuffer ppsb = videoEncodec.getOutputFormat().getByteBuffer("c原创 2021-06-29 14:40:38 · 1968 阅读 · 1 评论 -
libYUV编译成静态库以及使用
简介Google提供了一套Image的开源库libyuv(git clone https://chromium.googlesource.com/libyuv/libyuv),实现对各种yuv数据之间的转换,包括数据转换,裁剪,缩放,旋转。这里由于有墙,所以可以在github中clone这个https://github.com/bilibili/libyuv.git一、配置Android NDK编译环境1、配置NDK首先下载NDK软件包,并解压:1、从官网找到ndk的版本并下载:android-n原创 2020-06-10 18:01:58 · 2203 阅读 · 1 评论 -
初始化RTMP推流
一、RTMP直播推流流程图二、初始化RTMP流程void *callBackPush(void *data){ RtmpPush *rtmpPush = static_cast<RtmpPush *>(data); //分配空间 rtmpPush->rtmp = RTMP_Alloc(); //初始化 RTMP_Init(rtmpPush->rtmp); //设置推流URL rtmpPush->rtmp->Li原创 2020-06-06 13:15:24 · 319 阅读 · 0 评论 -
集成RTMP推流源码
一、RTMPDump源码地址和Git地址(RTMPDump版本是2.4)RTMPDump源码地址:http://rtmpdump.mplayerhq.hu/Git地址git clone git://git.ffmpeg.org/rtmpdump原创 2020-06-05 22:44:27 · 617 阅读 · 0 评论 -
YUV数据转换为图片JPG格式并且存储到本地
1、YUV数据转换为图片JPG格式并且存储到本地private void saveYUV2Bitmap() { ByteArrayOutputStream stream = null; try { YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, PREVIEW_WIDTH1, PREVIEW_HEIGHT1,nu...原创 2020-05-08 15:09:48 · 3175 阅读 · 1 评论 -
YUV 数据的存储本地并且播放YUV数据
1、把YUV数据保存到本地private String path = "/storage/sdcard0/DCIM/Picture";private static SimpleDateFormat formatPicture = new SimpleDateFormat("yyyyMMddHHmmss");public static String generatePictureFileNam...原创 2020-05-08 14:42:01 · 698 阅读 · 0 评论 -
Android MediaPlay的使用以及实现视频播放器
上篇文章中主要是介绍MediaPlay状态机流程和API的详解。同时也实现了一个简单的音频播放器,下面我们就来利用SurfaceView+MediaPlay实现一个简单的视频播放器。视频播放器的效果如下所示:`1、创建一个MyVideoPlayer .java类,这个类主要是结合MediaPlayer对视频的播放、暂停、停止、继续播放等功能处理public class MyVideoPla...原创 2020-05-04 15:52:44 · 1755 阅读 · 1 评论 -
Android MediaPlay的使用以及实现音频播放器
一、MediaPlay状态机详解(MediaPlay的生命周期)MediaPlayer状态机如下图所示1、Idle(闲置)状态与End(结束)状态MediaPlayer 对象声明周期 : 从 Idle 到 End 状态就是 MediaPlayer 整个生命周期;生命周期开始 : 进入 Idle (闲置) 状态;生命周期结束 : 进入 End (结束) 状态;Idle 和 End 状...原创 2020-05-03 17:11:06 · 3035 阅读 · 0 评论 -
FFmpeg4.2.2最新版本编译、RTMP编译
一、FFmpeg编译1、FFmpeg官网http://www.ffmpeg.org/download.html#releases2、在服务器上面用命令下载FFmpeg4.2.2最新版本wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2(该地址是)3、使用命令解压ffmpegtar -xvf ffmpeg-4.2.2.tar.b...原创 2020-01-17 17:48:07 · 3935 阅读 · 0 评论 -
Ubuntu 18.04上安装Git
一、在Ubuntu 18.04上安装Git1、通过运行以下命令确保您的系统和apt包列表完全更新apt-get update -yapt-get upgrade -y2、在Ubuntu 18.04上安装Gitapt install git3、可以使用以下命令来检查已安装的git版本git --version...原创 2020-01-17 16:10:13 · 218 阅读 · 0 评论 -
使用nginx搭建rtmp推流服务器
一、安装Nginx依赖库#安装Nginx的编译环境gccyum install gcc-c++二、下载Nginx,版本是nginx-1.15.31、创建如下目录cd /usr/local/2、输入如下连接下载nginx,复制链接地址https://github.com/nginx/nginxwget https://github.com/nginx/nginx/archiv...原创 2020-01-14 15:07:57 · 1566 阅读 · 0 评论 -
YuvImage源码分析以及使用
一、什么是YuvImageYuvImage包含了YUV数据,并且提供了一个将YUV数据压缩成Jpeg数据的方法。二、 什么时候使用相机Camera类的PreviewCallback回调中,这个接口回调的是相机的预览图片,是YUV格式的数据,这是,利用YuvImage对象的compressToJpeg方法生成Jpeg格式的图片保存在本地三、属性说明//存储的字节数private fin...原创 2020-01-11 17:26:26 · 790 阅读 · 0 评论 -
音频---播放PCM音频数据
1、代码实现public class PCMAudioPlayer { //默认配置AudioTrack-----此处是解码,要环和编码的配置对应 private static final int DEFAULT_STREAM_TYPE = AudioManager.STREAM_MUSIC;//音乐 private static final int DEFAULT_SA...原创 2019-12-24 19:29:22 · 1028 阅读 · 0 评论