Android之live555构建RTSP Client
来源:互联网 发布:macbook有的软件删不掉 编辑:程序博客网 时间:2024/05/21 08:43
============
myRTSPClient.cpp
主要函数调用例程:
#include "BasicUsageEnvironment.hh"
#include "RTSPClient.hh"
1.建立RTSPClient
scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
streamURL = address; //用户输入Server地址
const int verbosityLevel = 1;
const char* progName = "MyRTSPClientProg";
portNumBits tunnelOverHTTPPortNum;
ourClient = RTSPClient::createNew(env, streamURL, verbosityLevel, progName, tunnelOverHTTPPortNum);
2.发送打开命令
void *continueAfterOPTIONS(RTSPClient* client, int resultCode, char* resultString);
Authenticator* ourAuthenticator;
ourClient->sendOptionsCommand(continueAfterOPTIONS, ourAuthenticator); //传入一个回调函数和作者
3.请求服务器描述信息
在continueAfterOPTIONS这个回调中完成如下:
void *continueAfterDESCRIBE(RTSPClient* client, int resultCode, char* resultString);
ourRTSPClient->sendDescribeCommand(continueAfterDESCRIBE, ourAuthenticator); //传入一个回调函数和作者
4.建立会话及发送命令
在continueAfterDESCRIBE这个回调函数中完成如下:
session = MediaSession::createNew(*env, resultString); //该步骤会调用live555,完成RTP和RTCP组播UDP的建立
subsession->setClientPortNum(desiredPortNum);
subsession->initiate(simpleRTPoffsetArg);
subsession->rtpSource()->setPacketReorderingThresholdTime(thresh);
setupStreams();
下面看setupStream()函数
MediaSubsession *subsession;
void *continueAfterSETUP(RTSPClient* client, int resultCode, char* resultString);
ourClient->sendSetupCommand(*subsession, continueAfterSETUP, False, streamUsingTCP, forceMulticastOnUnspecified, ourAuthenticator);
//传入一个回调函数和作者
5.建立媒体接收会话
在continueAfterSETUP这个回调中完成如下:
afterSetupStreams();
下面看afterSetupStreams()函数:
FileSink* fileSink;
fileSink = WAVAudioFileSink::createNew(*env, pipeName,fileSinkBufferSize, subsession->numChannels(),subsession->rtpTimestampFrequency(), 16 /* bit */); //这个类是自己实现的
subsession->sink = fileSink;
subsession->sink->startPlaying(*(subsession->readSource()),NULL, NULL);
subsession->rtcpInstance()->setByeHandler(subsessionByeHandler, subsession);
ourRTSPClient->sendPlayCommand(*session, continueAfterPLAY, start, end, scale, ourAuthenticator); //传入一个回调函数和作者
6.实现一些我们特有功能
在continueAfterPLAY这个回调中可以完成一些其他功能。
7.最后进入任务调度
env->taskScheduler().doEventLoop(&eventLoopWatchVariable);
最后,需要特别关注和研究的函数如下:
live555/liveMedia/RTSPClient.cpp
unsigned RTSPClient::sendRequest(RequestRecord* request);
live555/liveMedia/MediaSession.cpp
Boolean MediaSubsession::initiate(int useSpecialRTPoffset);
void MediaSubsession::setDestinations(netAddressBits defaultDestAddress);
live555/groupsock/GroupsockHelper.cpp
netAddressBits ourIPAddress(UsageEnvironment& env); //注意:setsockopt这个系统调用的反复调用有可能造成系统不稳定
- Android之live555构建RTSP Client
- Android之live555构建RTSP Server
- 基于live555实现简单的rtsp client
- live555 rtsp server android 移植
- live555学习之二RTSP协议说明
- 让android支持RTSP(live555分析)
- 让android支持RTSP(live555分析)
- 让android支持RTSP(live555分析)
- 让android支持RTSP(live555分析)
- LIVE555研究之二: RTSP、RTP/RTCP协议介绍
- LIVE555研究之二: RTSP、RTP/RTCP协议介绍
- LIVE555研究之二: RTSP、RTP/RTCP协议介绍
- LIVE555研究之二: RTSP、RTP/RTCP协议介绍
- LIVE555研究之二: RTSP、RTP/RTCP协议介绍
- rtsp 管道方式 live555
- live555库(zz)RTSP
- live555 dm368 rtsp
- live555 rtsp延时问题
- Google Protocol Buffer (PB)简明入门
- Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
- IOS开发之Core Location
- C#生成Excel报表 用MyXls组件生成更完美
- UVA 题目10361 - Automatic Poetry
- Android之live555构建RTSP Client
- sql中drop、truncate与delete的区别
- 去除activity的titleBar
- HttpPostedFile类
- Delphi建议使用语句
- C2B模式非固定
- 产品中的设计
- axis2 调用外部WSDL的工具类
- Android实现边框圆角