[+] Android音视频接入成功
This commit is contained in:
@@ -182,7 +182,7 @@ public class MainActivity extends AppCompatActivity implements Serializable {
|
|||||||
}
|
}
|
||||||
this.threadHandler.post(() -> {
|
this.threadHandler.post(() -> {
|
||||||
// 进入房间
|
// 进入房间
|
||||||
Taoyao.taoyao.roomEnter("53a5d97d-2860-4659-9531-095bdecf3745", null);
|
Taoyao.taoyao.roomEnter("4f19f6fc-1763-499b-a352-d8c955af5a6e", null);
|
||||||
// Taoyao.taoyao.sessionCall("taoyao");
|
// Taoyao.taoyao.sessionCall("taoyao");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
#include "sdk/android/src/jni/pc/peer_connection.h"
|
#include "sdk/android/src/jni/pc/peer_connection.h"
|
||||||
@@ -16,6 +17,7 @@ namespace acgist {
|
|||||||
public:
|
public:
|
||||||
std::string roomId;
|
std::string roomId;
|
||||||
webrtc::PeerConnectionFactoryInterface* factory;
|
webrtc::PeerConnectionFactoryInterface* factory;
|
||||||
|
webrtc::PeerConnectionInterface::RTCConfiguration* rtcConfiguration;
|
||||||
mediasoupclient::Device* device;
|
mediasoupclient::Device* device;
|
||||||
mediasoupclient::SendTransport* sendTransport;
|
mediasoupclient::SendTransport* sendTransport;
|
||||||
mediasoupclient::RecvTransport* recvTransport;
|
mediasoupclient::RecvTransport* recvTransport;
|
||||||
|
|||||||
@@ -11,19 +11,19 @@ namespace acgist {
|
|||||||
public:
|
public:
|
||||||
jobject routerCallback;
|
jobject routerCallback;
|
||||||
public:
|
public:
|
||||||
void enterRoomCallback(JNIEnv* env, std::string rtpCapabilities, std::string sctpCapabilities);
|
void enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities);
|
||||||
void closeRoomCallback(JNIEnv* env);
|
void closeRoomCallback(JNIEnv* env);
|
||||||
void sendTransportConnectCallback(JNIEnv* env, std::string transportId, std::string dtlsParameters);
|
void sendTransportConnectCallback(JNIEnv* env, const std::string& transportId, const std::string& dtlsParameters);
|
||||||
void recvTransportConnectCallback(JNIEnv* env, std::string transportId, std::string dtlsParameters);
|
void recvTransportConnectCallback(JNIEnv* env, const std::string& transportId, const std::string& dtlsParameters);
|
||||||
std::string sendTransportProduceCallback(JNIEnv* env, std::string kind, std::string transportId, std::string rtpParameters);
|
std::string sendTransportProduceCallback(JNIEnv* env, const std::string& kind, const std::string& transportId, const std::string& rtpParameters);
|
||||||
void producerNewCallback(JNIEnv* env, std::string kind, std::string producerId, mediasoupclient::Producer* producerPointer, webrtc::MediaStreamTrackInterface* producerMediaTrackPointer);
|
void producerNewCallback(JNIEnv* env, const std::string& kind, const std::string& producerId, mediasoupclient::Producer* producerPointer, webrtc::MediaStreamTrackInterface* producerMediaTrackPointer);
|
||||||
void producerCloseCallback(JNIEnv* env, std::string producerId);
|
void producerCloseCallback(JNIEnv* env, const std::string& producerId);
|
||||||
void producerPauseCallback(JNIEnv* env, std::string producerId);
|
void producerPauseCallback(JNIEnv* env, const std::string& producerId);
|
||||||
void producerResumeCallback(JNIEnv* env, std::string producerId);
|
void producerResumeCallback(JNIEnv* env, const std::string& producerId);
|
||||||
void consumerNewCallback(JNIEnv* env, std::string message, mediasoupclient::Consumer* consumerPointer, webrtc::MediaStreamTrackInterface* consumerMediaTrackPointer);
|
void consumerNewCallback(JNIEnv* env, const std::string& message, mediasoupclient::Consumer* consumerPointer, webrtc::MediaStreamTrackInterface* consumerMediaTrackPointer);
|
||||||
void consumerCloseCallback(JNIEnv* env, std::string consumerId);
|
void consumerCloseCallback(JNIEnv* env, const std::string& consumerId);
|
||||||
void consumerPauseCallback(JNIEnv* env, std::string consumerId);
|
void consumerPauseCallback(JNIEnv* env, const std::string& consumerId);
|
||||||
void consumerResumeCallback(JNIEnv* env, std::string consumerId);
|
void consumerResumeCallback(JNIEnv* env, const std::string& consumerId);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
|
|
||||||
JavaVM* taoyaoJavaVM;
|
JavaVM* taoyaoJavaVM = nullptr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 非常重要
|
* 非常重要
|
||||||
|
|||||||
@@ -11,22 +11,24 @@ namespace acgist {
|
|||||||
explicit SendListener(Room* room) {
|
explicit SendListener(Room* room) {
|
||||||
this->room = room;
|
this->room = room;
|
||||||
}
|
}
|
||||||
|
virtual ~SendListener() {
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
||||||
const std::string& cTransportId = transport->GetId();
|
const std::string cTransportId = transport->GetId();
|
||||||
const std::string cDtlsParameters = dtlsParameters.dump();
|
const std::string cDtlsParameters = dtlsParameters.dump();
|
||||||
JNIEnv* env;
|
JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
} else {
|
// } else {
|
||||||
JavaVMAttachArgs args;
|
// JavaVMAttachArgs args;
|
||||||
|
// args.name = "C++Callback";
|
||||||
// args.version = JNI_VERSION_1_6;
|
// args.version = JNI_VERSION_1_6;
|
||||||
// args.name = "name";
|
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, &args);
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, &args);
|
// this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
// taoyaoJavaVM->DetachCurrentThread();
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
// }
|
||||||
}
|
|
||||||
std::promise <void> promise;
|
std::promise <void> promise;
|
||||||
promise.set_value();
|
promise.set_value();
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -37,17 +39,17 @@ namespace acgist {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::future<std::string> OnProduce(mediasoupclient::SendTransport* transport, const std::string& kind, nlohmann::json rtpParameters, const nlohmann::json& appData) override {
|
std::future<std::string> OnProduce(mediasoupclient::SendTransport* transport, const std::string& kind, nlohmann::json rtpParameters, const nlohmann::json& appData) override {
|
||||||
const std::string& cTransportId = transport->GetId();
|
|
||||||
const std::string cRtpParameters = rtpParameters.dump();
|
|
||||||
JNIEnv* env;
|
|
||||||
std::string result;
|
std::string result;
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
const std::string cTransportId = transport->GetId();
|
||||||
|
const std::string cRtpParameters = rtpParameters.dump();
|
||||||
|
JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
|
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
||||||
} else {
|
// } else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
// result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
// taoyaoJavaVM->DetachCurrentThread();
|
||||||
}
|
// }
|
||||||
std::promise <std::string> promise;
|
std::promise <std::string> promise;
|
||||||
promise.set_value(result);
|
promise.set_value(result);
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -70,18 +72,20 @@ namespace acgist {
|
|||||||
explicit RecvListener(Room* room) {
|
explicit RecvListener(Room* room) {
|
||||||
this->room = room;
|
this->room = room;
|
||||||
}
|
}
|
||||||
|
virtual ~RecvListener() {
|
||||||
|
}
|
||||||
|
|
||||||
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
||||||
const std::string& cTransportId = transport->GetId();
|
const std::string cTransportId = transport->GetId();
|
||||||
const std::string& cDtlsParameters = dtlsParameters.dump();
|
const std::string cDtlsParameters = dtlsParameters.dump();
|
||||||
JNIEnv* env;
|
JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
} else {
|
// } else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
// this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
// taoyaoJavaVM->DetachCurrentThread();
|
||||||
}
|
// }
|
||||||
std::promise <void> promise;
|
std::promise <void> promise;
|
||||||
promise.set_value();
|
promise.set_value();
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -101,17 +105,19 @@ namespace acgist {
|
|||||||
explicit ProducerListener(Room* room) {
|
explicit ProducerListener(Room* room) {
|
||||||
this->room = room;
|
this->room = room;
|
||||||
}
|
}
|
||||||
|
virtual ~ProducerListener() {
|
||||||
|
}
|
||||||
|
|
||||||
void OnTransportClose(mediasoupclient::Producer* producer) override {
|
void OnTransportClose(mediasoupclient::Producer* producer) override {
|
||||||
producer->Close();
|
producer->Close();
|
||||||
JNIEnv* env;
|
JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
this->room->producerCloseCallback(env, producer->GetId());
|
this->room->producerCloseCallback(env, producer->GetId());
|
||||||
} else {
|
// } else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
this->room->producerCloseCallback(env, producer->GetId());
|
// this->room->producerCloseCallback(env, producer->GetId());
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
// taoyaoJavaVM->DetachCurrentThread();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -125,17 +131,20 @@ namespace acgist {
|
|||||||
explicit ConsumerListener(Room* room) {
|
explicit ConsumerListener(Room* room) {
|
||||||
this->room = room;
|
this->room = room;
|
||||||
}
|
}
|
||||||
|
virtual ~ConsumerListener() {
|
||||||
|
// mediasoupclient::Consumer::Listener::~Listener();
|
||||||
|
}
|
||||||
|
|
||||||
void OnTransportClose(mediasoupclient::Consumer* consumer) override {
|
void OnTransportClose(mediasoupclient::Consumer* consumer) override {
|
||||||
consumer->Close();
|
consumer->Close();
|
||||||
JNIEnv* env;
|
JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
this->room->consumerCloseCallback(env, consumer->GetId());
|
this->room->consumerCloseCallback(env, consumer->GetId());
|
||||||
} else {
|
// } else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
this->room->consumerCloseCallback(env, consumer->GetId());
|
// this->room->consumerCloseCallback(env, consumer->GetId());
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
// taoyaoJavaVM->DetachCurrentThread();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -147,6 +156,7 @@ namespace acgist {
|
|||||||
this->routerCallback = routerCallback;
|
this->routerCallback = routerCallback;
|
||||||
this->roomId = roomId;
|
this->roomId = roomId;
|
||||||
this->factory = nullptr;
|
this->factory = nullptr;
|
||||||
|
this->rtcConfiguration = nullptr;
|
||||||
this->device = new mediasoupclient::Device();
|
this->device = new mediasoupclient::Device();
|
||||||
this->sendTransport = nullptr;
|
this->sendTransport = nullptr;
|
||||||
this->recvTransport = nullptr;
|
this->recvTransport = nullptr;
|
||||||
@@ -159,6 +169,7 @@ namespace acgist {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Room::~Room() {
|
Room::~Room() {
|
||||||
|
delete this->rtcConfiguration;
|
||||||
delete this->device;
|
delete this->device;
|
||||||
delete this->sendListener;
|
delete this->sendListener;
|
||||||
delete this->sendTransport;
|
delete this->sendTransport;
|
||||||
@@ -168,8 +179,8 @@ namespace acgist {
|
|||||||
delete this->videoProducer;
|
delete this->videoProducer;
|
||||||
delete this->producerListener;
|
delete this->producerListener;
|
||||||
delete this->consumerListener;
|
delete this->consumerListener;
|
||||||
JNIEnv* env;
|
JNIEnv* env = nullptr;
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
env->DeleteGlobalRef(this->routerCallback);
|
env->DeleteGlobalRef(this->routerCallback);
|
||||||
} else {
|
} else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
@@ -185,7 +196,7 @@ namespace acgist {
|
|||||||
webrtc::PeerConnectionInterface::RTCConfiguration& rtcConfiguration
|
webrtc::PeerConnectionInterface::RTCConfiguration& rtcConfiguration
|
||||||
) {
|
) {
|
||||||
this->factory = factory;
|
this->factory = factory;
|
||||||
// TODO:全局
|
this->rtcConfiguration = new webrtc::PeerConnectionInterface::RTCConfiguration(rtcConfiguration);
|
||||||
mediasoupclient::PeerConnection::Options options;
|
mediasoupclient::PeerConnection::Options options;
|
||||||
options.config = rtcConfiguration;
|
options.config = rtcConfiguration;
|
||||||
options.factory = factory;
|
options.factory = factory;
|
||||||
@@ -199,6 +210,7 @@ namespace acgist {
|
|||||||
void Room::createSendTransport(JNIEnv* env, const std::string& body) {
|
void Room::createSendTransport(JNIEnv* env, const std::string& body) {
|
||||||
nlohmann::json json = nlohmann::json::parse(body);
|
nlohmann::json json = nlohmann::json::parse(body);
|
||||||
mediasoupclient::PeerConnection::Options options;
|
mediasoupclient::PeerConnection::Options options;
|
||||||
|
options.config = *this->rtcConfiguration;
|
||||||
options.factory = this->factory;
|
options.factory = this->factory;
|
||||||
this->sendTransport = this->device->CreateSendTransport(
|
this->sendTransport = this->device->CreateSendTransport(
|
||||||
this->sendListener,
|
this->sendListener,
|
||||||
@@ -215,6 +227,7 @@ namespace acgist {
|
|||||||
void Room::createRecvTransport(JNIEnv* env, const std::string& body) {
|
void Room::createRecvTransport(JNIEnv* env, const std::string& body) {
|
||||||
nlohmann::json json = nlohmann::json::parse(body);
|
nlohmann::json json = nlohmann::json::parse(body);
|
||||||
mediasoupclient::PeerConnection::Options options;
|
mediasoupclient::PeerConnection::Options options;
|
||||||
|
options.config = *this->rtcConfiguration;
|
||||||
options.factory = this->factory;
|
options.factory = this->factory;
|
||||||
this->recvTransport = this->device->CreateRecvTransport(
|
this->recvTransport = this->device->CreateRecvTransport(
|
||||||
this->recvListener,
|
this->recvListener,
|
||||||
@@ -248,7 +261,7 @@ namespace acgist {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Room::mediaProduceVideo(JNIEnv* env, webrtc::MediaStreamInterface* mediaStream) {
|
void Room::mediaProduceVideo(JNIEnv* env, webrtc::MediaStreamInterface* mediaStream) {
|
||||||
if(this->device->CanProduce("video")) {
|
if(!this->device->CanProduce("video")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO:配置读取
|
// TODO:配置读取
|
||||||
@@ -364,9 +377,11 @@ namespace acgist {
|
|||||||
std::map<std::string, mediasoupclient::Consumer*>::iterator iterator;
|
std::map<std::string, mediasoupclient::Consumer*>::iterator iterator;
|
||||||
for (iterator = this->consumers.begin(); iterator != this->consumers.end(); iterator++) {
|
for (iterator = this->consumers.begin(); iterator != this->consumers.end(); iterator++) {
|
||||||
iterator->second->Close();
|
iterator->second->Close();
|
||||||
|
delete iterator->second;
|
||||||
}
|
}
|
||||||
// std::for_each(this->consumers.begin(), this->consumers.end(), [](mediasoupclient::Consumer* consumer) {
|
// std::for_each(this->consumers.begin(), this->consumers.end(), [](std::pair<std::string, mediasoupclient::Consumer*> entry) {
|
||||||
// consumer->Close();
|
// entry.second->Close();
|
||||||
|
// delete entry.second;
|
||||||
// });
|
// });
|
||||||
this->consumers.clear();
|
this->consumers.clear();
|
||||||
if(this->sendTransport != nullptr) {
|
if(this->sendTransport != nullptr) {
|
||||||
@@ -375,8 +390,9 @@ namespace acgist {
|
|||||||
if(this->recvTransport != nullptr) {
|
if(this->recvTransport != nullptr) {
|
||||||
this->recvTransport->Close();
|
this->recvTransport->Close();
|
||||||
}
|
}
|
||||||
JNIEnv* env;
|
JNIEnv* env = nullptr;
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_OK) {
|
// JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
this->closeRoomCallback(env);
|
this->closeRoomCallback(env);
|
||||||
} else {
|
} else {
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
||||||
@@ -450,15 +466,13 @@ namespace acgist {
|
|||||||
extern "C" JNIEXPORT void JNICALL
|
extern "C" JNIEXPORT void JNICALL
|
||||||
Java_com_acgist_taoyao_media_client_Room_nativeMediaProduceAudio(JNIEnv* env, jobject me, jlong nativeRoomPointer, jlong mediaStreamPointer) {
|
Java_com_acgist_taoyao_media_client_Room_nativeMediaProduceAudio(JNIEnv* env, jobject me, jlong nativeRoomPointer, jlong mediaStreamPointer) {
|
||||||
Room* room = (Room*) nativeRoomPointer;
|
Room* room = (Room*) nativeRoomPointer;
|
||||||
webrtc::MediaStreamInterface* mediaStream = (webrtc::MediaStreamInterface*) mediaStreamPointer;
|
room->mediaProduceAudio(env, (webrtc::MediaStreamInterface*) mediaStreamPointer);
|
||||||
room->mediaProduceAudio(env, mediaStream);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" JNIEXPORT void JNICALL
|
extern "C" JNIEXPORT void JNICALL
|
||||||
Java_com_acgist_taoyao_media_client_Room_nativeMediaProduceVideo(JNIEnv* env, jobject me, jlong nativeRoomPointer, jlong mediaStreamPointer) {
|
Java_com_acgist_taoyao_media_client_Room_nativeMediaProduceVideo(JNIEnv* env, jobject me, jlong nativeRoomPointer, jlong mediaStreamPointer) {
|
||||||
Room* room = (Room*) nativeRoomPointer;
|
Room* room = (Room*) nativeRoomPointer;
|
||||||
webrtc::MediaStreamInterface* mediaStream = (webrtc::MediaStreamInterface*) mediaStreamPointer;
|
room->mediaProduceVideo(env, (webrtc::MediaStreamInterface*) mediaStreamPointer);
|
||||||
room->mediaProduceVideo(env, mediaStream);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" JNIEXPORT void JNICALL
|
extern "C" JNIEXPORT void JNICALL
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#include "RouterCallback.hpp"
|
#include "RouterCallback.hpp"
|
||||||
|
#include <locale>
|
||||||
|
#include <codecvt>
|
||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
|
|
||||||
void RouterCallback::enterRoomCallback(JNIEnv* env, std::string rtpCapabilities, std::string sctpCapabilities) {
|
void RouterCallback::enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "enterRoomCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "enterRoomCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
const char* cRtpCapabilities = rtpCapabilities.data();
|
const char* cRtpCapabilities = rtpCapabilities.data();
|
||||||
@@ -30,7 +32,7 @@ namespace acgist {
|
|||||||
env->DeleteLocalRef(jCallbackClazz);
|
env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::sendTransportConnectCallback(JNIEnv* env, std::string transportId, std::string dtlsParameters) {
|
void RouterCallback::sendTransportConnectCallback(JNIEnv* env, const std::string& transportId, const std::string& dtlsParameters) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID sendTransportConnectCallback = env->GetMethodID(jCallbackClazz, "sendTransportConnectCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
jmethodID sendTransportConnectCallback = env->GetMethodID(jCallbackClazz, "sendTransportConnectCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
const char* cTransportId = transportId.data();
|
const char* cTransportId = transportId.data();
|
||||||
@@ -48,7 +50,7 @@ namespace acgist {
|
|||||||
env->DeleteLocalRef(jCallbackClazz);
|
env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::recvTransportConnectCallback(JNIEnv* env, std::string transportId, std::string dtlsParameters) {
|
void RouterCallback::recvTransportConnectCallback(JNIEnv* env, const std::string& transportId, const std::string& dtlsParameters) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "recvTransportConnectCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "recvTransportConnectCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
const char* cTransportId = transportId.data();
|
const char* cTransportId = transportId.data();
|
||||||
@@ -66,14 +68,14 @@ namespace acgist {
|
|||||||
env->DeleteLocalRef(jCallbackClazz);
|
env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string RouterCallback::sendTransportProduceCallback(JNIEnv* env, std::string kind, std::string transportId, std::string rtpParameters) {
|
std::string RouterCallback::sendTransportProduceCallback(JNIEnv* env, const std::string& kind, const std::string& transportId, const std::string& rtpParameters) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID sendTransportProduceCallback = env->GetMethodID(jCallbackClazz, "sendTransportProduceCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
jmethodID sendTransportProduceCallback = env->GetMethodID(jCallbackClazz, "sendTransportProduceCallback", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
|
||||||
const char* cKind = kind.data();
|
const char* cKind = kind.data();
|
||||||
const char* cTransportId = transportId.data();
|
const char* cTransportId = transportId.data();
|
||||||
const char* cRtpParameters = rtpParameters.data();
|
const char* cRtpParameters = rtpParameters.data();
|
||||||
jstring jKind = env->NewStringUTF(cKind);
|
|
||||||
jstring jTransportId = env->NewStringUTF(cTransportId);
|
jstring jTransportId = env->NewStringUTF(cTransportId);
|
||||||
|
jstring jKind = env->NewStringUTF(cKind);
|
||||||
jstring jRtpParameters = env->NewStringUTF(cRtpParameters);
|
jstring jRtpParameters = env->NewStringUTF(cRtpParameters);
|
||||||
jstring jResult = (jstring) env->CallObjectMethod(
|
jstring jResult = (jstring) env->CallObjectMethod(
|
||||||
this->routerCallback,
|
this->routerCallback,
|
||||||
@@ -88,7 +90,7 @@ namespace acgist {
|
|||||||
}
|
}
|
||||||
const char* result = env->GetStringUTFChars(jResult, nullptr);
|
const char* result = env->GetStringUTFChars(jResult, nullptr);
|
||||||
env->DeleteLocalRef(jResult);
|
env->DeleteLocalRef(jResult);
|
||||||
env->ReleaseStringUTFChars(jResult, result);
|
// env->ReleaseStringUTFChars(jResult, result);
|
||||||
env->DeleteLocalRef(jKind);
|
env->DeleteLocalRef(jKind);
|
||||||
env->DeleteLocalRef(jTransportId);
|
env->DeleteLocalRef(jTransportId);
|
||||||
env->DeleteLocalRef(jRtpParameters);
|
env->DeleteLocalRef(jRtpParameters);
|
||||||
@@ -96,9 +98,9 @@ namespace acgist {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::producerNewCallback(JNIEnv* env, std::string kind, std::string producerId, mediasoupclient::Producer* producerPointer, webrtc::MediaStreamTrackInterface* producerMediaTrackPointer) {
|
void RouterCallback::producerNewCallback(JNIEnv* env, const std::string& kind, const std::string& producerId, mediasoupclient::Producer* producerPointer, webrtc::MediaStreamTrackInterface* producerMediaTrackPointer) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID producerNewCallback = env->GetMethodID(jCallbackClazz, "producerNewCallback", "(Ljava/lang/String;java/lang/String;J;J;)V");
|
jmethodID producerNewCallback = env->GetMethodID(jCallbackClazz, "producerNewCallback", "(Ljava/lang/String;Ljava/lang/String;JJ)V");
|
||||||
const char* cKind = kind.data();
|
const char* cKind = kind.data();
|
||||||
jstring jKind = env->NewStringUTF(cKind);
|
jstring jKind = env->NewStringUTF(cKind);
|
||||||
const char* cProducerId = producerId.data();
|
const char* cProducerId = producerId.data();
|
||||||
@@ -113,18 +115,18 @@ namespace acgist {
|
|||||||
);
|
);
|
||||||
env->DeleteLocalRef(jKind);
|
env->DeleteLocalRef(jKind);
|
||||||
env->DeleteLocalRef(jProducerId);
|
env->DeleteLocalRef(jProducerId);
|
||||||
env->DeleteLocalRef(jCallbackClazz);
|
// env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::producerCloseCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::producerCloseCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
void RouterCallback::producerPauseCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::producerPauseCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
void RouterCallback::producerResumeCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::producerResumeCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
void RouterCallback::consumerNewCallback(JNIEnv* env, std::string message, mediasoupclient::Consumer* consumerPointer, webrtc::MediaStreamTrackInterface* consumerMediaTrackPointer) {
|
void RouterCallback::consumerNewCallback(JNIEnv* env, const std::string& message, mediasoupclient::Consumer* consumerPointer, webrtc::MediaStreamTrackInterface* consumerMediaTrackPointer) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID consumerNewCallback = env->GetMethodID(jCallbackClazz, "consumerNewCallback", "(Ljava/lang/String;J;J;)V");
|
jmethodID consumerNewCallback = env->GetMethodID(jCallbackClazz, "consumerNewCallback", "(Ljava/lang/String;JJ)V");
|
||||||
const char* cMessage = message.data();
|
const char* cMessage = message.data();
|
||||||
jstring jMessage = env->NewStringUTF(cMessage);
|
jstring jMessage = env->NewStringUTF(cMessage);
|
||||||
env->CallVoidMethod(
|
env->CallVoidMethod(
|
||||||
@@ -138,10 +140,10 @@ namespace acgist {
|
|||||||
env->DeleteLocalRef(jCallbackClazz);
|
env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::consumerCloseCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::consumerCloseCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
void RouterCallback::consumerPauseCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::consumerPauseCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
void RouterCallback::consumerResumeCallback(JNIEnv* env, std::string producerId) {}
|
void RouterCallback::consumerResumeCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user