自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (7)
  • 收藏
  • 关注

原创 WebRTC中音频能量计算

1.WebRTC中音频能量计算WebRTC中实现获取音频能量计算的方法是:获取音频数据最大的振幅(即绝对值最大)(范围是0-32767),然后再除以1000,得到0-32之间的数值。从数组中获取相应索引所对应的能量level等级。我们看下webRTC中level_indicator.cc中对音频level判断的处理。namespace webrtc {namespace voe {// Number of bars on the indicator.// Note that the numb

2020-12-08 19:10:59 3964

原创 单例模式

单例模式:#include <iostream>using namespace std;class Singleton{public: ~Singleton() { cout << "~Singleton虚构函数" << endl; } Singleton(const Singleton&) = delete;//禁止使用该函数,防止使用错误 Singleton& operator=(const Singleton&) = d

2020-11-07 14:31:24 256

原创 avformat_seek_file及其flag含义

我们从ijk中seek的处理流程来看ffmpeg的这个问题int ffp_seek_to_l(FFPlayer *ffp, long msec){ assert(ffp); VideoState *is = ffp->is; int64_t start_time = 0; int64_t seek_pos = milliseconds_to_fftime(msec); int64_t duration = milliseconds_to_fftime(ffp

2020-08-20 15:26:57 4389

原创 WebRTC-音频抗75%丢包实现

加密了。。。。。。

2020-08-14 14:01:13 891 1

原创 简单的二分屏特效

分屏特效中的两屏特效。分成上下两层,uv坐标的y轴在 0.0 ~ 0.5 和 0.5 ~ 1.0 的时候,均填充 0.25 ~ 0.75 区间的纹理图像// 仿抖音两屏特效precision highp float;uniform sampler2D inputImageTexture;varying highp vec2 textureCoordinate;void main() { // 纹理坐标 vec2 uv = textureCoordinate.xy; flo

2020-08-14 14:00:07 228

原创 ijkplayer-添加播放截图功能

应用播放的时候需要截图,可以在上层使用TexturView来使用截图,不过太具有局限性呢,还是在底层处理比较好。那么先分析下可以在哪里加截图呢?看到网上很多做的都不能支持硬解截图,这样肯定是不行的。所以我们可以选择在video_image_display2中来做截屏处理。添加shot_screen.h#ifndef _SHOT_SCREEN_H#define _SHOT_SCREEN_H#include <jni.h>#include "ff_ffplay_def.h"#i.

2020-08-14 13:55:44 935 1

原创 YUV通过MediaCodec编码H264

Camear_MainActivity.java,主界面类import android.app.Activity;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera.Parameters;import android.hardware.Camera.PreviewCallback;import android.media.MediaCodecInf

2020-08-14 10:30:21 935

原创 WebRTC-nack机制详解

1.NACK的含义丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。WebRTC中支持音频和视频的NACK重传。我们这里只分析nack机制,不分析jitterbuffer或者neteq的更多实现。2.WebRTC中NACK请求发送的条件这里以视频为例。下面是webrtc中接收端触发nack的条件,我们看下nack_modul

2020-08-12 14:01:03 3651

原创 ijkplayer-旋转角度实现

一app开发,火急火燎的拿来一个视频,说录制的视频播放角度都不正常。拿过来一看,确实,角度是歪的,用系统的mediaplayer一试,是正常的。把视频放到ffmpeg中,可以看到视频metadata下视频旋转角度是90度。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k794Sepj-1597211746055)(https://note.youdao.com/yws/api/personal/file/E49561CBC4B44D7584D7F229A786E104?.

2020-08-12 13:56:05 2083

原创 ijlplayer-花屏问题分析

今天遇到个应用在S2机器上拖动播放随机花屏的问题,其他机子都没有。那么如何分析花屏问题呢,我这里主要分析点播和本地文件播放导致的花屏,并不涉及直播花屏分析?分析花屏问题无外乎从解复用->解码->显示这三步开始排查。(好吧,这个花屏问题真的让人蛋疼啊)1.排查是否显示问题先从显示开始排查,可以直接把解码后的数据编码成图片然后取出来,如果取出来的图片是花屏的,那么就继续往解码以及解复用开始排查。如果取出来的图片不是花屏的,那么就可以判断为显示导致的花屏。先看下在jik中对解码后的帧编码图.

2020-08-12 13:55:00 1316

原创 WebRTC-集成qsv硬解码实现

1.Window下QSV硬解码配置在libavcodec/codec_list.c下添加 &ff_h264_qsv_decoder,在ffmpeg_generate.gni下加入 "libavcodec/h264idct.c", "libavcodec/h264qpel.c", "libavcodec/startcode.c", "libavcodec/h264_mp4toannexb_bsf.c", ] } ffmpeg_c_sourc

2020-08-10 20:34:20 1334 2

原创 WebRTC-Android硬编码流程详解

1.硬编解码的一些问题1.1.方块效应在我们视频电话时,快速移动摄像头时,会发现画面变出现很多方块。这就是方块效应。无论是要发送的TCP数据包,还是要编码的图像,都会出现在短时间内出现较大的数据量。TCP面对尖峰,可以选择不为所动,但如果视频编码也对尖峰不为所动,那图像质量就会大打折扣了。因为如果有几帧数据量特别大,但我们仍要把码率控制在原来的水平,那么就会损失比较多的图像信息,图像就会失真。通常的表现是画面出现很多小方块,看上去像是打了马赛克一样,也就是方块效应。1.2.M2机器有横线问题处理1

2020-06-01 14:04:44 2625

原创 HLS playlist典型示例

0 引言本文主要是对apple官网上的echnical Note TN2288-Example Playlist Files for use with HTTP Live Streaming一文的整理,加上rfc8216 section 8的部分内容。本文的目标在于整理不同类型的HLSm3u8格式,对其表征的多媒体数据做必要说明。希望读者读完本文能够基本知道目前HLS所支持的m3u8格式。至...

2020-02-17 10:05:18 2482

原创 HLS综述

1.HLS背景及初衷HLS是由苹果公司发起的流媒体网络传输协议,可参考rfc8261 HTTP Live Streaming。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U(...

2020-02-17 10:00:18 421

原创 利用nginx-rtmp搭建视频点播、直播、HLS服务器

1.配置nginx服务器ubuntu搭建推流服务器Nginx+rtmp利用nginx搭建RTMP视频点播、直播、HLS服务器配置好nginx服务器后,下面开始使用服务器。2.nginx服务器的使用关于服务器的所有改动和配置都在这个路径下了。服务器文件地址在:usr/local/nginx/关于服务器的一些命令./nginx //启动服务器./nginx -s quit //...

2019-12-10 08:56:33 304

原创 ijkplayer-hook协议实现分析

本文主要分析ijk中hook协议的实现流程和具体实现来进行分析。1.ijkhttphook的使用先看一下ijk中ijkhttphook的使用:断网自动重新连接,url前接上ijkhttphook:,如String url = "ijkhttphook:http://videocdn.eebbk.net/01cc6382b142217dad89516a19a4b299.mp4";然后设置...

2019-05-05 14:10:56 2385

原创 android 蓝牙控制继电器——单片机控制端

一直没怎么写博客,贴一个比较简单小例子(以前做的 android 通过wifi实现万能遥控器 中拆分出来的小案例):android客户端通过蓝牙协议,控制继电器(想控制其他玩意,自己设计)图示:今晚,先说硬件电路以及单片机部分。最小单片机系统板以及外围电路,这个电路非常简单(注意继电器的接法),不做过多介绍。单片机端程序(蓝牙模块做串口使用): /**...

2019-05-05 11:13:47 4364

原创 android蓝牙控制继电器——手机客户端的实现

手机客户端的实现通过手机自身所带的蓝牙实现连接蓝牙模块,从而实现通过单片机控制继电器,实现弱电控制强电(由之前项目拆分出来用来演示的小demo)首先要实现开启蓝牙设备,以及设置可见时间{BluetoothAdapter adapter =BluetoothAdapter.getDefaultAdapter();if(!adapter.isEnabled()){...

2019-05-05 11:13:12 8819 1

原创 jni开发-GetMethodID与CallObjectMethod的坑

在java层中声明一个方法用于创建一个audiotrack,在C层中调用这个方法并获取audiotrack对象。先看下面的代码:SuPlayer.javapublic AudioTrack createAudioTrack(int sampleRateInHz, int nb_channels) { //固定格式的音频码流 int audioFormat = AudioForm...

2019-05-05 11:09:30 9198

原创 jni开发-CmakeList详解

下面是项目中的so的CmakeList配置和注意事项:# For more information about using CMake with Android Studio, read the# documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum versio...

2019-05-05 11:04:04 1035

原创 jni开发-java调用c函数,c调用java函数实现

1.配置下载ndk,cmake即可。2.实现MainActivity的实现public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on application startup. static { System.loadLi...

2019-05-05 11:01:46 343

原创 Android-HandlerThread详解

HandlerThread详解抛砖引玉在说HandlerThread之前,先看下这个。mHandler.removeCallbacksAndMessages(null);进去这个函数看下 public final void removeCallbacksAndMessages(Object token) { mQueue.removeCallbacksAndMess...

2019-04-30 10:05:46 323

原创 AS打开卡住、一直加载的问题

在github上下载一个开源项目想学习学习,是不是会发现偶尔打开的时候会卡住呢?AS一直在加载,但是就是打不来项目。 这个是由于下载下来的项目gradle版本号与本地的不匹配,AS需要重新下载gradle,由于国内又被墙了,就一直在那加载。那如何处理呢? 方法1: 下载很多版本的gradle,放在本地,当打开的时候选择对应的。方法2: 修改下载下来项目的gradle,那么我们要改哪里呢? 修改g...

2019-04-30 10:04:43 2012

原创 ContentResolver.query详解

1.查询手机的联系人 public void getContacts() { ContentResolver contentResolver = this.getContentResolver(); Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts...

2019-04-30 10:04:06 14825

原创 Android_WakeLock使用

1.前言与WakeLock简介1.1.前言一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至...

2019-04-30 10:03:02 2226 1

原创 opengles系列-绘制三角形

1.创建render类** * 绘制三角形 * Created by hxk on 2018/10/10. */public class TriangleRenderer implements GLSurfaceView.Renderer { private final Context context; private final FloatBuffer vertexD...

2019-04-30 09:56:39 760

原创 android7.0如何自定义添加系统服务

由于项目需要,我这边需要在framework层增加一个语音唤醒服务来实现拉通hal层以及android应用层,实现语音黑屏唤醒以及亮屏唤醒的功能,这里我们只看在android7.0和9.0上是怎么增加一个自定义系统服务,其实对着葫芦画瓢就可以了。下面主要说基于android7.0的添加系统服务,9.0的编译方式改了,改下bp文件就可以了,没什么大的区别,这里删了些复杂的接口,只留了几个比较简单的...

2019-04-30 09:25:28 1219

原创 ffmpeg系列-协议操作解析-AVIOContext,URLContext,URLProtocol,HTTPContext

1.协议操作对象结构协议操作对象结构:协议操作的顶层结构是AVIOContext,这个对象实现了带缓冲的读写操作;FFMPEG的输入对象AVFormatContext的pb字段指向一个AVIOContext。AVIOContext的opaque实际指向一个URLContext对象,这个对象封装了协议对象及协议操作对象,其中prot指向具体的协议操作对象(如URLProtocol),priv...

2019-04-28 08:50:40 1635

原创 ffmpeg系列-编译

1.ubuntu下编译下载ffmpeg源码 git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg如果只是正常编译的话./configure --disable-x86asmmake如果本地编译安装了openssl和x264库的话//编译支持https--264编码--支持视频水印./configure --disable-x8...

2019-04-28 08:47:21 404

原创 FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){ FILE *pFile; char szFilena...

2019-04-28 08:46:14 895 2

原创 ijkplayer-丢帧策略深入分析

1.测试拿过来个视频,发现用ijk播放器与系统播放器(mediaplayer)播放感觉不一样,用ijk播放感觉播放页面卡顿一点,没有系统播放器那么流畅。下面看一下这个问题,这个问题的原因其实很简单,由于我丢帧值设置的是5,改成1就可以感觉2个播放器在体验上感觉差不多了。(丢5帧人眼就可以看出来差别了!)。2.在高通660的机器上播放一个4k(30fps)视频,但是无法正常播放,实际一秒的...

2019-04-24 11:29:59 3155 2

原创 ffmpeg系列-解复用流程解析

从我的笔记ffmpeg-mov格式与分离器实现详解一文中,我们已经知道了mov的demuxer相关实现。本文主要来分析demuxer的流程。1.结构流程图从上面的结构图中我们可以看到AVFormatContext的iformat指向AVInputFormat。2.实现流程图3.avformat_open_input函数作用首先看函数的声明int avformat_open_input...

2019-04-24 11:26:52 2178

原创 ijkplayer-音视频变速播放实现

本文主要分析变速播放框架实现细节,不分析sonic以及soundtouch变速算法。在我的sonic变速变调原理一文中会详细讲解基于基音周期来实现变速变调的原理1.变速入口分析从jni层的_setPropertyFloat函数static void ijkMediaPlayer_setPropertyFloat(JNIEnv *env, jobject thiz, jint id, jflo...

2019-04-24 08:45:14 4062 3

原创 ndk中杀线程的办法

不提倡强制杀死线程,当我们的一个线程获取了一个锁,正在访问某个共享方法的时候,还没来得及解锁就被干掉了,那这个锁就永远不会被解掉了,于是所有依赖这个锁的其它线程可能就锁死了。android的ndk中没有提供类似linux的pthread_cancel函数来杀死线程。#include <jni.h>#include <string>#include<pthrea...

2019-04-23 16:27:07 642

原创 X264_最简单的视频编码实现(YUV420编码H264)

下面这个例子是X264项目中的example.c文件实现编码的实现。只是加了一些注释方便以后的理解。#ifdef _WIN32#include <io.h> /* _setmode() */#include <fcntl.h> /* _O_BINARY */#endif#include <stdint.h>#include &lt...

2019-04-23 16:23:05 1309

原创 基于librtmp的推流实现

1.推流配置好rtmpdump库后,我们可以先用命令行来推流看下效果2.流程图使用librtmp发布RTMP流的可以使用两种API:RTMP_SendPacket()和RTMP_Write()。使用RTMP_SendPacket()发布流的时候的函数执行流程图如下图所示。流程图中关键函数的作用如下所列:InitSockets():初始化SocketRTMP_Alloc():为结构...

2019-04-23 15:31:52 13556 1

原创 nginx本地流媒体服务器搭建

1.配置nginx服务器可以参考配置:ubuntu搭建推流服务器Nginx+rtmp利用nginx搭建RTMP视频点播、直播、HLS服务器配置好nginx服务器后,下面开始使用服务器。2.nginx服务器的使用关于服务器的所有改动和配置都在这个路径下了。服务器文件地址在:usr/local/nginx/关于服务器的一些命令./nginx //启动服务器./nginx -s...

2019-04-23 15:30:42 1132

原创 ffmpeg系列-视频旋转角度实现

一app开发,火急火燎的拿来一个视频,说录制的视频播放角度都不正常。拿过来一看,确实,角度是歪的,用系统的mediaplayer一试,是正常的。把视频放到ffmpeg中,可以看到视频metadata下视频旋转角度是90度。ijk中有提供视频角度旋转的接口: //开启自动旋转,这里旋转的是视频ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATE...

2019-04-23 15:25:11 4657

原创 ffmpeg系列-解决ffmpeg获取aac音频文件duration不准

本文原创自ABCDEHXK——转载请加以说明 这个问题是这样产生的,一同事反应会随机出现ijk获取到的aac文件的duration不准,发来一看,确实不准,在AE或者系统mediaplayer中得到的都是8.4秒(准确时间是MtkAACExtractor: ADTS: duration = 8448000 us),ijk得到的是9.3秒,在播放的时候,在8秒的时候流就结束了,放到编译的ff...

2019-04-23 15:23:13 8678 2

原创 ubuntu下vlc-android编译

vlc-android编译感觉挺麻烦的,记一下。我的编译配置: ubuntu16.04LTS + android-ndk-r14b + android-sdk-r24.4.1-linux1.安装编译vlc需要的工具sudo apt-get install automake ant autopoint cmake build-essential libtool \ patch...

2018-06-17 12:39:05 1040

数字音频技术第六版

数字音频技术第六版,本书是数字音频工程方面的权威指南,有肯.c.波尔曼先生编写

2018-10-11

opengles应用开发实践指南android卷

本书的主要内容: 在本书第一部分,会学习如何创建一个简单的空气曲棍球游戏,包括触控、纹理和基本原理。这个项目会教你如何成功地初始化OpenGL并将数据发送到屏幕上,以及如何使用基本的向量和矩阵数学创建三维世界。你也会学到Android的许多特定细节,比如在Dalvik虚拟机和本地环境之间编码数据(marshal data)以及如何在主线程和渲染线程间安全地传送数据。 在本书第二部分,你就可以在第一部分学习到的知识的基础上开始搭建三维世界中的效果,比如光照和地形渲染,接下来还会学习如何创建可以运行在Android主屏幕(home screen)上的动态壁纸。 本书的读者对象: 如果对在Android上开发更高级的图形程序感兴趣,本书就是为你所写的。本书假定你有一些编程经验,包括Java和Android的经验。

2018-10-11

阿里巴巴前端笔试题1

阿里巴巴前端笔试题1

2016-05-06

腾讯研发笔试题与详解三套

腾讯公司研发笔试题与详解三套腾讯公司研发笔试题与详解三套腾讯公司研发笔试题与详解三套腾讯公司研发笔试题与详解三套腾讯公司研发笔试题与详解三套腾讯公司研发笔试题与详解三套

2016-05-06

android jni操作指南详解

android jni操作指南与 项目实战

2016-05-06

android网络开发与应用实战详解源码

《android网络开发与应用实战详解》一书源代码

2014-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除