当前位置:  编程技术>移动开发
本页文章导读:
    ▪spydroid源码分析(3):rtp包头分析以及代码实现        spydroid源码分析(三):rtp包头分析以及代码实现             网上有很多的rtp协议介绍的文章,我也老生常谈的拿来使用了,         先介绍rtp包头,我们都知道,rtp包头占12个字.........
    ▪ 16-应用文件        16-使用文件 前几章参考: 1-引言 2-Objective-C 编程 3-类、对象和方法 4-数据类型和表达式 5-循环结构 6-选择结构 7-类 8-继承 9-多态、动态类型和动态绑定 10-变量和数据类型 11-分类和.........
    ▪ 铺讯平台配置系统app文件位置       展讯平台配置系统app文件位置SC8825/device/sprd/sp8825ea/base.mk  此文件可以配置system/app下面的apk,可以定制:    PRODUCT_PROPERTY_OVERRIDES := PRODUCT_PACKAGES := \ libjni_pinyinime \ Camera \ DeskClock \ AlarmProvi.........

[1]spydroid源码分析(3):rtp包头分析以及代码实现
    来源: 互联网  发布时间: 2014-02-18
spydroid源码分析(三):rtp包头分析以及代码实现

             网上有很多的rtp协议介绍的文章,我也老生常谈的拿来使用了,

        先介绍rtp包头,我们都知道,rtp包头占12个字节,1个字节byte当然是8个bit了,下面是详细介绍。看下面的这张图

V:版本号;        Version(2),占2个bit,数值为2,二进制表示10

P:填充字段标识; Padding(0),占1个 bit,数值为0,二进制表示0

X:扩展头标识;      Extension(0),占1个bit ,数值为0,二进制表示0

CSRC count(CC):贡献源数目,和后面的CSRC有关。CSRC,贡献源,指的是不同步的源。在网络中,可能会有混合器将来自不同地点的RTP流混合成一个RTP流以节省带宽, CSRC用来区分不同的源;  Source Identifier(0),占4个bit,数值为0,二进制表示为0000

java代码表示,buffer[0]当然是指的是rtp包的第0个字节

buffer[0] = (byte) Integer.parseInt("10000000",2);

 

M:标记一些重要的事件(由应用程序定义);  占1个bit

PT:净荷数据类型; Payload Type,占7个bit

java代码表示,buffer[1]表示rtp包的第1个字节
buffer[1] = (byte) 96;

这里的96的数值是你自己规定的,在上一篇文章可以看到我们建立rtsp连接的时候,describe描述需要传输Payload Type,这里的数值需要和那个值相同,上文可以看到我用的96. 如果你不使用rtsp协议,直接通过udp的方式发送到对方VLC,你需要在sdp文件指定其数值为96、

 

SN:序列号,每个分组的序列号(初始值随机),用来检测分组的丢失并恢复分组的序列;

在rtp包中占第2,3这2个字节。

java代码表示,

private void updateSequence() {
		setLong(++seq, 2, 4);
	}

private void setLong(long n, int begin, int end) {
		for (end--; end >= begin; end--) {
			buffer[end] = (byte) (n % 256);
			n >>= 8;
		}
	}	


 随着传递一个packet,sequence的数值加1.

 

TS:时间戳,反映RTP净荷中的第一个采样数据的采样时间。时间的粒度是净荷类型相关的。

在rtp包中,占4,5,6,7这4个字节。

java代码如下

public void updateTimestamp(long timestamp) {
		setLong(timestamp, 4, 8);
	}
	
		
	private void setLong(long n, int begin, int end) {
		for (end--; end >= begin; end--) {
			buffer[end] = (byte) (n % 256);
			n >>= 8;
		}
	}	


 timestimp在spydroid源代码中是通过请求传输每个包的平均值,然后经过一定的计算得到的。

 

SSRC:同步源标识符,用于标识同步源。同步源指的是,例如,一段影片的音频和视频通过不同的RTP流传输,它们是同步的。每个同步源是负责发送RTP分组并在RTP中设置序列号和时间戳的实体。

在rtp包中,占8,9,10,11这4个字节。

java代码如下

	setLong((ssrc=(new Random()).nextInt()),8,12);

public void setSSRC(int ssrc) {
		this.ssrc = ssrc; 
		setLong(ssrc,8,12);
	}
	
	public int getSSRC() {
		return ssrc;
	}

private void setLong(long n, int begin, int end) {
		for (end--; end >= begin; end--) {
			buffer[end] = (byte) (n % 256);
			n >>= 8;
		}
	}	

 在上面的代码中,ssrc是产生的随机数,这个数值在建立rtsp连接的时候,SETUP这个步骤上需要用到 Integer.toHexString(ssrc);的数值,这个数值的的16进制是我们需要传递给VLC客户端的 ,你可以测试一下。如果不一致,那么发送到VLC客户端就无法正常播放

 

 

 

这不,rtp包头前12个字节就是这样,下面就是NALU的内容了

 

未完待续 

 


    
[2] 16-应用文件
    来源: 互联网  发布时间: 2014-02-18
16-使用文件

前几章参考:

1-引言

2-Objective-C 编程

3-类、对象和方法

4-数据类型和表达式

5-循环结构

6-选择结构

7-类

8-继承

9-多态、动态类型和动态绑定

10-变量和数据类型

11-分类和协议

12-预处理程序

13-基本的C语言特性

14-Foundation框架简介

15-数字、字符串和集合


其实,从第14章开始,就隐隐约约的感觉到已经不是再介绍Objective-C了,而是介绍Objective-C应用最广的Mac OS X或iOSFoundation框架里面的内容。

Foundation框架允许你利用文件系统对文件或目录执行基本操作,这些基本操作是由NSFileManager类提供的。

使用NSFileHandle类提供的方法,可以打开文件并对文件执行多次读/写操作。NSFileHandle类的方法可以实现如下功能:

1)打开一个文件,执行读、写或更新(读取和写入)操作。

2)在文件中查找指定位置。

3)从文件中读取特定数目的字节,或将指定数目的字节写入文件。


NSFileHandle类提供的方法也可用于各种设备或套接字。很多语言中使用的框架也有类似的FileHandle。

NSURL类允许在应用中使用URL方法。这个和Java中的URL差不多

NSBundle类提供了允许在应用中使用包(bundle)的方法,包括搜索包中的特定资源。这个东西更类似于Android应用中的Resource或R之类干的活。


管理文件和目录使用NSFileManager,文件或目录使用文件的路径名为唯一标识。

完整路径也称为绝对路径,以斜线(/)开始。

特殊的代字符(~)作为用户主目录的缩写。

当前目录为".";

父目录为“..”;

这些概念和Linux里面一样。


每个文件方法都是对NSFileManager对象的调用,而NSFileManager对象是通过向类发送一条defaultManager消息创建。

iOS的设备上,程序是运行在沙盒中的,它严格限定了文件的访问。如果在设备中运行这个程序,会看到当前目录是/,这说明应用的根目录是在运行它的沙盒中,并不是整个iOS设备文件目录的根。

可以这么理解,每一个应用程序都是一个进程,这样它的作用范围就是进程的上下文。沙盒就是进程。这个和Android是一样的道理。Android中,每个应用都运行在一个进程中,每个应用都有自己的pid,即进程号。也不能随便(我说的是随便,不是绝对不能)访问别的进程的数据或者奔溃时影响到其它应用。这就是沙盒的原理。其实,这些相同点都是因为它们两个生态的最底层OS都是unix类似的原理所致。熟悉Unix的同学都知道,进程,用户这些概念,其实就是沙盒的概念。


使用路径用NSPathUtilities.h。

components是一个NSArray对象,它包含路径中每一部分的字符串对象,Path是一个字符串对象,它指定文件的路径;ext是路径扩展名的字符串对象。如@“mp3”

为了保存数据直到下一次运行程序仍能够使用,可以使用Documents目录。每个iOS应用都有自己的Documents目录供数据写入。应用中的Caches目录也可以用来存储一些数据。对于iOS5来说,Apple鼓励开发者存储持久化数据到云端。

对于这些Documents的理解,可以这么理解,每个应用程序都是一个用户。在类Unix系统中,每一个用户其实都是在home目录(Linux系统的home)下的不同用户文件夹分开。不同用户名文件夹中都有基本的文件夹,Documents,Downloads这类的。

这里可能有的同学就会说,你怎么一会说应用程序是进程,一会又说是用户。其实,这个不冲突,只是从不同的角度来理解或描述应用程序而已。简言之,应用程序一般都属于某一个用户(UserId),某一个进程(Pid)。而且一般情况下不同应用程序的用户标识和进程标识都是不一样的。这就是所谓沙盒原理。


NSProcessInfo类中的argments方法返回一个字符串对象数组。数组的第一个元素是进程名称,其余的元素是在命令行中输入的参数。这个类呢,主要用来记录当前进程的信息。其实,我们都知道,unix下的进程入口都是main函数。这也就是为什么NSProcessInfo会记录命令行中的输入参数的原因。命令行中的输入参数都是通过main函数的入参传入的。


基本文件操作:NSFileHandle,可用于标准输入、标准输出、标准错误和控设备。

应该注意NSFileHandle类并没有提供创建文件的功能。创建文件须使用FileManager的方法来创建。另外,Unix系统下,应注意,打开文件进行写入并不会截断文件,需要自己完成截断。


NSURL对象并不是一个字符串(如@“http://www.apple.com”),但是使用URLWithString:方法可以由一个字符串对象创建出NSURL对象。


NSBundle类:

当创建一个应用时,系统存储了应用相关联的所有数据(其中包括图片、本地化字符串、图标等),将这些内容放入一个称为应用包(application bundle)的包中。

在应用中添加一个资源(如图片或文本文件),仅需将文件拖到Xcode的左边窗格中。

mainBundle方法给出了应用包所在的目录。这个方法在Mac OS X和iOS中都适用。





    
[3] 铺讯平台配置系统app文件位置
    来源: 互联网  发布时间: 2014-02-18
展讯平台配置系统app文件位置

SC8825/device/sprd/sp8825ea/base.mk

 此文件可以配置system/app下面的apk,可以定制: 

 

PRODUCT_PROPERTY_OVERRIDES :=

PRODUCT_PACKAGES := \
	libjni_pinyinime \
	Camera \
	DeskClock \
	AlarmProvider \
	Bluetooth \
	Calculator \
	Calendar \
	CertInstaller \
	DrmProvider \
	Email \
	Exchange \
	Gallery2 \
	LatinIME \
	Music \
	MusicFX \
	Provision \
	QuickSearchBox \
	Sync \
	SystemUI \
	Updater \
	CalendarProvider \
	SyncProvider \
	bluetooth-health \
	hostapd \
	wpa_supplicant.conf \
	hciconfig \
	hcitool \
	hcidump


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android获取手机SIM卡运营商信息的方法 iis7站长之家
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3