Android
文章平均质量分 58
LiuYinChina
多年 VC++ 经验,擅长模板、调试
展开
-
fd to filename
char path[256] = { 0 }; char name[256] = { 0 }; snprintf(path, sizeof(path)-1, "/proc/%d/fd/%d", getpid(), fd); memset(name, 0, sizeof(name)); readlink(path, name, 255); ALOGD原创 2015-08-12 19:53:28 · 1092 阅读 · 0 评论 -
dlna测试遇到的第二个问题
问题背景:一个将近300M的adts音频文件,通过服务器共享给手机终端,手机终端使用dlna应用进行播放,发现缓冲了半个小时还不能播放。另外不能播放对应的服务器采用的是Content-Length这种编码格式,而采样chunked这种编码方式的服务器却能够正常播放。打log发现,在MediaExtractor中构造AACExtractor时一直没有返回,所以直接到AACEx转载 2014-12-18 11:25:11 · 1625 阅读 · 0 评论 -
视频文件NAL单元不完整导致不能播放
遇到两类这样的情况:1:一些从网上down下来的在线视频,播放过程中直接提示无法播放;2:还有一个是一个500M的视频,能够正常播放,但是播放过程中,如果拖动进度条,做seek操作,会提示无法播放这两种情况log提示一致:Video is malformed,就是在如下的代码中出现错误: while(srcOffset转载 2014-12-18 11:14:42 · 1431 阅读 · 0 评论 -
libstagefright 音视频同步方案
1:音视频数据都有一个list,用于存放解码后的数据; ListmFilledBuffers; 2:解码后的音视频数据不断的往list中存放,不做音视频同步方面的时间上控制 mFilledBuffers.push_back(i);3:音视频同步主要表现在从list中取数据进行视频的显示和音频的输出;4:其中audio数据在线程函数t转载 2014-12-18 10:34:52 · 823 阅读 · 0 评论 -
OMXCodec数据处理过程
buffer的处理主要由以下4个命令来进行驱动OMXCodec使用OMX_EmptyThisBuffer传递未解码的buffer给component,component收到该命令后会读取input port buffer中的数据,将其组装成帧进行解码,读取buffer中的数据完成后会调用EmptyBufferDone通知OMXCodeccompome转载 2014-12-18 11:57:15 · 1625 阅读 · 0 评论 -
OMXCodec::read() 已经两次遇到等待不到锁而卡死的情况
status_t OMXCodec::read( MediaBuffer **buffer, const ReadOptions*options) { status_t err = OK; *buffer = NULL; Mutex::AutolockautoLock(mLock); if (mState != EXECUTI转载 2014-12-18 11:49:29 · 863 阅读 · 0 评论 -
AudioSink & AudioTrack
AudioTrack is the hardware audio sink. AudioSink is used forin-memory decode and potentially other applications where output doesn'tgo straight to hardware.AudioTrack是硬件音频接收器,AudioSink用于内存解码或者可能转载 2014-12-18 11:50:46 · 4363 阅读 · 0 评论 -
在一个数组中避免重复查找的算法---omxcodec
void OMXCodec::findMatchingCodecs( const char *mime, bool createEncoder, const char*matchComponentName, uint32_t flags, Vector*matchingCodecs) { matchingCodecs->cle转载 2014-12-18 11:46:54 · 658 阅读 · 0 评论 -
处理的一个 http live streaming 的问题
测试一项http livestreaming的流媒体,提示无法播放,底层解码器直接报错,打开解码器相关的log开关,问题一目了然,播放的视频时720P的,而我们的手机最大支持分辨率为840*480左右,所以无法播放。由于这项测试必须通过,所以我们先后采取了一下两种方法去规避1:使用谷歌的软解去解码; 调用谷歌软解去解码视频帧的时候都是没有图像的,无法正常播放;2:使用co转载 2014-12-18 11:12:04 · 1020 阅读 · 0 评论 -
OMX只是一个框架,所以解码器是硬解还是软解都没关系,而且大多说厂家的硬解码都是使用OMX框架
OMX只是一个框架,所以与解码器是硬解还是软解都没关系,而且大多说厂家的硬解码都是使用OMX框架数据格式及OMX输入缓冲细节 enum State{ DEAD, LOADED, LOADED_TO_IDLE, IDLE_TO_EXECUTING, EXECUTING, EXE转载 2014-12-18 11:48:52 · 1674 阅读 · 0 评论 -
Android视频播放数据读取的流程
这里分析Android4.0.1本地视频数据读取的流程,其他过程类似当播放条件准备妥当之后,就要循环进行读取视频的原始数据放到MediaBuffer,将MediaBuffer中的数据输送到解码器中解码,解码后的数据放到MediaBuffer中,在将这MediaBuffer中的数据进行render显示。本文主要侧重读取原始数据的流程,主要是代码跟踪,不夹杂个人分析,有些mpe转载 2014-12-18 11:37:11 · 2417 阅读 · 0 评论 -
Android下打印调试堆栈方法
http://blog.csdn.net/freshui/article/details/9456889打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。Android打印堆栈转载 2015-01-15 22:32:24 · 747 阅读 · 0 评论 -
使用CMake构建android原生库
在android下进行原生C/C++应用程序开发,通常使用ndk-build脚本编译源代码,但是对于一些第三方库,采用ndk-build编译却是不太方便。我之前有些项目采用了CMake构建系统,现在希望把这些库拿到android下使用,因此想是否可以仍然采用CMake构建系统。本质上,ndk就是一套交叉编译工具链,加上一些方便使用的脚本,而CMake对交叉编译支持的很好,所以从理论上是可行的。上网转载 2014-12-25 21:48:09 · 2738 阅读 · 0 评论 -
socat examples
// Examples for using socat (and filan)//"$" means normal user, "#" requires privileges, "//" starts a comment///////////////////////////////////////////////////////////////////////////////// si转载 2014-12-22 17:49:03 · 2152 阅读 · 0 评论 -
从github下载最新Android源码
今年5月底开始,谷歌彻底被墙,所有谷歌的网站都不能访问了,这次包括了android.org,googlesource.com,code.google.com。Android官方的资源不能访问,想下载Android代码当然是困难重重了。本文就为大家解决这一问题——介绍如何使从github.com/andorid下载Andorid最新源码。俗话说“授之以鱼不如授之以渔”,本文不只是给出一个已经打包转载 2014-12-03 18:24:11 · 30813 阅读 · 0 评论 -
Android procrank
Android procrank (/system/xbin/procrank) 工具,能够列出进程所占用的内存使用情况。顺序为从高到低。每个进程占用内存大小以 VSS, RSS , PSS, USS 的形式列出。为了简化描述,内存占用以页为单位表述,而不是字节。 通常每页为 4096 字节。 VSS ( 等同于 ps 命令列出的 VSZ) 是单个进程全部可访问的地址空间。转载 2014-12-18 15:12:16 · 748 阅读 · 0 评论 -
不适合作为流媒体的视频文件
测试各个服务器上的视频文件的时候,经常发现有些视频莫名其妙的播放不流畅,甚至是非常卡顿以至于播放不了,但是在本地播放这些文件非常流畅,将这些文件下载下来播放,并且将MPEG4Extractor中解析的log打上,发现一个规律,这些视频文件的树状结构的box中,moov这个字段都在文件的最末尾,也就是在真正视频数据的后面。 由于视频播放前首先需要使用extractor解析这个文件,其实解析就转载 2014-12-18 11:16:25 · 2429 阅读 · 0 评论 -
Android异步消息框架
自从rtsp从stagefright播放器移植到NuPlayer之后,你会发现相关的类中存在许多类似下面的代码:================================11111111111111==========================NuPlayerDriver::NuPlayerDriver() :mLooper(new ALooper) {转载 2014-12-18 11:21:39 · 869 阅读 · 0 评论 -
学习网址
各类学习网址原创 2015-02-27 23:42:08 · 820 阅读 · 0 评论 -
Ubuntu & Android 技巧
各种工作用到的小技巧原创 2013-09-30 09:38:49 · 5328 阅读 · 0 评论 -
ARM 指令集版本和ARM 版本
常常能看到ARM7,ARM9,ARM11,以及armv6k等不同的表达。且在GCC编译中,常常要用到 -march,-mcpu等。他们分别表达什么涵义呢?Sam自己也不很清楚,只是大概有个模糊的概念。今天就仔细研究一下。 ARM(Advanced RISCMachines)是微处理器行业的一家知名企业。设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。1985年,第一个ARM转载 2015-07-04 00:01:56 · 802 阅读 · 0 评论 -
用 NDK 编译 ffmpeg 到 Android 平台
用 NDK 编译 ffmpeg 到 Android 平台原创 2013-10-01 11:03:45 · 3271 阅读 · 0 评论 -
Android编译相关
Invoke ". build/envsetup.sh" from your shell to add thefollowing functions to your environment:- croot: Changes directory to the top of the tree.- m: Makesfrom the top of the tree.- mm转载 2015-07-01 17:08:25 · 684 阅读 · 0 评论 -
Android之应用中执行Linux命令
http://www.2cto.com/kf/201303/196718.html下面,我以修改某一文件的权限为777为例:/** 执行Linux命令,并返回执行结果。 */ public static String exec(String[] args) { String result = ""; Proces转载 2015-05-07 17:18:52 · 2730 阅读 · 0 评论 -
Android 命令行创建工程
android create project --target 6 --package com.changhong --activity HelloJni --path ./HelloJni原创 2013-08-29 12:03:13 · 2098 阅读 · 0 评论 -
开源项目 for android
git clone git://git.videolan.org/vlc/vlc-android.gitgit clone git@gitorious.org:gstreamer/android.gitgit clone git@gitorious.org:ffmpeg/ffmpeg-android.git原创 2015-05-11 23:41:32 · 635 阅读 · 0 评论 -
Android 源码下载
Android 下载说明,https://source.android.com/source/downloading.htmlAndroid 版本查看,https://android.googlesource.com/platform/manifest/+refs------------------------------------------修改 hosts 文件(添加原创 2013-08-27 22:30:41 · 2051 阅读 · 0 评论 -
Android 打造编译时注解解析框架 这只是一个开始
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43452969 ,本文出自:【张鸿洋的博客】1、概述记得很久以前,写过几篇博客,容我列举一下:Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)Android 进阶 教你打造 Android 中的 IOC转载 2015-02-27 23:35:35 · 917 阅读 · 0 评论 -
netperf用法
http://blog.csdn.net/iamljj/article/details/6254461全局参数:-H:指定运行netserver的服务器的IP地址-l: 指定测试的时间长度(秒)-t: 指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR网络性能测试:1. 批量性能测试 局部参数:转载 2014-12-31 21:58:35 · 1973 阅读 · 0 评论 -
Android 工具
Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691原创 2014-12-31 21:14:42 · 510 阅读 · 0 评论 -
CodecInfo为一个结构体,包含两个成员,后面定义了这个结构体类型的一个数组
void OMXCodec::findMatchingCodecs( const char *mime, bool createEncoder, const char*matchComponentName, uint32_t flags, Vector*matchingCodecs) { matchingCodecs->cle转载 2014-12-18 11:47:52 · 1526 阅读 · 0 评论 -
Android rtsp 流媒体音视频帧的处理流程
先把从收到rtp包到封装成完整的一帧涉及的相关函数从上到下罗列一遍,后续在忘记的情况下理清的时候可以作为线索,不用从头去分析代码(MyHandler.h)onMessageReceived(case setu) sp notify = newAMessage('accu', id());void ARTPConnection::addStreamvoid ARTPConnectio转载 2014-12-18 11:22:34 · 3663 阅读 · 0 评论 -
分享一个分析的 rtsp 流媒体的问题
前面几篇博文都是关于http协议的流媒体,这篇博客分享一篇分析的rtsp协议的流媒体的问题。问题北京:播放一个内网服务器上面的音频文件,拖动进度条,毕现的会有so crash的现象查看log,crash的地方是:CHECK_LE(offset + payloadLength,buffer->size());这个宏没有满足导致。在分析这个问题之前,先大致了解一下r转载 2014-12-18 11:24:08 · 1195 阅读 · 0 评论 -
IBinder的三个主要部分(暂不分析底层如何实现)
1:定义服务类,如AudioFlinger.cpp MediaPlayerService.cppCameraService.cppAudioPolicyService.cpp 实现的过程参考前面的某一篇博客,差不多就是定义一个IXXXX,然后定义两个BnXXX和BpXXX等等;2:在开机流程中,将这些服务注册到servicemanager中去,这个servic转载 2014-12-18 11:40:03 · 691 阅读 · 0 评论 -
HTTP协议的chunked编码
一般情况HTTP的Header包含Content-Length域来指明报文体的长度。如:有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用chunked编码。 在进行Chunked编码传输时,在回复消息的Headers有transfer-coding域值为c转载 2014-12-18 11:25:54 · 580 阅读 · 0 评论 -
WireShark 过滤语法
WireShark 过滤语法1. 过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP2. 过滤端口例子:tcp.port eq 80 // 不管端口是来源的还是目标的都显转载 2015-01-07 09:55:07 · 854 阅读 · 0 评论 -
Android 编译 zlib
export CC=arm-linux-androideabi-gccexport CPP=arm-linux-androideabi-cppexport AR=arm-linux-androideabi-arexport RANLIB=arm-linux-androideabi-ranlib./configure --prefix=/home/liuyin/share/devki原创 2013-10-24 15:07:55 · 3819 阅读 · 0 评论 -
Android 编译 png
./configure CC=arm-linux-androideabi-gcc CPP=arm-linux-androideabi-cpp AR=arm-linux-androideabi-ar RANLIB=arm-linux-androideabi-ranlib --target=arm-linux --host=arm-linux --prefix=/home/liuyin/share/d原创 2013-10-24 15:13:40 · 814 阅读 · 0 评论 -
Android MediaPlayer的生命周期
Android MediaPlayer的生命周期MediaPlayer 的状态转换图也表征了它的生命周期,搞清楚这个图可以帮助我们在使用 MediaPlayer 时考虑情况更周全,写出的代码也更具健壮性。这张状态转换图清晰的描述了 MediaPlayer 的各个状态,也列举了主要的方法的调用时序,每种方法只能在一些特定的状态下使用,如果使用时 MediaPlayer 的状态不正确则会引转载 2013-09-27 21:12:34 · 731 阅读 · 0 评论 -
Android 为一个新产品作编译配置(Product Definition Files)
在 vendor//products/.mk 下配置相应的Product配置信息,比如哪些应用需要build进去,就列在 PRODUCT_PACKAGES中,需要编译哪些语言和分辨率的资源进去,可以修改PRODUCT_LOCALES。 例如 PRODUCT_LOCALES += hdpi, 这样编译的时候,就只会把app下的hdpi的资源编译进去,而不会编译mdpi,ldpi等目录下的转载 2013-10-09 17:50:44 · 1001 阅读 · 0 评论