当前位置:  编程技术>移动开发
本页文章导读:
    ▪战神传言        战神传说 鸟哥,鸟哥的第一款拙作,动作游戏:战神传说之决战金字塔,由于是第一个作品,上线后游戏收入水平一般。如果有玩家有玩,感谢你的支持,有什么评论,请不客气的提,谢谢.........
    ▪ live555代码解读之三:SETUP跟PLAY请求消息处理过程        live555代码解读之三:SETUP和PLAY请求消息处理过程 SETUP请求消息处理过程        前面已经提到RTSPClientSession类,用于处理单独的客户会话。其类成员函数handleCmd_SETUP()处理客户端的SETUP请.........
    ▪ FileConnection访问本土文件系统       FileConnection访问本地文件系统 FC api是JSR 75, PDA Optional Packages for the J2ME Platform的一部分,用于访问本地文件系统。 FC api通过Generic Connection Framework(GCF)访问文件系统,允许访问包括存储卡在内的.........

[1]战神传言
    来源: 互联网  发布时间: 2014-02-18
战神传说
鸟哥,鸟哥的第一款拙作,动作游戏:

战神传说之决战金字塔,由于是第一个作品,上线后游戏收入水平一般。如果有玩家有玩,感谢你的支持,有什么评论,请不客气的提,谢谢!
1 楼 shizhiwu 2010-03-04  
向你学习,我也在这方面努力着...
2 楼 鸟哥哥 2010-03-04  
shizhiwu 写道
向你学习,我也在这方面努力着...

客气!

    
[2] live555代码解读之三:SETUP跟PLAY请求消息处理过程
    来源: 互联网  发布时间: 2014-02-18
live555代码解读之三:SETUP和PLAY请求消息处理过程
SETUP请求消息处理过程

        前面已经提到RTSPClientSession类,用于处理单独的客户会话。其类成员函数handleCmd_SETUP()处理客户端的SETUP请求。调用parseTransportHeader()对SETUP请求的传输头解析,调用子会话(这里具体实现类为 OnDemandServerMediaSubsession)的getStreamParameters()函数获取流媒体发送传输参数。将这些参数组装成响应消息,返回给客户端。

        获取发送传输参数的过程:调用子会话(具体实现类MPEG1or2DemuxedServerMediaSubsession)的 createNewStreamSource(...)创建MPEG1or2VideoStreamFramer,选择发送传输参数,并调用子会话的 createNewRTPSink(...)创建MPEG1or2VideoRTPSink。同时将这些信息保存在StreamState类对象中,用于记录流的状态。

        客户端发送两个SETUP请求,分别用于建立音频和视频的RTP接收。

PLAY请求消息处理过程

        RTSPClientSession类成员函数handleCmd_PLAY()处理客户端的播放请求。首先调用子会话的startStream(),内部调用MediaSink::startPlaying(...),然后是 MultiFramedRTPSink::continuePlaying(),接着调用 MultiFramedRTPSink::buildAndSendPacket(...)。buildAndSendPacke内部先设置RTP包头,内部再调用MultiFramedRTPSink::packFrame()填充编码帧数据。
packFrame内部通过 FramedSource::getNextFrame(), 接着MPEGVideoStreamFramer::doGetNextFrame(),再接着经过 MPEGVideoStreamFramer::continueReadProcessing(), FramedSource::afterGetting(...),  MultiFramedRTPSink::afterGettingFrame(...),  MultiFramedRTPSink::afterGettingFrame1(...)等一系列繁琐调用,最后到了 MultiFramedRTPSink::sendPacketIfNecessary(), 这里才真正发送RTP数据包。然后是计算下一个数据包发送时间,把MultiFramedRTPSink::sendNext(...)函数句柄传给任务调度器,作为一个延时事件调度。在主循环中,当MultiFramedRTPSink::sendNext()被调度时,又开始调用 MultiFramedRTPSink::buildAndSendPacket(...)开始新的发送数据过程,这样客户端可以源源不断的收到服务器传来的RTP包了。
      

发送RTP数据包的间隔计算方法:
        Update the time at which the next packet should be sent, based on the duration of the frame that we just packed into it.

涉及到一些类有:

MPEGVideoStreamFramer: A filter that breaks up an MPEG video elementary stream into headers and frames

MPEG1or2VideoStreamFramer: A filter that breaks up an MPEG 1 or 2 video elementary stream into frames for: Video_Sequence_Header, GOP_Header, Picture_Header

MPEG1or2DemuxedElementaryStream: A MPEG 1 or 2 Elementary Stream, demultiplexed from a Program Stream

MPEG1or2Demux: Demultiplexer for a MPEG 1 or 2 Program Stream

ByteStreamFileSource: A file source that is a plain byte stream (rather than frames)

MPEGProgramStreamParser: Class for parsing MPEG program stream

StreamParser: Abstract class for parsing a byte stream

StreamState:A class that represents the state of an ongoing stream

    
[3] FileConnection访问本土文件系统
    来源: 互联网  发布时间: 2014-02-18
FileConnection访问本地文件系统
FC api是JSR 75, PDA Optional Packages for the J2ME Platform的一部分,用于访问本地文件系统。

FC api通过Generic Connection Framework(GCF)访问文件系统,允许访问包括存储卡在内的文件系统。

包括如下两个接口和三个类:
FileConnection 访问文件和文件夹的接口。
FileSystemListener 添加删除根目录文件系统的状态监听的接口。
FileSystemRegistry 添加删除根目录文件系统的接口注册类。 

ConnectionClosedException 当一个文件句柄的操作被调用,而文件已经被关闭时抛出的异常。 
IllegalModeException 当操作所对应的模式不被文件打开模式支持时抛出的异常。

判断是否支持FC: 引用文字
if(System.getProperty("microedition.io.file.FileConnection.version") != null){ // file.separator
    // FCOP available
} else {
    // FCOP not available
}
打开文件:// CFCard/:
FileConnection fc = (FileConnection) Connector.open("file:///CFCard/"); 
// SDCard/:
FileConnection fc = (FileConnection) Connector.open("file:///SDCard/"); 
// MemoryStick/:
FileConnection fc = (FileConnection) Connector.open("file:///MemoryStick/"); 
// C:/:
FileConnection fc = (FileConnection) Connector.open("file:///C:/"); 
// / File:
Connection fc = (FileConnection) Connector.open(file:////); 
只读方式打开一个文件: String url = "file:///data.txt";
InputConnection conn = null;
int mode = Connector.READ_ONLY; 
  
try {
    conn =(InputConnection) Connector.open( url, mode );
    // Always check whether the file or directory exists.
    // Create the file if it doesn't exist.
    if(!conn.exists()) {
    }
} catch( IOException ioe ){
    // no file
}
创建一个文件:
String url = "file:///SDCard/data.txt";
FileConnection conn = null;
int mode = Connector.WRITE_ONLY;
try {
    conn = (FileConnection)Connector.open(url, mode);
    if(filecon.create()){ // create the file
       OutputStream out = conn.openOutputStream();
       // now write data to the file
    }
    conn.close();
} catch(IOException e){
    // error
} catch(SecurityException e){
    // no permission to create/write
}
列举一个目录下的文件:// FileConnection.list(String filter, boolean includeHidden)
String url = "file:///C:/";
FileConnection conn = null;
try {
    conn = (FileConnection) Connector.open(url);
    if( conn.isDirectory() ) {
        Enumeration names = conn.list();
        while( names.hasMoreElements() ){
            String name = (String) e.nextElement();
            // do something
        }
    } else {
        // not a directory!
    }
} catch(IOException e) {
    // could not access the URL
} catch(SecurityException e) {
    // no permission to read the directory
}
读取文件内容:String url = "file:///CFCard/data.txt";
InputConnection conn = null;
int mode = Connector.READ_ONLY; 

try {
    FileConnection fc = (FileConnection)Connector.open(url, mode);
    if(!fc.exists()) {
        throw new IOException("File does not exist");
    }
    InputStream is = fc.openInputStream();
    byte b[] = new byte[1024];
    int length = is.read(b, 0, 1024);
    System.out.println("Content of "+fileName + ": "+ new String(b, 0, length));
} catch (Exception e) {
} 

 


    
最新技术文章:
▪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显式启动与隐式启动Activity的区别介绍
▪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