Offshore Dedicated Server | Offshore VOD Server | Offshore IPTV Server | Offshore Streaming Server | Unmetered Bandwidth | BTC Accepted | NewProxyLists

Offshore Dedicated Server | Offshore VOD Server | Offshore IPTV Server | Offshore Streaming Server | Unmetered Bandwidth | BTC Accepted
———————————————————-
SERVERTRAFFICWEB – we are selling Ukraine 100% DMCA Ignore Server, With 600+ Gbps of IP traffic and Official LIP status from RIPE NCC Volia. we rank as one of the biggest IP networks in Ukraine!

Live Chat :- https://www.servertrafficweb.com/
Contact Us :- contact@servertrafficweb.com
Stay Connected with Skype:- servertrafficweb24
———————————————————-
Offshore 100% DMCA ignore (Copyright ignore)Models in Stock Right Now! Accepted all major payment method

  • CPU: Dual Intel Xeon E5-2620 Top Model
  • RAM: 64 GB
  • Storage: 2 TB HDD SATA
  • IPv4: 1
  • Uplink: 1 Gbits Dedicated Port Speed
  • Unmetered Bandwidth
  • 100% DMCA ignored (Dark fiber)
  • Unshared Port
  • 10 Gbps DDOS Protection
  • RAID Controller Card
  • No Extra Setup Fees
  • Ukaine Location
  • Support all OS/1 IPv4 Total
  • Price=230 Euros Per Month
  • ORDER NOW

  • CPU: Dual Intel Xeon E5-2620 Top Model
  • RAM: 64 GB
  • Storage: 2 TB HDD SATA
  • IPv4: 1
  • Uplink: 2 Gbits Dedicated Port Speed
  • Unmetered Bandwidth
  • 100% DMCA ignored (Dark fiber)
  • Unshared Port
  • 10 Gbps DDOS Protection
  • RAID Controller Card
  • No Extra Setup Fees
  • Ukaine Location
  • Support all OS/1 IPv4 Total
  • Price=325 Euros Per Month
  • ORDER NOW

  • CPU: Dual Intel Xeon E5-2620 Top Model
  • RAM: 96 GB
  • Storage: 1x 2TB SATA
  • IPv4: 1
  • Uplink: 10Gbps Dedicated Uplink With 5 Gbits Up/5 Gbits Down
  • Unmetered Bandwidth
  • 100% DMCA ignored (Dark fiber)
  • Unshared Port
  • 10 Gbps DDOS Protection
  • RAID Controller Card
  • No Extra Setup Fees
  • Ukaine Location
  • Support all OS/3 IPv4 Total
  • Price=830 Euros Per Month
  • ORDER NOW

  • CPU: Dual Intel Xeon E5-2650 Top Model
  • RAM: 128 GB
  • Storage: 1x 2TB SATA
  • IPv4: 1
  • Uplink: 10Gbps Dedicated Uplink With 10 Gbits Up/10 Gbits Down
  • Unmetered Bandwidth
  • 100% DMCA ignored (Dark fiber)
  • Unshared Port
  • 10 Gbps DDOS Protection
  • RAID Controller Card
  • No Extra Setup Fees
  • Ukaine Location
  • Support all OS/1 IPv4 Total
  • Price=1230 Euros Per Month
  • ORDER NOW

  • DELL Chasis
  • 2x Dual Intel Xeon E5-2670v3(24 Core) Top Model
  • (30M Cache, 2.30 GHz-3.10 GHz)
  • 256 GB RAM DDR4
  • 2TB SATA Drive or 500 GB NvME Disk
  • 10 Gbits Dedicated Port Speed
  • 10 Gbits NIC Card
  • Unlimited Bandwidth
  • Unshared Port
  • 10 Gbps DDOS Protection
  • Support All OS
  • 100% DMCA ignored (Dark Fiber)
  • Offshore Location
  • No Extra Setup Fees
  • RAID Controller Card
  • Price=1395 Euros Per Month
  • ORDER NOW

Custom Plans possible As Per Clients need
SSD Possible but Extra Cost
SSD Possible as per client needs like 250 GB SSD To Up to 20 TB SSD

——————————————————————————

FAQ – OUR QUESTIONS? WE GOT ANSWERS!

1) WHICH PAYMENT METHODS ARE ACCEPTED ?
We accept Paypal, Payza, Bitcoin, Skrill, Webmoney, Payoneer Perfect Money, PayUMoney, Bank Transfer, You can also pay us using your credit/debit cards with Paypal, Payza, PayuMoney.

2) SETUP TIME ?
All Offshore Dedicated Servers plans activated within 12-24 hours, we generally activate them within the Same Day. Because Generally, We Are Online So We Will Make As Faster As We Can.

3) DO YOU PROVIDE DDOS PROTECTION ON YOURS DMCA IGNORE DEDICATED SERVERS?
Yes, Our All Servers Protected With Free DDOS Protection Upto 10 Gbits. in case if you need additional protection you can purchase our Protected IP, and have many Various Options contact us for a quota via Skype/Telegram/Ticket /LiveChat.

4) HOW WE HANDLE ALL DMCA FOR STREAMING SERVERS ?
Our Offshore DMCA ignores Servers Located in Ukraine. So We follow only Ukraine Government Law. as long as Ukraine does not follow DMCA law And not Force providers to takedown but need to make sure that have to comply with all Ukraine Government Rules.

5) DO YOU PROVIDE MANAGED SUPPORT & SERVICE
Yes, We offer a full variety of managed services Like From Servers Administrations to Management. It’s Depending on the client’s Requirement case you can contact us for a quote.

6) WHERE ARE THE SERVERS HOSTED ?
Our Offshore DMCA ignores Servers hosted in big data centers – VoliaDC, located in Kyiv, Ukraine. if you have more Our Telegram=@ServerTrafficweb questions Add us on Skype=live:servertrafficweb24

————————————————————————————————–

Server Trafficweb – Affordable and Quality Dedicated Servers Solutions
24/7/365 Technical Support Including Livechat Technical Support

Live Chat :- https://www.servertrafficweb.com/
Contact Us :- contact@servertrafficweb.com
Stay Connected with Skype :- servertrafficweb24

Cloudream.cloud – Streaming & Download – File Hosting – Platform With Affiliate Program | NewProxyLists

Hi WJucntion.
We are Cloudream.cloud , one Streaming & Download platform without limits, file storage, backup and much more.

About:

  • We offer Unlimited Storage/Traffic.
  • No Premium Needed, Everything is Free.
  • No Download Speed Limits.
  • Legal Adult Content are Allowed.*
  • We Have Affiliate Program. (CloudPartners.club)

FAQ:
What is the minimum Payout:

– Minimum Payout is just $10 USD.

What is the Earning Rates:
– You can check our rates offer here.

How long do you host my files:
– Files will be deleted after 60 days of inactivity.

Where do you send Payments:
– Payments are made via PayPal for now.

*For adult content you need contact us via the appropriate contact form.

Contact/Support:
E-mail: cloudream.cloud@gmail.com
Web: cloudream.cloud

Good day,
Gabriel D.

 

PieShare.me – File Storage Service | Streaming & Download Platform | Encrypted & Anonymous | Affiliate Program | NewProxyLists


PieShare

Hello WJ community,

After a successful Image Hosting campaign, we have launched PieShare.me , a new File Hosting service with a partner program.

What We Offer:

  • 55% Initial Sale Affiliate Commission + 45% Rebill Commission with Our PPS Affiliate Program
  • 5% Reward of Your Each Website Sale
  • 1TB Storage for Registered Users & 3GB for Premium (Storage is expandable for Active Affiliate Partners)
  • 5GB Upload Size for Registered Users & 10GB Upload Size for Premium
  • Support themaCreator, Multi Drag & Drop and Remote Upload
  • Advanced Affiliate Statistic
  • 90 Day Inactive File Deletion for Free Users & Lifetime Storage without Deletion for Premium
  • High Speed & Anonymous Downloads and Streaming Video Playback for Premium
  • Recommended Videos and Screenshot Thumbnail Previews or Premium

Affiliate Rules:

  • One account per user, shared accounts or shared premiums are immediately suspended without warning
  • Payouts are Processed Using PayPal , Webmoney, BTC (BitCoin), (More option will be added in future)
  • Minimum payout amount: 20 USD, We pay every working day after a hold time period expire
  • We reserve the right to modify the Rewards program at any time without prior notice
  • Please read our Terms of Service for a more detailed overview of the rules
  • We appreciate feedback – please contact us with any queries.

Note:
We Do Allow Legal Adult & NSFW Files but We Strictly Prohibit Uploading Child Abusive & Other Illegal Material. Affiliate Partner Should Agree to Follow Our TOS otherwise We have to Suspend user from Our Service & Report to Legal Authorities.

WJ support: @kiboboss
Telegram: @pieshare

Create Live Streaming server

I want create Streaming server, i have more than 100K online users.
this is the first time that i will use servers for Streaming, so i want… | Read the rest of https://www.webhostingtalk.com/showthread.php?t=1841678&goto=newpost

Moko IPTV Player – IPTV Video Streaming Website

Admin submitted a new resource:

Moko IPTV Player – IPTV Video Streaming Website – Moko IPTV Player – IPTV Video Streaming Website

View attachment 32421

TEST BEFORE BUYING!!! Make sure you test your m3u playlist with demo before buying. Buying means you understand that streams that you don’t own might not play…

Read more

.

architecture – Auth-protecting video streaming using tokens but not directly on the server

I am the developer of a video streaming website and we need to secure our videos using tokens.

The issue is that videos are hosted on 100 different servers and each uses a lot of bandwidth every month.
Also, they use different web servers to serve videos: some use Apache, others do use Nginx. Some do not support running programming languages inside servers.

One could develop a token-based authentication for each server, placed between user’s requests and the web server serving videos.
We could, but there are too many servers with too different needs and in the future, there will be more.
Also, as I said, some do not support running programming languages.

We thought of putting a middleware/”proxy” server between the video servers and the user’s request. That could be okay, but we have too many requests and so we should use multiple proxy middleware servers and double the used bandwidth because we would then have two different servers who serve the same file, two times. And video buffering latency would be an issue too.

So, what can we try to do? Is there a way to verify a token, maybe with a proxy middleware server, but then serving videos from the video server itself?

Something like this:
user requests authorization -> proxy middleware is called for authorization -> user gets authorized -> user can now request video servers to get video content in streaming

video streaming – How to use server_name with stream NGINX?

Current setup as follows:

stream  {
    server {
        server_name stream.kingdomgame.org; # this line is resulting in an error
        proxy_pass http://localhost:1935;
    }
}

Works just fine without server_name, but I’d like to use a domain if possible.

Looking for Best Theme template or script for Online Movie Streaming like popcornflix or fmovies like that

Looking for Best Theme template or script for Online Movie Streaming like popcornflix or fmovies like that,

Please suggest best one if someone using already

streaming algorithm – Solving number of distinct elements in $O(frac{nl}{p})$ space complexity with $2p$ passes over data

Suppose there is an n-element stream with elements from ${0,1}^l$ which means each element is in set ${0, … , 2^l-1}$. Also may assume $2^l >n^2$. How can i with $2p$ passes over the data (for $p in {1, … , 2^l} $) solve the number of distinct elements problem using only $O(frac{n}{p}l)$ bits of memory. Not looking for probabilistic algorithm.

c++ – Indicating a lost signal when streaming live video with GStreamer and Qt

The goal of the code is to display a live camera feed sent by GStreamer over UDP, and to give an indication of when the signal is lost by displaying a static blue screen instead of the last frozen frame. Qt is used to display the image, and to provide a label, and a button for taking snapshots.

I would be interested in any suggestions for improvements, but especially for improving speed and efficiency.

(main.cpp)

// For testing: gst-launch-1.0 videotestsrc ! video/x-raw,format=GRAY8 ! videoconvert ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink host=224.1.1.1 port=5000

// It seems that g_signal_connect needs to be called before QObject::connect.

#include <QApplication>

#include <QCommandLineParser>

#include <iostream>

#include "mainwindow.h"
#include "acquisitiontype.h"

int main(int argc, char *argv()) {
    QApplication app(argc, argv);

    QCommandLineParser parser;

    QString label_font;
    const QString default_label_font = "Courier";

    qreal label_point_size;
    const QString default_label_point_size = "14";
    const qreal min_label_point_size = 6;
    const qreal max_label_point_size = 72;

    QStringList args;

    const unsigned short expected_args_count = 3;

    QString address;
    QString port;
    QString label_text;


    parser.addHelpOption();

    QCommandLineOption label_fontOption("f", "Label font", "font", default_label_font);
    parser.addOption(label_fontOption);

    QCommandLineOption label_point_sizeOption("s", "Label point size", "size", default_label_point_size);
    parser.addOption(label_point_sizeOption);

    parser.addPositionalArgument("address", "Address");
    parser.addPositionalArgument("port", "Port");
    parser.addPositionalArgument("label", "Label text");

    parser.process(app);

    label_font = parser.value(label_fontOption);

    label_point_size = parser.value(label_point_sizeOption).toDouble();
    label_point_size = label_point_size > min_label_point_size ? label_point_size : min_label_point_size;
    label_point_size = label_point_size < max_label_point_size ? label_point_size : max_label_point_size;

    args = parser.positionalArguments();

    if (args.count() < expected_args_count) {
        std::cout << parser.helpText().toLatin1().data() << std::endl;
        std::cout << "error: too few arguments" << std::endl;
        return -1;
    }
    else if (args.count() > expected_args_count) {
        std::cout << parser.helpText().toLatin1().data() << std::endl;
        std::cout << "error: unrecognized arguments: " << QStringList(args.mid(expected_args_count, -1)).join(" ").toLatin1().data() << std::endl;
        return -1;
    }

    address = args.at(0);
    port = args.at(1);
    label_text = args.at(2);


    AcquisitionType acquisition(address.toLatin1(), port.toInt());

    MainWindow window(label_text, label_font, label_point_size);

    QObject::connect(&acquisition, SIGNAL(setData(const QPixmap&)), &window, SLOT(setData(const QPixmap&)));

    window.show();

    return app.exec();
}

(mainwindow.cpp)

#include "mainwindow.h"

MainWindow::MainWindow(QString label_text, QString label_font, qreal label_point_size) {
    QFont font;


    centralWidget = new QWidget;
    layout = new QVBoxLayout;
    labelWidget = new QLabel;
    imageWidget = new ImageType;
    buttonWidget = new QPushButton;
    dialogWidget = new QFileDialog;


    labelWidget->setText(label_text);
    font.setFamily(label_font);
    font.setPointSizeF(label_point_size);
    labelWidget->setFont(font);
    labelWidget->setAlignment(Qt::AlignHCenter);
    QSizePolicy labelWidget_size_policy(QSizePolicy::Preferred, QSizePolicy::Fixed);
    labelWidget->setSizePolicy(labelWidget_size_policy);

    layout->addWidget(labelWidget);


    layout->addWidget(imageWidget);


    QSizePolicy buttonWidget_size_policy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    buttonWidget->setSizePolicy(buttonWidget_size_policy);
    buttonWidget->setIcon(QIcon::fromTheme("camera-photo"));
    buttonWidget->setIconSize(QSize(24, 24));
    buttonWidget->setEnabled(false);

    layout->addWidget(buttonWidget);


    dialogWidget->setFileMode(QFileDialog::AnyFile);
    dialogWidget->setAcceptMode(QFileDialog::AcceptSave);
    dialogWidget->setNameFilter("Images (*.png)");
    dialogWidget->setDefaultSuffix(".png");


    QObject::connect(buttonWidget, SIGNAL(clicked()), imageWidget, SLOT(setSnapshot()));
    QObject::connect(buttonWidget, SIGNAL(clicked()), dialogWidget, SLOT(show()));
    QObject::connect(dialogWidget, SIGNAL(fileSelected(QString)), imageWidget, SLOT(saveSnapshot(QString)));


    centralWidget->setLayout(layout);

    setCentralWidget(centralWidget);

    setWindowTitle("GigE Camera - " + label_text);

    resize(500, 500);
}

void MainWindow::setData(const QPixmap& pixmap) {
    if (!pixmap.isNull()) {
        buttonWidget->setEnabled(true);
    }
    else {
        buttonWidget->setEnabled(false);
    }

    imageWidget->setData(pixmap);
}

(mainwindow.h)

#include "imagetype.h"

#include <QMainWindow>

#include <QVBoxLayout>

#include <QLabel>
#include <QPushButton>
#include <QFileDialog>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QString label_text, QString label_font, qreal label_point_size);

public slots:
    void setData(const QPixmap& pixmap);

private:
    QVBoxLayout* layout;
    QLabel* labelWidget;
    ImageType* imageWidget;
    QPushButton* buttonWidget;
    QFileDialog* dialogWidget;
    QWidget* centralWidget;
};

(acquisitiontype.cpp)

#include "acquisitiontype.h"

// From the documentation for the QImage constructor: "The buffer must remain valid throughout the life of the QImage and all copies that have not been modified or otherwise detached from the original buffer." This is why a QPixmap copy of the QImage is sent instead of the QImage. If the QImage is sent then the buffer is not valid at the end of this callback and before the QImage is used in the slot function. The QPixmap copy is not reliant on the buffer remaining valid.
GstFlowReturn AcquisitionType::new_sample_callback(GstAppSink* appsink, gstreamer_data* user_data) {
    GstSample* sample;
    GstCaps* caps;
    GstStructure* s;
    GstBuffer* buffer;
    GstMapInfo map;
    QImage image;
    QPixmap pixmap;
    int width;
    int height;


    sample = gst_app_sink_pull_sample(appsink);
    if (sample) {
        caps = gst_sample_get_caps(sample);
        if (caps) {
            s = gst_caps_get_structure(caps, 0);

            if (gst_structure_get_int(s, "width", &width) && gst_structure_get_int(s, "height", &height)) {
                buffer = gst_sample_get_buffer(sample);

                if (buffer) {
                    if (gst_buffer_map(buffer, &map, GST_MAP_READ)) {
                        //printf("have samplen");

                        image = QImage(map.data, width, height, QImage::Format_RGBX8888);
                        pixmap.convertFromImage(image);

                        gst_buffer_unmap(buffer, &map);
                    }
                }
            }
        }

        gst_sample_unref(sample);
    }

    emit (user_data->instance)->setData(pixmap);

    return GST_FLOW_OK;
}

GstPadProbeReturn AcquisitionType::udp_source_buffer_pad_probe_callback(GstPad* pad, GstPadProbeInfo* info, gstreamer_data* user_data) {
    (void) pad;
    (void) info;
    GstBus* bus;


    //printf("have datan");

    bus = gst_element_get_bus(user_data->pipeline);
    user_data->signal_handler_id = g_signal_connect(G_OBJECT(bus), "message::element", (GCallback) udp_source_timeout_callback, user_data);
    gst_object_unref(bus);

    return GST_PAD_PROBE_REMOVE;
}

void AcquisitionType::udp_source_timeout_callback(GstBus* bus, GstMessage* message, gstreamer_data* user_data) {
    const GstStructure* st = gst_message_get_structure(message);
    GstPad* pad;
    QPixmap pixmap;


    if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_ELEMENT) {
        if (gst_structure_has_name(st, "GstUDPSrcTimeout")) {
            //printf("no datan");

            // Sends a null pixmap.
            emit (user_data->instance)->setData(pixmap);

            g_signal_handler_disconnect(G_OBJECT(bus), user_data->signal_handler_id);

            pad = gst_element_get_static_pad(user_data->udp_source, "src");
            gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER, (GstPadProbeCallback) udp_source_buffer_pad_probe_callback, user_data, NULL);
            gst_object_unref(pad);
        }
    }
}

void AcquisitionType::bus_error_callback(GstBus* bus, GstMessage* message, gstreamer_data* user_data) {
    (void) bus;
    (void) user_data;
    GError* err;
    gchar* debug_info;


    gst_message_parse_error(message, &err, &debug_info);
    g_printerr("Error received from element %s: %sn", GST_OBJECT_NAME(message->src), err->message);
    g_printerr("Debugging information: %sn", debug_info ? debug_info : "none");
    g_clear_error(&err);
    g_free(debug_info);

    exit(-1);
}

AcquisitionType::AcquisitionType(char const* address, gint port) {
    GstStateChangeReturn ret;
    GstBus* bus;


    gst_init(NULL, NULL);


    data.instance = this;

    data.udp_source = gst_element_factory_make("udpsrc", "udp_source");
    g_object_set(G_OBJECT(data.udp_source),
        "address", address,
        "port", port,
        "caps", gst_caps_new_empty_simple("application/x-rtp"),
        "timeout", G_GUINT64_CONSTANT(1000000000),
        NULL);

    data.rtp_decoder = gst_element_factory_make("rtph264depay", "rtp_decoder");

    data.video_decoder = gst_element_factory_make("avdec_h264", "video_decoder");

    data.video_converter = gst_element_factory_make("videoconvert", "video_converter");

    data.app_sink = gst_element_factory_make("appsink", "app_sink");
    g_object_set(G_OBJECT(data.app_sink),
        "emit-signals", true,
    "max-buffers", G_GUINT64_CONSTANT(1),
        "drop", true,
        "caps", gst_caps_new_simple("video/x-raw", "format", G_TYPE_STRING, "RGBx", NULL),
        NULL);

    g_signal_connect(data.app_sink, "new-sample", (GCallback) new_sample_callback, &data);

    data.pipeline = gst_pipeline_new("pipeline");


    if (
        !data.pipeline ||
        !data.udp_source ||
        !data.rtp_decoder ||
        !data.video_decoder ||
        !data.video_converter ||
        !data.app_sink
        )
        {
            g_printerr("Not all elements could be created.n");
            exit(-1);
        }


    gst_bin_add_many(
        GST_BIN(data.pipeline),
        data.udp_source,
        data.rtp_decoder,
        data.video_decoder,
        data.video_converter,
        data.app_sink,
        NULL);


    if (gst_element_link_many(
        data.udp_source,
        data.rtp_decoder,
        data.video_decoder,
        data.video_converter,
        data.app_sink,
        NULL) != TRUE)
        {
            g_printerr("Elements could not be linked.n");
            gst_object_unref(data.pipeline);
            exit(-1);
        }


    bus = gst_element_get_bus(data.pipeline);
    gst_bus_add_signal_watch(bus);
    g_signal_connect(G_OBJECT(bus), "message::error", (GCallback) bus_error_callback, &data);
    data.signal_handler_id = g_signal_connect(G_OBJECT(bus), "message::element", (GCallback) udp_source_timeout_callback, &data);
    gst_object_unref(bus);


    ret = gst_element_set_state(data.pipeline, GST_STATE_PLAYING);
    if (ret == GST_STATE_CHANGE_FAILURE) {
        g_printerr("Unable to set the pipeline to the playing state.n");
        gst_object_unref(data.pipeline);
        exit(-1);
    }
}

AcquisitionType::~AcquisitionType() {
    GstBus* bus;


    gst_element_set_state(data.pipeline, GST_STATE_NULL);

    bus = gst_element_get_bus(data.pipeline);
    gst_bus_remove_signal_watch(bus);
    gst_object_unref(bus);

    gst_object_unref(data.pipeline);
}

(acquisitiontype.h)

#include <gst/gst.h>
#include <gst/app/gstappsink.h>

#include <QObject>

#include <QPixmap>

class AcquisitionType;

struct gstreamer_data {
    GstElement* pipeline;
    GstElement* udp_source;
    GstElement* rtp_decoder;
    GstElement* video_decoder;
    GstElement* video_converter;
    GstElement* app_sink;
    gulong signal_handler_id;
    AcquisitionType* instance;
};


class AcquisitionType : public QObject
{
    Q_OBJECT

public:
    AcquisitionType(char const* address, gint port);
    ~AcquisitionType();

signals:
    void setData(const QPixmap&);

private:
    static GstFlowReturn new_sample_callback(GstAppSink* appsink, gstreamer_data* user_data);
    static GstPadProbeReturn udp_source_buffer_pad_probe_callback(GstPad* pad, GstPadProbeInfo* info, gstreamer_data* user_data);
    static void udp_source_timeout_callback(GstBus* bus, GstMessage* message, gstreamer_data* user_data);
    static void bus_error_callback(GstBus* bus, GstMessage* message, gstreamer_data* user_data);

    gstreamer_data data;
};

(imagetype.cpp)

#include "imagetype.h"

#include <QPainter>

void ImageType::setData(const QPixmap& pixmap) {
    this->pixmap = pixmap;

    this->repaint();
}

void ImageType::setSnapshot() {
    this->snapshot = this->pixmap;
}

void ImageType::saveSnapshot(QString filename) {
    this->snapshot.save(filename, "PNG");
}

void ImageType::paintEvent(QPaintEvent* event) {
    (void) event;
    QPainter painter(this);
    QPixmap scaled;


    if (!pixmap.isNull()) {
        scaled = pixmap.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
        painter.drawPixmap(0, 0, scaled);
    }
    else {
        painter.fillRect(this->rect(), QColor("blue"));
    }
}

(imagetype.h)

#include <QWidget>

class ImageType : public QWidget
{
    Q_OBJECT

public:
    ImageType(QWidget* parent = nullptr) : QWidget(parent) {};
    void setData(const QPixmap& pixmap);
    void paintEvent(QPaintEvent* event);

public slots:
    void setSnapshot();
    void saveSnapshot(QString filename);

private:
    QPixmap pixmap;
    QPixmap snapshot;
};

(Qt project file)

#-------------------------------------------------
#
# Project created by QtCreator 2018-10-25T11:34:49
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = gst_gige_camera
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += 
        main.cpp 
        mainwindow.cpp 
        acquisitiontype.cpp 
        imagetype.cpp

HEADERS += 
        mainwindow.h 
        acquisitiontype.h 
        imagetype.h

INCLUDEPATH += $$system(pkg-config --cflags gstreamer-1.0)

QMAKE_CXXFLAGS += $$system(pkg-config --cflags gstreamer-1.0)

LIBS += $$system(pkg-config --libs gstreamer-1.0 gstreamer-app-1.0)

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target