Qt ffmpeg многоканальный стрим видео

427
21 октября 2017, 18:23

Всем доброго времени суток, столкнулся с такой проблемой, в приложении получаю данные с камер в виде кадров, пытаюсь реализовать многоканальный стрим изображений через rtsp, на каждый канал выделяю отдельную функцию для стрима с разными названиями каналов и разными портами, в результате все изображения попадают в один стрим, в следствии чего отображается каша. каналы воспроизвожу при помощи ffplay функция для стрима

AVCodecID codecID    = AV_CODEC_ID_H264;
AVCodec* codec;
AVCodecContext* codecCtx;
AVPixelFormat pixfmt = AV_PIX_FMT_GRAY8;
codec    = avcodec_find_encoder(codecID);
codecCtx = avcodec_alloc_context3(codec);  
codecCtx->width         = HorFrameSize;
codecCtx->height        = VerFrameSize;
//codecCtx->time_base = (AVRational ) { 1, 25 };
codecCtx->time_base.num = 1;
codecCtx->time_base.den = 25;
codecCtx->gop_size      = 25;
codecCtx->max_b_frames  = -1;
codecCtx->pix_fmt       = AV_PIX_FMT_YUV420P;
codecCtx->codec_type    = AVMEDIA_TYPE_VIDEO;
if (codecID == AV_CODEC_ID_H264)
{
    av_opt_set(codecCtx->priv_data, "preset", "ultrafast", 0);
    av_opt_set(codecCtx->priv_data, "tune", "zerolatency", 0);
}
avcodec_open2(codecCtx, codec, NULL);
//Init the Frame containing our raw data
AVFrame* frame;
frame         = av_frame_alloc();
frame->format   = pixfmt;
frame->width  = codecCtx->width;
frame->height = codecCtx->height;
av_image_alloc(frame->data, frame->linesize, frame->width, frame->height, codecCtx->pix_fmt,32);
//Init the format context
AVFormatContext* fmtCtx  = avformat_alloc_context();
AVOutputFormat*  format  = av_guess_format("rtsp", NULL, NULL);
avformat_alloc_output_context2(&fmtCtx, format, format->name, "rtsp://192.168.138.102:8550/0");
avio_open(&fmtCtx->pb, fmtCtx->filename, AVIO_FLAG_WRITE);
//Configure the AVStream for the output format context
struct AVStream* stream      = avformat_new_stream(fmtCtx, codec);
avcodec_parameters_from_context(stream->codecpar, codecCtx);
stream->time_base.num        = 1;
stream->time_base.den        = 25;
/* Rewrite the header */
avformat_write_header(fmtCtx, NULL);
SwsContext * ctx = sws_getContext(HorFrameSize, VerFrameSize, pixfmt, HorFrameSize, VerFrameSize,AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
QImage image ;
AVPacket pkt;
int j = 0;
for(int i = 0; ; i++)
{
    fflush(stdout);
    //av_read_frame (fmtCtx,&pkt);
    av_init_packet(&pkt);
    pkt.data = NULL;    // packet data will be allocated by the encoder
    pkt.size = 0;

    image.loadFromData ((const uchar*)Image,(int)ImageSize);
    uint8_t* rgbData = image.bits();
    uint8_t * inData[1] = { rgbData }; // RGB24 have one plane
    int inLinesize[1] = { HorFrameSize }; // RGB stride
    sws_scale(ctx, inData, inLinesize, 0, VerFrameSize, frame->data, frame->linesize);
    /* Which frame is it ? */
    frame->pts = i;
    /* Send the frame to the codec */
    avcodec_send_frame(codecCtx, frame);
    /* Use the data in the codec to the AVPacket */
    switch(avcodec_receive_packet(codecCtx, &pkt))
    {
        case AVERROR_EOF:
            qDebug()<<"Stream EOF\n";
            break;
        case AVERROR(EAGAIN):
            qDebug()<<"Stream EAGAIN\n";
            break;
        default:
            printf("Write frame %3d (size=%5d)\n", j++, pkt.size);
            av_packet_rescale_ts(&pkt, codecCtx->time_base, stream->time_base);
            /* Write the data on the packet to the output format  */
            av_interleaved_write_frame(fmtCtx, &pkt);
            /* Reset the packet */
            av_packet_unref(&pkt);
            break;
    }
    usleep(1e6/25);
}
// end
avcodec_send_frame(codecCtx, NULL);
//Free everything
av_free(codecCtx);
av_free(fmtCtx);

в чем может быть проблема?

READ ALSO
Передача значения select ajax запросом

Передача значения select ajax запросом

ЗдравствуйтеЕсть select в form и div который должен принять ответ от сервера

273
Ajax как вернуть ошибку с сервера

Ajax как вернуть ошибку с сервера

Добрый, день помогите пожалуйста, отправляю на сервер комментарий пользователя, средствами ajax, скрипту answerphp

318
Не отображаются шрифты

Не отображаются шрифты

В общем суть следующая, писал лендинг на ноутеВ последствии, после переноса исходников на пк при открытии сайта обнаружил, что шрифты не отображаются...

274