零蚀
函数
-
前言
函数的内容来自
#include <algorithm>
Android上的log打印
#include <android/log.h> __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",count1);
-
for_each
遍历
#include <vector> #include <android/log.h> using namespace std; /* * Class: com_example_ndkdemo_NdkUti l * Method: getString * Signature: ()Ljava/lang/String; */ void func_print(int &v){ __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",v); } extern "C" JNIEXPORT void Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.push_back(1); vc.push_back(2); vc.push_back(3); vc.push_back(4); for_each(vc.begin(),vc.end(),func_print); }
print
/com.example.ndkdemo I/zero_cpp: content:1 /com.example.ndkdemo I/zero_cpp: content:2 /com.example.ndkdemo I/zero_cpp: content:3 /com.example.ndkdemo I/zero_cpp: content:4
-
transform
对每个item进行操作
void func_print(int &v){ __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",v); } int itemIncrease(int &i){ // 每个item+1 return i+1; } extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.push_back(1); vc.push_back(2); vc.push_back(3); vc.push_back(4); transform(vc.begin(),vc.end(),vc.begin(),itemIncrease); for_each(vc.begin(),vc.end(),func_print); }
-
adjcent_find
查找相邻元素是否相等,如果有返回第一个满足条件的元素,否则返回1433101390。
extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.push_back(1); vc.push_back(2); vc.push_back(2); vc.push_back(4); vc.push_back(5); vector<int>::iterator wrapIter = adjacent_find(vc.begin(), vc.end()); __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",*wrapIter); }
-
binary_search
查找有序序列,查找到value,返回true
#include <set> #include <android/log.h> extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { // set 会自动排序 set<int> vc; vc.insert(1); vc.insert(2); vc.insert(4); vc.insert(5); bool b = binary_search(vc.begin(), vc.end(), 4); if(b){ __android_log_print(ANDROID_LOG_ERROR, "zero", "存在"); } }
-
count
查找相同元素的个数
extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.insert(1); vc.insert(2); vc.insert(4); vc.insert(5); auto counter=count(vc.begin(),vc.end(),2); __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",counter); }
-
count_if
一定范围内的元素个数
bool itemArrange(int &i){ return i >= 4; } extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.push_back(4); vc.push_back(2); vc.push_back(4); vc.push_back(5); auto count1 = count_if(vc.begin(), vc.end(),itemArrange); __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",count1); }
-
find
查找一个数,并返回查找的结果的迭代器
auto value = find(vc.begin(), vc.end(),8); __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",*value);
-
find
查找范围
bool itemArrange(int &i){ return i >= 4; } extern "C" JNIEXPORT void JNICALL Java_com_example_ndkdemo_NdkUtil_getString (JNIEnv *env, jobject obj) { vector<int> vc; vc.push_back(4); vc.push_back(2); vc.push_back(4); vc.push_back(5); auto value = find_if(vc.begin(), vc.end(),itemArrange); __android_log_print(ANDROID_LOG_INFO, "zero_cpp","content:%d",*value); }
-
merge
合并两个有序的序列
vector vA; vector bB; vector vC; vC.resize(vA.size()+vB.size()); merge(vA.begin(),vA.end(),vb.begin(),vb.end(),vc)
音视频简介
-
图解
视频格式:
-
MPEFG2-PS存储具有固定时长的,它可以从任意一段开始解码。一旦出现损坏,文件则无法解码。一般只用于视频文件。
-
MPEFG2-TS支持任意一段开始解码,用于直播。不包含文件头,数据大小是固定的,每一段是188个字节。
-
FLV 可以将视频轻松加载入Flash,它有一个文件头(文件信息),后面有很多tag,每个tag都含有一个video,audio和script(音频流,视频流,脚本流),常用于网页视频。
视频编码:
- 视屏编码是将视频的像素数据(RGB,YUV,……)进行压缩,成为视频码流,从而降低视频的数据量
音频编码:
- 音频采样数据(PCM……)压缩成音频码流,从而减小音频的数据量。
音频格式:
- ACC,高级音频编码格式,相对于mp3音质更好,体积更小,但是acc是有损的压缩方式。
-
ffmpeg
-
简介
业内一种解决音视频流的主流解决方案(框架)。
这里注意需要选择4.2.2的版本,非正式的窜爱问题。
-
ffmpeg命令
执行文件位于下载的static ffmpeg的bin目录下,
// 将1.mov 转为 text.mp4的文件 ➜ bin ./ffmpeg -i /Users/baicha/Desktop/1.mov -b:V 640k /Users/baicha/Desktop/test.mp4
这里的640k就是码率,码率相当于每秒的视频容量,也就是码率越高,视屏的清晰度也就越高,视频的体积也就也大。
常用命令:
参数 说明 -h 帮助 -i filename 输入文件 -t duration 设置处理时间(HH:MM:SS) -ss position 设置起始时间(HH:MM:SS) -b:v bitrate 设置视频码率 -b:a bitrate 设置音频码率 -r fps 设置帧率 -s wxh 设置帧大小,格式为WxH -c:v codec 设置视频编码器 -c:a codec 设置音频编码器 -ar frep 设置音频采样率 案例:裁剪视频
将视频呢裁剪为5秒(从0秒开始)
./ffmpeg -i /Users/baicha/Desktop/1.mov -ss 0 -t 5 /Users/baicha/Desktop/test_5s.mp4
ffplay播放命令
./ffplay /Users/baicha/Desktop/1.mov
内容解释
-
比特率
每秒传送的比特数(bit),单位为bps,视频领域中比特率常被翻译成码率。比特率是将声音和视频的通过模拟转化为数字格式的采样率,
-
码流 / 码率
是指视频文件在单位时间内使用的数据流量,也叫码率或码流率。通俗一点相当于取样率,是我们视频编码,控制画质的重要部分,一般的使用单位为kb/s or Mb/s。同分辨率下,一般码流越大,压缩比越小,画质就越高,反之画质越低,,同一个视频文件音频和视频的比特率并不是一样的。而我们所说的一个视频文件码流率大小,一般是指视频文件中音频及视频信息码流率的总和。
🔗 前言
🔗 Android NDK列表
🔗 NO.1 Android NDK 前言
🔗 NO.2 Android CMake
🔗 NO.3 JNI调用java成员
🔗 NO.5 FFmpeg 4.2.2 集成
🔗 NO.6 FFmpeg 4.2视频转码
🔗 NO.7 SDL2.0.12 播放本地YUV视频
🔗 NO.8 音频处理
🔗 NO.9 播放音频
🔗 NO.10 FFmpeg添加水印