自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 FFmpeg 探测流程分析

FFmpeg中,流的探测是一个比较耗时的过程,那他的具体流程是怎样呢,本文进行简单梳理。并对流探测的两个重要函数:avformat_open_input和avformat_find_stream_info进行分析。

2020-04-12 20:10:13 2110 1

原创 Live555 RTSP播放分析(二)--RTSPClient及MediaSession

以testRTSPClient.cpp测试程序来分析RTSP播放流程,其中最主要的流程在RTSPClient及MediaSession中。

2020-03-21 17:41:10 2014

原创 Live555 RTSP播放分析(一)--基本模块介绍

RTSPClient处于Live555 liveMedia模块,这部分是Live555流媒体的核心部分,主要是实现了各种流媒体交互流程。我们先了解一些重要的类,以帮助后面分析代码。

2020-03-21 11:29:04 3820

原创 Live555 组播及RTSPClient IPv6改造

扩展Live555 GroupSock及liveMedia,支持rtsp、组播 IPv6播放

2020-03-12 09:49:10 1530 1

原创 Android OpenGL ES视频渲染(二)EGL+OpenGL

以YUV420P数据为例,介绍EGL+OpenGL渲染方式及使用方法

2020-03-07 17:47:31 1348 1

原创 Android OpenGL ES视频渲染(一)GLSurfaceView

本文将使用GLSurfaceView+MediaPlayer实现播放,并通过OpenGL进行简单的滤镜处理,以此来说明如何使用GLSurfaceView。

2020-03-04 22:20:28 3044

原创 Android 播放音频(PCM)的两种方法--AudioTrack/OpenSL ES使用简介

本文主要介绍Android上可以进行音频(PCM)播放的两个组件–AudioTrack/OpenSL ES的简单使用方法。对一个音频文件(如MP3文件),如何使用FFmpeg进行解码获取到PCM,之前的文章已经有相应的说明:https://blog.csdn.net/myvest/article/details/89254452。那么解码后或者mic采集的PCM数据,是如何播放的呢,首先一般...

2020-02-18 17:20:40 5863 1

原创 初识IPv6 有状态、无状态地址相关协议

本文主要介绍IPv6全局单播地址(Global Address)的获取方式及其相关的协议,DHCPv6协议和RA、RS报文(邻居发现协议)。全局单播地址类型IPv6地址中分为本地链路地址(Link-Local Address)与全局单播地址(Global Address)。本地链路地址根据mac等信息通过指定算法得到,不需要从路由器获取。以fe80:开头全局单播地址从需要和路由器进行协商获...

2019-11-30 17:51:19 4658

原创 FFmpeg libavfilter使用方法及音视频倍速

本文介绍FFmpeg中libavfilter的使用方法,并以其实现音视频倍速功能。

2019-10-26 18:41:50 5378 1

原创 wireshark TCP常见异常报文分析

流媒体播放中,常常需要借助wireshark从TCP层面对交互过程进行分析,本文记录一些常见的TCP异常报文及其分析。乱序与丢包1、[TCP Previous segment not captured][TCP Previous segment not captured]报文指的是在TCP发送端传输过程中,该Seq前的报文缺失了。一般在网络拥塞的情况下,造成TCP报文乱序、丢包时,会出现该标...

2019-10-19 18:57:27 14519 2

原创 Android 4.4 安装INSTALL_FAILED_SHARED_USER_INCOMPATIBLE后原APK无法使用问题分析

背景:记录最近在项目中遇到的一个问题,先说现象:/system/app/下原本有一个可以正常使用的APK,APK本想下发自升级,APK存在问题无法安装成功,但奇怪的是,原本/system/app/下正常的APK也无法使用了。从pm命令及ps命令都看到/system/app/下的APK没有运行。调试:1、把问题APK拿到后测试,pm installI -r xxx.apk 手动安装,返回...

2019-09-26 10:41:21 9069 1

原创 Socket IPV6相关结构体

背景:随着网络时代的发展,IPV6的需求也已经渐渐实施,播放器业务中,也需要扩展IPV6支持。涉及到IPV6的修改为播放器中流媒体交部分,常用的流媒体框架FFmpeg是支持IPV6,但需要打开选项支持,而LIVE555则现在还不支持IPV6。流媒体交互IPV6的修改,也即是底层Socket对IPV6的支持,主要是IPV4及IPV6地址结构存在差异,所以先了解Socket中IPV6相关的一些结...

2019-09-15 20:15:10 2886

原创 Android MediaExtractor + MediaCodec构建简单播放器

介绍Android系统中提供的两个播放器模块MediaExtractor 和MediaCodec的简单使用,利用他们来完成一个简易的播放器。其中MediaExtractor完成解复用工作,而MediaCodec则音视频解码工作。

2019-09-14 22:09:31 3680 1

原创 媒体播放常用调试工具

码流分析也是播放器开发中必备方法,可以帮助我们查看码流信息,确认码流是否正常,对问题分析起到事半功倍的作用。介绍些常用的分析工具及方法。

2019-08-16 13:12:59 1926

原创 Android 实现live555 RTSP代理播放器

利用live555 实现RTSP拉流客户端,但想看下播放效果,所以结合Android MediaPlayer实现播放。live555 实现RTSP交互及拉流过程,然后UDP,将数据传递给MediaPlayer播放。也就是相当于live555作为RTSP播放器的代理端。

2019-08-11 13:40:06 3001

原创 Android native层使用SoftwareRenderer及AudioTrack播放

介绍SoftwareRenderer显示YUV;audioTrack播放PCM流程

2019-08-04 19:35:17 1896 3

原创 音视频同步原理及实现

本文主要描述音视频同步原理,及常见的音视频同步方案,并以代码示例,展示如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放。

2019-07-26 20:35:20 36549 21

原创 Android live555组播拉流客户端

组播拉流客户端,支持RTP及UDP裸流,介绍了live555在Android上的移植及简单实用方法。

2019-07-20 21:30:02 1964

原创 Android framework 增加DNS检测功能

背景:在Android framework中增加DNS检测功能,在网络连接后,检测DNS是否有效,并将有效的DNS尽量置前。

2019-07-06 15:14:34 1583

原创 Android framework 蓝牙开机连接慢与开机广播

问题:项目需要使用蓝牙外接设备,但每次重启开机到launcher显示后,蓝牙设备均需要等待20秒以上才能操作,体验非常差。分析:蓝牙的回连是由framework层实现。BluetoothManagerService相关代码如下,可以看到,自动打开蓝牙的流程是接收开机广播实现的。 private final BroadcastReceiver mReceiver = new Broad...

2019-07-02 16:42:01 920

原创 FFmpeg 从seek闪退问题分析ts时长duration计算方法

背景HTTP点播seek闪退分析FFmpeg解析ts duration流程分析解决思路背景FFmpeg是非常优秀的开源框架,在使用其进行二次开发及适配的过程中,难免会遇到各种各样的问题。这次要分析的问题是基于FFmpeg的播放器在HTTP点播seek的时候,出现闪退,从而引申出FFmpeg中ts流duration计算方法的分析。HTTP点播seek闪退分析从日志看,发现seek的位置是...

2019-06-16 16:49:20 3081

原创 Android 开发常用方法及命令

1、开发时常用调试命令addr2linegdb配合core dump调试打印堆栈2、系统层面的调试命令dumpsysbugreportcat命令看节点信息top和free查看cpu和内存情况3、APK常用调试命令am命令dumpsys 命令pm命令其他常用命令1、开发时常用调试命令addr2line使用方法:addr2line -e xxx address 可以addr2line --he...

2019-06-11 09:39:47 1061

原创 FFmpeg 直播黑屏问题分析解决

背景FFmpeg是非常优秀的开源框架,在使用其进行二次开发及适配的过程中,难免会遇到各种各样的问题。这次记录的是基于FFmpeg开发的播放器中,直播黑屏问题分析思路及解决方法。问题如下:在直播节目的使用过程中,某些播放源起播后画面黑屏,但却有声音。...

2019-06-10 19:42:35 5092

原创 HLS简介

1.协议简介HLS全称为HTTP Live Streaming,是苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个媒体流分成一个个小的基于HTTP的媒体分片来下载,每次只下载一些分片。在开始一个流媒体会话时,客户端会下载一个包含媒体分片的索引文件,即extended M3U playlist文件(m3u8),用于寻找可用的媒体分片。HLS中,索引文件可以嵌套,一般只有一级索...

2019-06-05 11:58:12 29555 1

原创 Android FFmpeg YUV转RGB及使用SurfaceView+ANativeWindow显示

1、FFmpeg像素格式转换FFmpeg像素转换一般使用libswscale来进行接口说明1、 获取上下文SwsContext一般我们使用下面两个函数来获取,sws_getCachedContext和sws_getContext略有不同的是,如果输入和输出的宽/高/格式不变,则会返回之前创建的context。参数说明:前三个参数分变为原始宽、高、格式(如RGBA8888,YUV420等...

2019-05-31 20:19:02 2130

原创 FFmpeg 音频重采样的两种方法libavcodec和libswresample

1、libavcodec2、libswresample

2019-04-23 19:03:35 6662 5

原创 FFmpeg 封装、解封装及解码的流程简介

1、封装2、解封装3、解码4、例子1.解封装解码流程5、例子2.转封装流程

2019-04-13 19:10:16 3294 1

转载 Wireshark网络抓包分析——工具

转自https://www.cnblogs.com/strick/p/6344486.html一、基本信息统计工具1)捕获文件属性(Summary)File:了解抓包文件的各种属性,例如抓包文件的名称、路径、文件所含数据包的规模等信息Time:获悉抓包的开始、结束和持续时间Capture:抓包文件由哪块网卡生成、OS版本、Wireshark版本等信息Display:剩下...

2018-10-19 08:51:19 2016 1

原创 libcurl 使用方法简介

libcurl 使用方法简介背景简介使用方法1、easy interface使用方法2、multi interface使用方法背景最近想做一个简单的HLS拉流程序,HTTP的下载部分觉得采用libcurl来进行比较合适及方便,所以先介绍libcurl的基本用法,然后使用libcurl完成一个简单的下载小程序。简介libcurl是一个跨平台的开源网络协议库,支持http, https, rt...

2018-09-30 10:09:18 41551 3

原创 Android MediaPlayer中的RTSP(三):相关修改总结

背景:前面两章节简单介绍了RTSP协议,FFmpeg中RTSP的简单交互流程。之前提到过,实际应用中,对于不同项目,对FFmpeg需要进行完善,以适应各种特殊情况。之前列的情况如下: 1、SETUP阶段的协议选择:载流协议是UDP还是TCP,是否使用RTP承载,尝试一种载流协议不支持后的切换流程 2、重定向的完善:正常来说,一般在SETUP阶段后,就不会再有重定向了,因为这样需要重新...

2018-08-08 17:50:58 2136 1

原创 Android MediaPlayer中的RTSP(二):FFmpeg中RTSP代码流程分析

背景:RTSP在不同FFmpeg版本中可能略有不同,该文档主要介绍FFmpeg RTSP主要的相关代码流程,而涉及FFmpeg的一些结构并不会详细说明,这部分的内容,有兴趣可以可以参考雷霄骅大神的博客https://my.csdn.net/leixiaohua1020。关键结构ff_rtsp_demuxer :AVInputFormat该结构被称为解复用模块,是音视频文件的一个解封...

2018-07-06 17:42:15 4942 3

原创 Android MediaPlayer中的RTSP(一):RTSP简介

背景:最近的项目中,遇到了使用Android的mediaplyer来进行RTSP播放的场景。对于RTSP这种流媒体协议,Android原生的播放器支持的其实并不是很好,所以有许多需要修改的地方,在此做一下记录,并作为一个了解RTSP协议的契机。 这次主要是简单介绍RTSP协议及其在mediaplyer中的层级,后面会记录下项目中遇到的情况及修改。RTSP播放器架构这里介绍下media...

2018-06-10 17:25:52 17406 4

转载 FFmpeg hls.c分析

转载自https://blog.csdn.net/wzw88486969/article/details/78821068avformat_open_input(http.xxx.m3u8) init_input(s, filename, &tmp)) //提供的文件名信息不能探测格式 av_probe_input_format2...

2018-05-09 14:27:01 2421

原创 Android sdk上移植FFmpeg

背景: 最近想把FFmpeg移植到Android SDK上,以便在设备上调试或者自己写写小代码,基于的版本是Android 4.4。1、下载FFmpeg源码这一步没什么好说的,贴上官网路径http://ffmpeg.org/download.html,从这里可以下载到最新的FFmpeg。2、在Android平台上编译将其移到Android源码目录下。FFmpeg的编译分3步骤: ...

2018-04-24 11:50:58 584

原创 Android 中全局键的处理GlobalKeyManager

如何使用快捷键跳转到指定的页面中,在android中的GlobalKeyManager中可以进行相关处理。frameworks\base\core\res\res\xml\Global_keys.xml指定了按键和对应的ComponentName 如下 <global_keys version="1"> <!-- Example format: keyCode = keycode to h

2017-10-09 11:21:02 2515

原创 播放器:记录对gzip解压支持的修改

问题背景: 有些服务器,播放HLS时,http请求返回的编码类型是gzip,导致终端无法播放,m3u8文件被压缩,需要进行解压操作。1、使用curl下载使用curl的话则十分简单,可以在下载之前设置参数,curl会自己进行解压。参考源文档的解释,参数enc可以设置“gzip”或者“”即可(“”则支持更多的压缩方式)。CURLcode curl_easy_setopt(CURL *handle, C

2017-08-31 15:13:04 503

原创 Android wpa_cli 调试方法

背景:今天想玩一玩wpa_cli,以了解wpa_supplicant的一些流程,结果却一直连接不上。。。记录一下如何使用wpa_cli来进行wifi调试。1、启动WLAN(1)加载驱动 一般来说,android系统里面,打开wifi的时候会加载驱动,关闭则会卸载wifi驱动。手动调试的时候,先调用insmod命令加载指定的wifi驱动。 再调用iwconfig可以看到驱动是否加载成功,如下,可以

2017-07-21 16:56:56 5673

原创 Android wifi-framework WifiMonitor和WifiNative学习

WifiStateMachine作为wifi-framework层最核心的类,其他很多wifi的类都是为其服务的,接下来记录下对WifiNative和WifiMonitor这两个类的学习。 两者都是WifiStateMachine在构造函数中创建的,是WifiStateMachine中重要的成员。1、WifiNativeWifiNative是一个接口类,主要是提供一些native方法用于wifi-

2017-07-20 19:38:15 1964

原创 Android wifi-framework StateMachine和AsyncChannel 学习

android中,wifi的核心是WPAS(wpa_supplicant),它管理和控制Android平台中的Wi-Fi功能。在整个wifi模块中,其更像是一个一个服务端,实现了连接,认证等工作流程。 而客户端有wpa_cli,和wpa_supplicant之间的通信依靠wpa ctrl接口来实现,而在wifi的framework层,其实主要工作就是向下实现wpa_cli的功能和wpa_suppl

2017-07-20 14:25:50 787

原创 Android 获取调用接口的包名

在framework层,有时候,需要获取调用接口的包名,来针对apk做一些不同的处理逻辑。今天遇到通过PID来获取包名,结果不对,写这段代码的同事说这个他测试是正常的。 让我们来看下这段代码 private String getCallerProcessName() { if (null == mContext) { return "";

2017-06-27 18:54:34 6545 3

空空如也

空空如也

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

TA关注的人

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