- 博客(55)
- 资源 (2)
- 收藏
- 关注
原创 【Android JNI】在C/C++中调用Java
JNI名词解释jclass对应Java类的名字,jobject对应Java实例化后的对象,jfieldID对应Java类成员变量的ID,jmethodID对应Java类方法的ID。 JNI中对Java的调用,通常要先获取jclass,然后生成实例化对象jobject,根据jclass可以获取jfield&jmethodID,有了这几个元素,可以对Java类的成员变量和方法进行操作。 ...
2018-04-06 14:57:33 1035
原创 【Android JNI】从Java中调用C/C++
Android系统加载JNI Lib的方式要想在Java中调用C的函数,必然要有一定的规则去映射二者的函数名,也就是加载JNI库的方式,下面介绍这两种方式。 JNI_OnLoad当Android的VM(Virtual Machine)执行到C组件(即*so)里的System.loadLibrary()函数时, 首先会去执行C组件里的JNI_OnLoad()函数。这种方法有两个...
2018-04-04 01:45:30 849
原创 【FFmpeg 3.x API应用四】音频编码
摘要这篇文章介绍音频编码,示例程序是读取上一节生成的PCM格式的音频文件,对其进行编码输出。初始化这个必备的操作就不多说了。void AudioEncoding::init(){ avcodec_register_all();}配置编解码器CodecContext查找编码器。在视频编码那一节我们使用avcodec_find_encoder_by_n...
2018-02-13 16:58:16 800 1
原创 【FFmpeg 3.x API应用三】音频解码
摘要这篇文章介绍音频解码,示例程序是读取一个mp3格式或者aac格式的音频文件,解码输出为未压缩的pcm音频文件。初始化FFmepg和FormatContext和视频解码一样,先使用av_register_all注册所有相关组件,然后使用avformat_open_input打开指定的媒体文件,并使用avformat_find_stream_info获取媒体流相关信息,把这些格式信...
2018-02-13 15:46:53 786
原创 【FFmpeg 3.x API应用〇】基于VS2017的FFmpeg开发环境的搭建
准备工作在Windows平台上最强大的IDE非Visual Studio莫属了,虽然本人也非常喜欢并经常用Clion写一些小程序,鉴于VS的通用性还是选择使用VS来学习FFmpeg开发,可以使用免费的VS2017 Comminity社区版。 然后要下载FFmpeg Windows平台的开发工具,可以点这里下载 Dev版本。 把下载下来的incldue和lib目录放到VS工程目录下。开发...
2018-02-12 16:13:55 964
原创 【FFmpeg 3.x API应用二】视频编码
摘要这篇文章介绍使用FFmpeg实现视频解码,具体操作为读取上一节视频解码所生成的YUV420p格式视频文件,对其进行H.264格式视频编码,并将编码后的数据保存为H.264裸流文件Sample.h264。初始化FFmpeg所有操作之前必须先注册FFmpeg组件实现全局初始化。 void VideoEncoding::init(){ avcodec_regis...
2018-02-12 15:25:06 585
原创 【FFmpeg 3.x API应用一】视频解码
摘要这篇文章介绍怎么实现视频解码,具体步骤为读取Sample.mkv视频文件,从中提取视频流,然后解码为YUV图像数据,把YUV数据存储为PGM灰度图像,或者存储为YUV420p RAW格式视频。初始化FFmepg和FormatContext使用FFmpeg API第一个操作就是执行初始化函数:av_register_all注册所有相关组件,然后使用avformat_open_in...
2018-02-12 14:07:04 668
原创 C/C++语言中值传递、指针传递和引用传递
在C语言中值传递、指针传递和引用传递这三种函数参数传递方式是比较基本的知识,用的比较普遍,但不仔细分析其实质的话,时间长容易记混了。网上的资料也较多但多数都不系统,本文力求用最白话的表达和简单的示例把这三种方式描述清楚。没时间看分析的直接看简述就可以了。简述值传递就是最普通的传递方式,比如函数定义为fun(int a),在调用的地方有int x=6, 使用fun(x)就可以了。这种方式在
2018-01-06 00:09:00 17374 6
原创 C语言const限定词基本用法
它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。1. 作用:防止误操作只读内存像这种"Hello"字符串是只读的,操作其内存是不允许的。 char *str = "Hello";str[2]='X';printf("%s\n",str...
2017-11-17 11:58:14 1118
原创 【FFmpeg杂记】音频解码输出PCM格式数据分析
FFmpeg音频解码后输出的为PCM数据,PCM中的声音数据没有被压缩。 FFmpeg中音视频数据基本上都有Packed和Planar两种存储方式,对于双声道音频来说,Packed方式为两个声道的数据交错存储,交织在一起;Planar方式为两个声道分开存储,也就是平铺分开。
2017-08-02 10:25:04 6899
原创 Android 在 Java 代码中实现布局
今天看eoe的视频学习的布局,做个笔记。常见的是在res/layout/activity_xxx.xml文件中实现Android界面布局,也可以在JAVA代码中实现布局,这种方法也是比较灵活,也比较常用。可以使用 LinearLayout.addView() 往一个Layout中添加控件。下面要在一个空的布局中添加5个按钮,第一步先修改xml文件,给根布局元素 LinearLayout 添加一个 i
2016-12-19 14:45:25 1474
原创 Android Activity 之间传递数据
1. 简单的数据传递假设 Activity1 启动 Activity2 的时候给其传递数据Activity1.javaIntent intent = new Intent(Activity1.this, Activity2.class);intent.putExtra("key1", 123L); // long intent.putExtra("key2", "Hello");
2016-12-18 14:08:25 3246 1
原创 Android Studio 引用 assets 文件夹中的内容
看教程,在Eclipse+ADT环境下开发Android应用多数都把音视频之类的文件放在res/raw目录下,但是在AS环境下没法这么干,后来发现AS开发中多把这类文件放在与 res 目录同级的 assets 目录下,因为系统在编译的时候不会编译 assets 下的资源文件,这样的话就没法用R.xxx.id来索引文件了。Android系统提供了一个AssetManager工具类,可以通过getAss
2016-12-17 21:38:13 1038
原创 UDP Socket示例程序:使用fgets函数获取屏幕输入
前一篇文章的UDP Socket示例程序的Client是循环发送固定的一句话,有时候我们希望像聊天软件一样可以自己输入数据。读取屏幕字符串可以使用gets函数和fgets函数,然而因为安全方面的因素,推荐使用后者。 char *fgets(char *buf, int bufsize, FILE *stream);buf: 字符型指针,指向用来存储所得数据的地址bufsize: 整型数据,指
2016-11-27 14:28:48 748
原创 UDP Socket示例程序
通常我们涉及到的网络编程,也称为Socket编程,多数是TCP和UDP协议的编程,二者最大的区别就是:1. TCP是可靠的传输,需要三次握手建立连接再传数据,而UDP是无连接的,即使没有接收方,也可以一个劲往一个地址发数据,所以说是不可靠的传输模式。 2. TCP是基于流模式的,UDP是基于数据报模式的。因为UDP比TCP稍微简单一些,先介绍UDP编程模式。 从编程的角度来说,UDP Sock
2016-11-25 22:52:21 1133
ffmpeg-4.4.1-2021.12.23.tar.gz
2021-12-23
Xshell 6.0.0125 Personal (Free for Home/School) 2019/7
2019-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人