You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openmeetings.apache.org by co...@google.com on 2013/03/13 13:31:32 UTC
[red5phone] r105 committed - Video: av setting are switch on video
(with check)...
Revision: 105
Author: solomax666@gmail.com
Date: Wed Mar 13 05:31:08 2013
Log: Video: av setting are switch on video (with check)
FIR request is added (partially tested)
http://code.google.com/p/red5phone/source/detail?r=105
Modified:
/branches/red5sip/src/java/org/red5/sip/app/RTMPRoomClient.java
/branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoReceiver.java
/branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoSender.java
/branches/red5sip/src/java/org/red5/sip/app/RTPVideoStream.java
/branches/red5sip/src/java/org/red5/sip/app/SIPTransport.java
/branches/red5sip/src/java/org/red5/sip/app/SIPUserAgent.java
/branches/red5sip/src/java/org/red5/sip/app/SIPVideoConverter.java
/branches/red5sip/src/java/org/red5/sip/app/SIPVideoLauncher.java
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/RTMPRoomClient.java Sun Mar
10 22:33:36 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/RTMPRoomClient.java Wed Mar
13 05:31:08 2013
@@ -60,6 +60,7 @@
private ISipNumberListener sipNumberListener = null;
private long lastSendActivityMS = 0L;
private boolean videoStarted = false;
+ private boolean streamCreated = false;
private final Runnable updateTask = new Runnable() {
public void run() {
while (true) {
@@ -84,6 +85,7 @@
final private String context;
final private String host;
private int activeVideoStreamID = -1;
+ private String destination;
public RTMPRoomClient(String host, String context, int roomId) {
super();
@@ -126,7 +128,9 @@
this.sipNumberListener = sipNumberListener;
}
- public void init() {
+ public void init(String destination) {
+ this.destination = destination;
+ streamCreated = false;
getPublicSID();
}
@@ -414,7 +418,10 @@
case setUserAVSettings:
log.info("setUserAVSettings");
// SIP -> red5
- createStream(this);
+ if (!streamCreated) {
+ createStream(this);
+ streamCreated = true;
+ }
break;
case setSipTransport:
log.info("setSipTransport");
@@ -520,7 +527,7 @@
return;
}
if (!videoStarted) {
- //setUserAVSettings("av"); //TODO video support is disabled now as
unstable
+ setUserAVSettings("av");
videoStarted = true;
}
if (videoBuffer == null || (videoBuffer.capacity() < video.length
&& !videoBuffer.isAutoExpand())) {
@@ -540,4 +547,12 @@
publishStreamData(publishStreamId, message);
}
+
+ public String getDestination() {
+ return destination;
+ }
+
+ public void setDestination(String destination) {
+ this.destination = destination;
+ }
}
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoReceiver.java
Tue Mar 5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoReceiver.java
Wed Mar 13 05:31:08 2013
@@ -21,11 +21,11 @@
private boolean running;
private ConverterThread converterThread;
- public RTPStreamVideoReceiver(IMediaReceiver mediaReceiver,
DatagramSocket socket, SIPCodec codec) {
+ public RTPStreamVideoReceiver(SIPTransport sipTransport, IMediaReceiver
mediaReceiver, DatagramSocket socket, SIPCodec codec) {
this.mediaReceiver = mediaReceiver;
rtpSocket = new RtpSocket(socket);
this.codec = codec;
- converterThread = new ConverterThread();
+ converterThread = new ConverterThread(sipTransport);
}
@Override
@@ -57,9 +57,9 @@
private boolean running;
private SIPVideoConverter converter;
- public ConverterThread() {
+ public ConverterThread(SIPTransport sipTransport) {
packetQueue = new ConcurrentLinkedQueue<RtpPacket>();
- converter = new SIPVideoConverter();
+ converter = new SIPVideoConverter(sipTransport);
}
public void addPacket(RtpPacket packet) {
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoSender.java
Tue Mar 5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/RTPStreamVideoSender.java
Wed Mar 13 05:31:08 2013
@@ -14,10 +14,11 @@
private static Logger log =
LoggerFactory.getLogger(RTPStreamVideoSender.class);
private SIPCodec codec;
+ private SIPTransport sipTransport;
private RtpSocket rtpSocket;
private int seqn = 0;
- public RTPStreamVideoSender(IMediaReceiver mediaReceiver, SIPCodec codec,
+ public RTPStreamVideoSender(SIPTransport sipTransport, IMediaReceiver
mediaReceiver, SIPCodec codec,
DatagramSocket srcSocket, String destAddr, int destPort) {
this.codec = codec;
mediaReceiver.setVideoSender(this);
@@ -31,7 +32,7 @@
@Override
public IMediaStream createStream(int streamId) {
- return new RTPVideoStream(this, codec);
+ return new RTPVideoStream(sipTransport, this, codec);
}
@Override
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/RTPVideoStream.java Tue
Mar 5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/RTPVideoStream.java Wed Mar
13 05:31:08 2013
@@ -10,10 +10,10 @@
private SIPVideoConverter converter;
private SIPCodec codec;
- public RTPVideoStream(RTPStreamVideoSender sender, SIPCodec codec) {
+ public RTPVideoStream(SIPTransport sipTransport, RTPStreamVideoSender
sender, SIPCodec codec) {
this.sender = sender;
this.codec = codec;
- converter = new SIPVideoConverter();
+ converter = new SIPVideoConverter(sipTransport);
}
@Override
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/SIPTransport.java Tue Mar
5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/SIPTransport.java Wed Mar
13 05:31:08 2013
@@ -4,6 +4,9 @@
import org.slf4j.LoggerFactory;
import org.zoolu.net.SocketAddress;
import org.zoolu.sip.address.NameAddress;
+import org.zoolu.sip.message.Message;
+import org.zoolu.sip.message.MessageFactory;
+import org.zoolu.sip.message.SipMethods;
import org.zoolu.sip.provider.SipProvider;
import org.zoolu.sip.provider.SipStack;
@@ -11,8 +14,8 @@
protected static Logger log = LoggerFactory.getLogger(SIPTransport.class);
protected RTMPRoomClient roomClient;
- private SipProvider sip_provider;
- private SIPUserAgentProfile user_profile;
+ private SipProvider sipProvider;
+ private SIPUserAgentProfile userProfile;
private String opt_outbound_proxy = null;
private SIPUserAgent ua;
private SIPRegisterAgent ra;
@@ -51,27 +54,27 @@
SipStack.debug_level = 0;
SipStack.log_path = "log";
- sip_provider = new SipProvider(null, sipPort);
- sip_provider.setOutboundProxy(new SocketAddress(opt_outbound_proxy));
+ sipProvider = new SipProvider(null, sipPort);
+ sipProvider.setOutboundProxy(new SocketAddress(opt_outbound_proxy));
- user_profile = new SIPUserAgentProfile();
- user_profile.audioPort = rtpAudioPort;
- user_profile.videoPort = rtpVideoPort;
- user_profile.username = username;
- user_profile.passwd = password;
- user_profile.realm = realm;
- user_profile.fromUrl = fromURL;
- user_profile.contactUrl = "sip:" + phone + "@" +
sip_provider.getViaAddress();
+ userProfile = new SIPUserAgentProfile();
+ userProfile.audioPort = rtpAudioPort;
+ userProfile.videoPort = rtpVideoPort;
+ userProfile.username = username;
+ userProfile.passwd = password;
+ userProfile.realm = realm;
+ userProfile.fromUrl = fromURL;
+ userProfile.contactUrl = "sip:" + phone + "@" +
sipProvider.getViaAddress();
- if (sip_provider.getPort() != SipStack.default_port) {
- user_profile.contactUrl += ":" + sip_provider.getPort();
+ if (sipProvider.getPort() != SipStack.default_port) {
+ userProfile.contactUrl += ":" + sipProvider.getPort();
}
- user_profile.keepaliveTime = 8000;
- user_profile.acceptTime = 0;
- user_profile.hangupTime = 20;
+ userProfile.keepaliveTime = 8000;
+ userProfile.acceptTime = 0;
+ userProfile.hangupTime = 20;
- ua = new SIPUserAgent(sip_provider, user_profile, this, roomClient);
+ ua = new SIPUserAgent(sipProvider, userProfile, this, roomClient);
ua.listen();
@@ -84,7 +87,7 @@
p("Calling " + destination);
try {
- roomClient.init();
+ roomClient.init(destination);
ua.setMedia(roomClient);
ua.hangup();
@@ -109,10 +112,10 @@
try {
- if (sip_provider != null) {
- ra = new SIPRegisterAgent(sip_provider, user_profile.fromUrl,
user_profile.contactUrl, username,
- user_profile.realm, password, this);
- loopRegister(user_profile.expires, user_profile.expires / 2,
user_profile.keepaliveTime);
+ if (sipProvider != null) {
+ ra = new SIPRegisterAgent(sipProvider, userProfile.fromUrl,
userProfile.contactUrl, username,
+ userProfile.realm, password, this);
+ loopRegister(userProfile.expires, userProfile.expires / 2,
userProfile.keepaliveTime);
}
} catch (Exception e) {
@@ -131,7 +134,7 @@
try {
p("provider.halt");
- sip_provider.halt();
+ sipProvider.halt();
} catch (Exception e) {
p("close: Exception:>\n" + e);
}
@@ -244,4 +247,18 @@
this.number = number;
this.call(number);
}
+
+ public void requestFIR() {
+ log.debug("requesting FIR...");
+ Message msg = MessageFactory.createRequest(
+ sipProvider
+ , SipMethods.INFO
+ , sipProvider.completeNameAddress(roomClient.getDestination())
+ , sipProvider.completeNameAddress(userProfile.fromUrl)
+ , ""); // no way to pass content-type, will set empty message for now
+ msg.setBody("application/media_control+xml"
+ , "<?xml version=\"1.0\"
encoding=\"utf-8\" ?><media_control><vc_primitive><to_encoder>" +
+
"<picture_fast_update></picture_fast_update></to_encoder></vc_primitive></media_control>");
+ sipProvider.sendMessage(msg);
+ }
}
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/SIPUserAgent.java Tue Mar
5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/SIPUserAgent.java Wed Mar
13 05:31:08 2013
@@ -409,14 +409,6 @@
printLog("launchMediaApplication", "remoteAudioPort = " +
remoteAudioPort + ", remoteVideoPort = "
+ remoteVideoPort + ".");
-
- // Select the media direction (send_only, recv_ony, fullduplex).
- int dir = 0;
- if (userProfile.recvOnly) {
- dir = -1;
- } else if (userProfile.sendOnly) {
- dir = 1;
- }
printLog("launchMediaApplication", "user_profile.audio = " +
userProfile.audio + ", user_profile.video = "
+ userProfile.video + ", audio_app = " + audioApp + ", video_app = " +
videoApp + ".");
@@ -442,7 +434,7 @@
if (userProfile.video && localVideoPort != 0 && remoteVideoPort != 0) {
if (videoApp == null) {
if (sipVideoCodec != null) {
- videoApp = new SIPVideoLauncher(localVideoPort,
remoteMediaAddress, remoteAudioPort, mediaReceiver, sipVideoCodec);
+ videoApp = new SIPVideoLauncher(localVideoPort,
remoteMediaAddress, remoteAudioPort, (SIPTransport)listener, mediaReceiver,
sipVideoCodec);
} else {
printLog( "launchMediaApplication", "SipCodec for video not
initialized." );
}
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/SIPVideoConverter.java Tue
Mar 5 21:44:18 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/SIPVideoConverter.java Wed
Mar 13 05:31:08 2013
@@ -4,12 +4,12 @@
import java.util.Arrays;
import java.util.List;
+import local.net.RtpPacket;
+
import org.red5.codecs.SIPCodec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import local.net.RtpPacket;
-
public class SIPVideoConverter {
private static final Logger log =
LoggerFactory.getLogger(SIPVideoConverter.class);
@@ -23,13 +23,15 @@
private long startTm;
private long startRelativeTime;
private List<RtpPacketWrapper> packetsQueue;
+ private SIPTransport sipTransport;
// rtmp => rtp
private int lenSize;
private boolean spsSent = false;
private boolean ppsSent = false;
- public SIPVideoConverter() {
+ public SIPVideoConverter(SIPTransport sipTransport) {
+ this.sipTransport = sipTransport;
resetConverter();
startRelativeTime = System.currentTimeMillis();
}
@@ -359,6 +361,7 @@
protected void requestFIR() {
log.debug("requesting FIR...");
+ sipTransport.requestFIR();
}
public static class RTMPPacketInfo {
=======================================
--- /branches/red5sip/src/java/org/red5/sip/app/SIPVideoLauncher.java Tue
Mar 5 01:52:05 2013
+++ /branches/red5sip/src/java/org/red5/sip/app/SIPVideoLauncher.java Wed
Mar 13 05:31:08 2013
@@ -15,11 +15,11 @@
protected RTPStreamVideoReceiver receiver;
protected RTPStreamVideoSender sender;
- public SIPVideoLauncher(int localPort, String remoteAddr, int remotePort,
IMediaReceiver mediaReceiver, SIPCodec codec) {
+ public SIPVideoLauncher(int localPort, String remoteAddr, int remotePort,
SIPTransport sipTransport, IMediaReceiver mediaReceiver, SIPCodec codec) {
try {
socket = new DatagramSocket(localPort);
- receiver = new RTPStreamVideoReceiver(mediaReceiver, socket, codec);
- sender = new RTPStreamVideoSender(mediaReceiver, codec, socket,
remoteAddr, remotePort);
+ receiver = new RTPStreamVideoReceiver(sipTransport, mediaReceiver,
socket, codec);
+ sender = new RTPStreamVideoSender(sipTransport, mediaReceiver, codec,
socket, remoteAddr, remotePort);
} catch (Exception e) {
log.error("", e);
}