Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Перевести на с функцию с питона https://www.cyberforum.ru/ c-cpp/ thread3067817.html
всего 4 строчки, ну первая и последняя понятны, а вот 2 средние это какой то взрыв мозга для меня. def _decode(x): scrambled = ((x & 0xf000f000) >> 12, (x & 0x0f000f00) >> 8, (x & 0x00f000f0) >> 4, (x & 0x000f000f)) decoded = tuple(decode for i, v in enumerate(scrambled)) unscrambled = tuple(((i >> 4) << 16) | (i & 15) for i in decoded) return (unscrambled << 12) | (unscrambled << 8) |...
C/C++ Вывести несколько раз строки матрицы
К примеру дана матрица, в которой есть значения 4 12 3 8 9 1 6 2 7 Подскажите, как можно вывести каждую строчку N раз, то есть, к примеру 4 12 3
C/C++ Рендер в консоли из проекта Adobe Premiere Pro Здравствуйте, стоит такая задача. Необходимо осуществить рендер готового проекта в программе Adobe Premiere Pro, но не запускать сам Premiere, то-есть сделать это без gui, чисто в консоли. Весь интернет прошерстил, ничего стоящего не нашел. https://www.cyberforum.ru/ c-cpp/ thread3066408.html C/C++ Написание програмы на С++, работа с передачей параметра 1. Первое задание: Внести изменения в этот проект и протестировать проект согласно выбранному варианту. Условия варианта:Разработать метод "Сравнить год двух дат". Вторую дату передать как параметр по значению. Вот начальный код: #include <iostream> #include <conio.h> using std::cout; using std::endl; class date{ https://www.cyberforum.ru/ c-cpp/ thread3065930.html
C/C++ Инструментарий для создания сайтов
ANSI C - самый "шустрый" и уступает по скорости только assembler, который жостко "привязывает" к конкретному "железу". С++ совсем чуть-чуть уступает ANSI C, но зато существенно расширяет возможности. Эти языки - универсальные, в чём их преимущество и, одновременно, и недостаток. Так всегда - в чем-то выигрываешь, а в чём-то проигрываешь! Так вот С/С++ не ориентирован на создание сайтов, в отличие...
C/C++ Команды и протоколы опроса серверов https://www.cyberforum.ru/ c-cpp/ thread3064453.html
Очень прошу помочь в ликвидации ликбеза по алгоритмам, процедурам, командам и протоколам опроса серверов, применительно для С/С++. Уж больно надо, а не знание этого всё сдерживает! Пишите, по-возможности, подробнее.
C/C++ Программа для подбора кодов Программа создает случайно сгенерированный код например: 79YQU-RSCEX-D2FRT-GHWT5 После записывает в блокнот и выводит из него в консоль(для проверки). Но в ручную это все в водить слишком муторно, а как написать чтобы она сохраняла в буфер и вводила в окошко в другом приложении не знаю(единственное что смог придумать, но с реализацией не получается). Заранее спасибо за помощь ! //lib.h... https://www.cyberforum.ru/ c-cpp/ thread3063454.html Константный конструктор C/C++
Добрый вечер. Люди, для чего нужен константный конструктор и каковы отличия от обычного конструктора? Чем он примечателен? class Person { public: int age; // константный конструкор const Person(int a) { age = b; } };
C/C++ Реализовать конечный автомат https://www.cyberforum.ru/ c-cpp/ thread3062641.html
Реализовать конечный автомат, принимающий строки, задаваемые следующим регулярным выражением: ( | | _ )*
C/C++ Как защитить исполняемый файл от декомпиляции? https://www.cyberforum.ru/ c-cpp/ thread3061915.html
Мы тут немного разобрались с процессом декомпиляции, а потому переходим к главному - как можно защитить исполняемый файл от декомпиляции? Прошу, по возможности, сообщать свои решения подробнее!
Программа вылетает при создании глобальной переменной в Debug режиме (Visual Studio) C/C++
Есть глобальная переменная: //E_Window.h extern sf::RenderWindow Window; //E_Window.cpp sf::RenderWindow Window; При компиляции в Release режиме всё запускается нормально, а в Debug режиме программа моментально закрывается, а дебаггер visual studio ругается на эту самую глобальную переменную: Необработанное исключение по адресу 0x770EFEE5 (ntdll.dll) в progname.exe: 0xC0000005: нарушение...
C/C++ Как сделать грамотно вывод очереди в с++ Нужно реализовать вывод по приоритету, всё в принципе понятно. Проблема в том что я не знаю как выводить эту очередь. Не знаю как сделать для вектора оператор вывода.. И так не могу найти статью как работать с векторами классов так тут ещё и очередь.. #include<iostream> #include<cctype> #include<string.h> #include<math.h> #include <cstring> #include <vector> #include<map>... https://www.cyberforum.ru/ c-cpp/ thread3060788.html
70 / 14 / 3
Регистрация: 10.07.2018
Сообщений: 284
0

FFmpeg - нужна консультация, как я могу узнать что кадр был прочитан? - C/C++ - Ответ 16680047

06.01.2023, 14:56. Показов 1161. Ответов 4
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
FFmpeg - читаю с ip камеры данные. Пока не могу обидится в том что они действительно читаются. Заметил что в строке №198 вылетает с кодом (минус) цыфра рэндомная.


C++
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#include <Windows.h>
 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <cstring>
#include <math.h>
#include <string.h>
 
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavformat/avio.h>
 
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
 
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libswresample/swresample.h>
 
    //============================
 
#include "libavcodec/avcodec.h"
#include "libavcodec/avfft.h"
 
#include "libavdevice/avdevice.h"
 
#include "libavfilter/avfilter.h"
//#include "libavfilter/avfiltergraph.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
 
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
 
// libav resample
 
#include "libavutil/opt.h"
#include "libavutil/common.h"
#include "libavutil/channel_layout.h"
#include "libavutil/imgutils.h"
#include "libavutil/mathematics.h"
#include "libavutil/samplefmt.h"
#include "libavutil/time.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/file.h"
 
// lib swresample
 
#include "libswscale/swscale.h"
 
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
 
}
#define INBUF_SIZE 4096
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
 
    const char* filename, * outfilename;
    const AVCodec* codec = NULL;
    AVCodecParserContext* parser;
 
    // содержит данные о конфигурации медиаконтента, такой как битрейт, 
    // частота кадров, частота дискретизации, каналы, высота и многое другое.
    AVCodecContext* AVCodecContext_ = NULL;
    AVCodecParameters* AVCodecParametr_ = NULL;
    FILE* f;
    //Эта структура описывает декодированные (необработанные) аудио- или видеоданные.
    AVFrame* frame;
    uint8_t inbuf[INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
    uint8_t* data;
    size_t   data_size;
    int ret;
    int eof;
    AVFormatContext* AVfc = NULL;
    int ERRORS;
    //AVCodec* codec;
    char buf[1024];
    const char* FileName;
 
    // https://habr.com/ru/post/137793/
    // Хранит сжатый один кадр.
    AVPacket* pkt;
 
    //**********************************************************************
    // Начало чтения видео с камеры. 
    //**********************************************************************
 
    avdevice_register_all();
 
    filename = "rtsp://admin:admin@192.168.1.75:554/11";
    
    outfilename = "C:\\2.MP4";
 
    // Открываем поток видео (это файл или камера). 
    ERRORS = avformat_open_input(&AVfc, filename, NULL, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: не смог открыть файл\n");
        return -1;
    }
 
    // После открытия, можем распечатать информацию о видеофайле (iformat = название формата; 
    // duration = длительность). Но так как у меня подключена камера мне написал: Duration: N/A, 
    // start: 0.000000, bitrate: N/A
    printf("Format %s, duration %lld us", AVfc->iformat->long_name, AVfc->duration);
 
 
    ERRORS = avformat_find_stream_info(AVfc, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: Unable to find stream info\n");
        return -1;
    }
 
 
    int CountStream;
 
    // Узнаем кол-во потоков. 
    CountStream = AVfc->nb_streams;
 
    // Поищим кодек. 
    int video_stream;
    for (video_stream = 0; video_stream < AVfc->nb_streams; ++video_stream) {
        if (AVfc->streams[video_stream]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
            break;
        }
 
    }
 
    if (video_stream == AVfc->nb_streams) {
        fprintf(stderr, "ffmpeg: Unable to find video stream\n");
        return -1;
    }
 
    // Тут определяем вид кодека, для моей камеры он равен как AV_CODEC_ID_HEVC (Это то в чем вещает моя камера)
    codec = avcodec_find_decoder(AVfc->streams[video_stream]->codecpar->codec_id);
    //--------------------------------------------------------------------------------------
 
    // Функции для запроса возможностей libavcodec,
    AVCodecContext_ = avcodec_alloc_context3(codec);
    if (!AVCodecContext_) {
        fprintf(stderr, "Не удалось выделить контекст видеокодека, т.к. он не поддрерживается\n");
        exit(1);
    }
 
    // Эта функция используется для инициализации 
    // AVCodecContext видео и аудио кодека. Объявление avcodec_open2() находится в libavcodecavcodec.h
    // Открываем кодек. 
 
    ERRORS = avcodec_open2(AVCodecContext_, codec, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: Не удается открыть кодек\n");
        return -1;
    }
 
    // Это для обработки звука - задел.
    //swr_alloc_set_opts()
    // swr_init(); 
 
    // Вывести всю информацию о видеофайле. 
    av_dump_format(AVfc, 0, argv[1], 0);
 
    //=========================================================================================
    // Далее, получаем фреймы..до этого мы только получили всю инфомрацию о входящем видео.
    //=========================================================================================
 
    // Теперь мы собираемся прочитать пакеты из потока и декодировать их в кадры, но сначала 
    // нам нужно выделить память для обоих компонентов(AVPacket и AVFrame).
    frame = av_frame_alloc();
 
    if (!frame) {
        fprintf(stderr, "Не удается выделить память для видеокадра\n");
        exit(1);
    }
    // Выделяем память для пакета 
    pkt = av_packet_alloc();
    // Чтение данных если они есть. 
    while (av_read_frame(AVfc, pkt) >= 0) {
        // Это пакет из видеопотока? Потомучто есть еще звуковая дорожка.
        if (pkt->stream_index == video_stream) {
 
            int ret;
            // Передача необработанных пакетных данных в качестве входных данных в декодер.
            // 0 при успешном выполнении, в противном случае отрицательный код ошибки: AVERROR(EAGAIN)
            // предварительно должен быть открыт с помощью avcodec_decode_video2(); (выполнено ранее)
            ret = avcodec_send_packet(AVCodecContext_, pkt);
            if (ret < 0) {
                fprintf(stderr, "Error 56: Ошибка отправки пакета для декодирования\n");
                continue;
                //exit(1);
            }
            
            while (ret >= 0) {
                // Возвращает декодированные выходные данные из декодера или 
                // кодировщика (при использовании флага AV_CODEC_FLAG_RECON_FRAME).
                ret = avcodec_receive_frame(AVCodecContext_, frame);
                if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
                    break;
                //return 57;
                else if (ret < 0) {
                    fprintf(stderr, "Ошибка при декодирование\n");
                    break;
                    //exit(1);
                }
 
                /*printf(
                    "Frame %c (%d) pts %d dts %d key_frame %d [coded_picture_number %d, display_picture_number %d]",
                    av_get_picture_type_char(/*frame->pict_type),
                    AVCodecContext_->frame_number,
                    frame->pts,
                    frame->pkt_dts,
                    frame->key_frame,
                    frame->coded_picture_number,
                    frame->display_picture_number
                );*/
 
 
 
                printf("-\n", frame->display_picture_number);
                //  fflush(stdout);
 
                    //изображение выделяется декодером.нет необходимости освобождать его
 
                //snprintf(buf, sizeof(buf), filename, AVCodecContext_->frame_number);
                //pgm_save(frame->data[0], frame->linesize[0],frame->width, frame->height, buf);
 
 
 
            }
 
        }
 
    }
 
 
    //av_parser_close(parser);
    avcodec_free_context(&AVCodecContext_);
    av_frame_free(&frame);
    av_packet_free(&pkt);
 
    return 0;
}
Добавлено через 6 минут
Вообще конечная цель записать в файл h.264. или в h.265

Добавлено через 45 секунд
Вообще можно было бы еще ради интереса вывести в окно картинку.

Вернуться к обсуждению:
FFmpeg - нужна консультация, как я могу узнать что кадр был прочитан? C/C++
0
Заказать работу у эксперта

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2023, 14:56
Готовые ответы и решения:

ffmpeg как сохранить кадр в pgm
Есть код на c++, он должен открывать видео и сохранять из него кадры. Когда ему даешь ссылку на...

ffmpeg Выдернуть кадр из видеофайла
Доброго времени суток. Бьюсь 4й день над проблемкой как при помощи ffmpeg выдернуть определенный...

Не выходит закодировать кадр с помощью FFmpeg
Привет всем. У меня такая проблема - не могу закодировать кадр с помощью FFmpeg, использую эту...

C++ builder + ffmpeg: вывести кадр на TImage
я получаю кадр от ffmpeg в формате AVFrame. как вывести кадр на TImage ?

4
06.01.2023, 14:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2023, 14:56
Помогаю со студенческими работами здесь

Как узнать что сайт под фильтром или был там?
Интересует вот что: как узнать был ли сайт под фильтрами яндекса вообще и когда и под какими или...

Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?
подскажите пожалуйста, как узнать что при считывание очередного слова в string был сделан переход...

Нужна консультация что такое Pascal Debuy
Вообщем дали мне реферат на тему: Pascal Debuy вообще не чего не нахожу, что это, кто это и с чем...

Нужна консультация по iframe + javascript или что-то другое
Хочу сделать некоммерческий (бесплатный) сервис для людей. Помогите консультацией. По замыслу,...

Аутентификация mode="Forms". Как узнать, что IIS сервер был перезапущен?
Настройка из web.config: &lt;authentication mode=&quot;Forms&quot;&gt; &lt;/authentication&gt; В общем, мне нужно...

Как через FFmpeg узнать продолжительность видео?
Подскажите пожалуйста, как с помощью консольного FFmpeg узнать продолжительность flv-видео. Видео...

Узнать, что курсор до клика был в поле
На текстовое поле вешаю событие search.onclick Вопрос в том, каким образом при клике на поле...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru