void removeMediaSource(int id);
IMediaSourceBin* getMediaSource(unsigned int id);
+ bool getCanSendPacket() { return _canSendPacket; }
protected:
void linkMediaSourceToMuxer(GstElement* mux);
std::map<unsigned int, std::unique_ptr<IMediaSourceBin>> _mediaSources;
bool _asyncStart = false;
+ bool _canSendPacket = true;
};
} // namespace
void startRtspServer();
void stopRtspServer();
- static void _clientConnectedCb(GstRTSPServer* server, GstRTSPClient* client);
+ static void _clientConnectedCb(GstRTSPServer* server, GstRTSPClient* client, gpointer userData);
static void _mediaConstructedCb(GstRTSPMediaFactory* factory, GstRTSPMedia* media, gpointer userData);
static void _mediaConfigureCb(GstRTSPMediaFactory* factory, GstRTSPMedia* media, gpointer data);
static void _mediaPreparedCb(GstRTSPMedia* media, gpointer data);
Name: capi-media-transporter
Summary: A Media Transporter library in Tizen Native API
-Version: 1.0.28
+Version: 1.0.29
Release: 0
Group: Multimedia/API
License: Apache-2.0
MediaTransporterSender* sender = dynamic_cast<MediaTransporterSender*>(handle->base.get());
RET_VAL_IF(!sender, MTPR_ERROR_INVALID_OPERATION, "only sender support this api!!!");
+ if (!sender->getCanSendPacket())
+ return MTPR_ERROR_NONE;
+
MediaSourceBinMediaPacket* mediaPacketSourceBIn = dynamic_cast<MediaSourceBinMediaPacket*>(sender->getMediaSource(source_id));
RET_VAL_IF(!mediaPacketSourceBIn, MTPR_ERROR_INVALID_PARAMETER, "Invalid source id");
{
gst::_setPipelineState(_gst.pipeline, GST_STATE_PLAYING,
MediaTransporterIni::get().general().timeout, _asyncStart);
+ _canSendPacket = true;
}
void MediaTransporterSenderRist::stopPipeline()
{
_ristSink = NULL;
+ _canSendPacket = false;
gst::_setPipelineState(_gst.pipeline, GST_STATE_NULL,
MediaTransporterIni::get().general().timeout);
}
MediaTransporterSenderRtsp::MediaTransporterSenderRtsp()
{
+ _canSendPacket = false;
LOG_DEBUG("ctor: %p", this);
}
void MediaTransporterSenderRtsp::stopPipeline()
{
+ _canSendPacket = false;
if (_rtspPipeline) {
GstBus* bus = gst_pipeline_get_bus(GST_PIPELINE(_rtspPipeline));
gst_bus_set_sync_handler(bus, NULL, NULL, NULL);
gst_object_unref(_rtspPipeline);
_rtspPipeline = NULL;
}
-
stopRtspServer();
removeIdleEventSource();
}
gst_rtsp_server_set_address(GST_RTSP_SERVER(server), ipAddr.c_str());
gst_rtsp_server_set_service(GST_RTSP_SERVER(server), portNum.c_str());
- g_signal_connect(server, "client-connected", G_CALLBACK(_clientConnectedCb), NULL);
+ g_signal_connect(server, "client-connected", G_CALLBACK(_clientConnectedCb), this);
GstRTSPMountPoints* mounts = gst_rtsp_server_get_mount_points(server);
_rtspMountPoint.clear();
}
-void MediaTransporterSenderRtsp::_clientConnectedCb(GstRTSPServer* server, GstRTSPClient* client)
+void MediaTransporterSenderRtsp::_clientConnectedCb(GstRTSPServer* server, GstRTSPClient* client, gpointer userData)
{
+ auto mtprSenderRtsp = static_cast<MediaTransporterSenderRtsp*>(userData);
LOG_DEBUG("client connected %p", client);
+
+ mtprSenderRtsp->_canSendPacket = true;
}
void MediaTransporterSenderRtsp::_mediaConstructedCb(GstRTSPMediaFactory* factory, GstRTSPMedia* media, gpointer userData)
{
gst::_setPipelineState(_gst.pipeline, GST_STATE_PLAYING,
MediaTransporterIni::get().general().timeout, _asyncStart);
+ _canSendPacket = true;
startStatsMonitoring();
}
stopStatsMonitoring();
_srtSink = NULL;
+ _canSendPacket = false;
gst::_setPipelineState(_gst.pipeline, GST_STATE_NULL,
MediaTransporterIni::get().general().timeout);
}
{
gst::_setPipelineState(_gst.pipeline, GST_STATE_PLAYING,
MediaTransporterIni::get().general().timeout, _asyncStart);
+ _canSendPacket = true;
}
void MediaTransporterSenderToServerRtsp::stopPipeline()
{
_rtspSink = NULL;
+ _canSendPacket = false;
gst::_setPipelineState(_gst.pipeline, GST_STATE_NULL,
MediaTransporterIni::get().general().timeout);
}