Ich versuche, eine Streaming-Anwendung mithilfe von Boost mit Iostream zu machen, aber der Server trennt nicht den Bildrahmen in der Empfangsschleife, wird alles in einer Datei (schließt nicht die Datei und erhält weiterhin die anderen Frames in der gleichen Datei). Die einzige Lösung, die ich finden konnte, wurde ein Frame für die Verbindung gesendet, aber lässt das Streaming sehr langsam.Mehrere Dateien pro Verbindung mit Boost Iostream senden
derzeit Senden 1 Datei pro Verbindung und alles funktioniert (langsam auf Remote-Netzwerken)
ich will, es ändern, mehrere Dateien pro Verbindung zu senden (ich glaube, ich werde einen Gewinn in der Leistung haben), aber ich bin das oben erwähnte Problem haben.
die "/tmp/img.frame" muss
unter dem Code überschrieben Ich verwende (geändert nur eine Verbindung herstellen können)
void send_()
{
boost::scoped_ptr<screenshot> ptr_screen(new screenshot);
handle_connection = true;
boost::asio::io_service svc;
boost::asio::ip::tcp::iostream stream_(boost::asio::ip::tcp::resolver::query{ "127.0.0.1", "6293" });
boost::iostreams::filtering_ostream out;
out.push(boost::iostreams::zlib_compressor());
out.push(stream_);
while (handle_connection) {
ptr_screen->Start(); // get screen.jpg
std::ifstream ifs("screen.jpg", std::ios::binary);
out << ifs.rdbuf();
out.flush();
ifs.close();
}
}
void receiver_()
{
connection_handle = true;
try
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 6293);
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
boost::asio::ip::tcp::iostream stream;
boost::system::error_code ec;
acceptor.accept(*stream.rdbuf(), ec);
if(!stream) { return; }
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::zlib_decompressor());
in.push(stream);
while(connection_handle)
{
std::ofstream ofs("/tmp/img.frame", std::ios::binary); // must be overwritten
copy(in, ofs);
ofs.close();
}
}
catch (std::exception& e)
{
std::cerr << "\n[-] " << e.what() << std::endl;
}
}