VT: Player/Recoder gets its SSRC ID from param
UE should have its own SSRC ID when exchange RTP packet.
It is UE level id so Rx/Tx should have same ID.
Recorder/Player are implemented separately and didn't have any method to sync the ID.
So upper Java Layer would send unique ID as param.
Bug: 121230209
Change-Id: I11248eada31f50d278ab299f57ee42d9a3ce79be
Signed-off-by: Kim Sungyeon <sy85.kim@samsung.com>
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index 981109e..048cc11 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -815,6 +815,13 @@
return OK;
}
+status_t StagefrightRecorder::setParamSelfID(int32_t selfID) {
+ ALOGV("setParamSelfID: %x", selfID);
+
+ mSelfID = selfID;
+ return OK;
+}
+
status_t StagefrightRecorder::setParameter(
const String8 &key, const String8 &value) {
ALOGV("setParameter: key (%s) => value (%s)", key.string(), value.string());
@@ -937,6 +944,13 @@
if (safe_strtoi32(value.string(), &remotePort)) {
return setParamRtpRemotePort(remotePort);
}
+ } else if (key == "rtp-param-self-id") {
+ int32_t selfID;
+ int64_t temp;
+ if (safe_strtoi64(value.string(), &temp)) {
+ selfID = static_cast<int32_t>(temp);
+ return setParamSelfID(selfID);
+ }
} else {
ALOGE("setParameter: failed to find key %s", key.string());
}
@@ -1103,6 +1117,7 @@
sp<MetaData> meta = new MetaData;
int64_t startTimeUs = systemTime() / 1000;
meta->setInt64(kKeyTime, startTimeUs);
+ meta->setInt32(kKeySelfID, mSelfID);
status = mWriter->start(meta.get());
break;
}
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h
index 5f02e00..2d3070e 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.h
+++ b/media/libmediaplayerservice/StagefrightRecorder.h
@@ -142,6 +142,7 @@
String8 mRemoteIp;
int32_t mLocalPort;
int32_t mRemotePort;
+ int32_t mSelfID;
int64_t mDurationRecordedUs;
int64_t mStartedRecordingUs;
@@ -227,6 +228,7 @@
status_t setParamRtpLocalPort(int32_t localPort);
status_t setParamRtpRemoteIp(const String8 &remoteIp);
status_t setParamRtpRemotePort(int32_t remotePort);
+ status_t setParamSelfID(int32_t selfID);
void clipVideoBitRate();
void clipVideoFrameRate();
void clipVideoFrameWidth();
diff --git a/media/libmediaplayerservice/nuplayer/RTPSource.cpp b/media/libmediaplayerservice/nuplayer/RTPSource.cpp
index 9bb4cb7..4b1b164 100644
--- a/media/libmediaplayerservice/nuplayer/RTPSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/RTPSource.cpp
@@ -109,6 +109,7 @@
notify->setSize("trackIndex", i);
// index(i) should be started from 1. 0 is reserved for [root]
mRTPConn->addStream(sockRtp, sockRtcp, desc, i + 1, notify, false);
+ mRTPConn->setSelfID(info->mSelfID);
info->mRTPSocket = sockRtp;
info->mRTCPSocket = sockRtcp;
@@ -662,6 +663,8 @@
} else if (key == "rtp-param-rtp-timeout") {
} else if (key == "rtp-param-rtcp-timeout") {
} else if (key == "rtp-param-time-scale") {
+ } else if (key == "rtp-param-self-id") {
+ info->mSelfID = atoi(value);
}
return OK;
diff --git a/media/libmediaplayerservice/nuplayer/RTPSource.h b/media/libmediaplayerservice/nuplayer/RTPSource.h
index 8ee6598..1aafda7 100644
--- a/media/libmediaplayerservice/nuplayer/RTPSource.h
+++ b/media/libmediaplayerservice/nuplayer/RTPSource.h
@@ -112,6 +112,9 @@
int32_t mTimeScale;
int32_t mAS;
+ /* Unique ID indicates itself */
+ uint32_t mSelfID;
+
/* a copy of TrackInfo in RTSPSource */
sp<AnotherPacketSource> mSource;
uint32_t mRTPTime;