Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 19.07.2017
Сообщений: 21

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

19.10.2017, 15:22. Показов 2064. Ответов 0

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток,
столкнулся с такой проблемой, в приложении получаю данные с камер в виде кадров, пытаюсь реализовать многоканальный стрим изображений через rtsp, на каждый канал выделяю отдельную функцию для стрима с разными названиями каналов и разными портами, в результате все изображения попадают в один стрим, в следствии чего отображается каша. каналы воспроизвожу при помощи ffplay
функция для стрима
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    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);
в чем может быть проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2017, 15:22
Ответы с готовыми решениями:

Стрим видео из файла
Есть задача стримить в поток видео лежащее на локальном ftp, есть ли у QT функционал к транскодированию и передачи по сети видео, возможно...

Многоканальный звук в одном видео в Adobe Premiere Pro
Есть видео, у которого на 1-ой стерео аудиодорожке есть свой звук, а на 2-ой - другой звук с моими записанными комментариями. Premiere при...

Как реализовать воспроизведение стрим видео?
Здравствуйте, столкнулся с такой проблемой: есть ccылка на поток с камеры наблюдения в формате http, пример:...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2017, 15:22
Помогаю со студенческими работами здесь

видео из ffmpeg
Подскажите можно ли сделать с помощью ffmpeg видео из картинок png, если картинки не через равные промежутки времени? Т.е. каждой картинке...

Потоковое видео с ffmpeg
Есть несжатое видео с камеры 320x240, и его нужно передавать на удалённый компьютер в реальном времени, качество не очень важно....

Видео из фото в ffmpeg
Всем привет Кто может помочь разобратся с батником. Хотел по примеру склейки видео сделать батник, который будет делать из картинок -...

Ffmpeg не режет видео
Здравствуйте. Не могу заставить ffmpeg резать ролик на кадры. Выполняю avconv -ss 00:00:02 -i /01.flv -r 5 -t 00:00:01 -f image2 ...

Сжатие видео. Не запускается ffmpeg
Добрый вечер, форумчане. Столкнулся с проблемой того, что не запускается ffmpeg. Подскажите, с чем может быть связана ошибка. Ниже фрагмент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru