Мне нужно перенести некоторые данные из дрона с помощью Ffmpeg. Данные включают в себя данные кадра и некоторые другие параметры, такие как временной бросок / шаг / высота / направление дрона, и когда я получаю изображение кадра, соответствующий параметры также должны быть извлечены, поэтому я отправляю эти параметры как SEI.
Затем приходят вопросы, после отправки sps pps я отправляю свой собственный пакет SEI, например:
if(pkt->size>10&&pkt->data[0] ==0
&&pkt->data[1] ==0
&&pkt->data[2] ==0
&&pkt->data[3] ==1
&&(pkt->data[4] == 103 || pkt->data[4] == 104)){
i++;
}
AVPacket *newPacket = nullptr;
// 0 0 0 1 6 8*16
if(i == 2){
i = 0;
newPacket = (AVPacket *)av_malloc(sizeof(AVPacket));
av_init_packet(newPacket);
newPacket->data = new uint8_t[8];
newPacket->data[0] = 0;
newPacket->data[1] = 0;
newPacket->data[2] = 0;
newPacket->data[3] = 1;
newPacket->data[4] = 6;
newPacket->data[5] = 123;
newPacket->data[6] = 134;
newPacket->data[7] = 128;
newPacket->size = 8;
}
av_write_frame(*it , pkt);
av_free_packet(pkt);
if(newPacket){
av_write_frame(*it , newPacket);
av_free_packet(newPacket);
}
Но, при получении завершения, я нахожу только API: av_read_frame. API просто декодирует каждый полный кадр из AVFormatContext. Мой SEI не работает!
Кроме того, я также пытаюсь поместить свои параметры в side_data или метадат AVFrame, но после переноса по протоколу rtp полученные значения side_data и метаданные AVFrame снова равны 0x00.
Может ли кто-нибудь дать мне ход мыслей?
На принимающем терминале вы проверяли, есть ли в ваших AVPackets, полученных вами с помощью av_read_frame (), ваше сообщение SEI на их данных?
Мой подход к сохранению SEI для каждого кадра был похож на ваш, за исключением части кодирования. Мои шаги:
Других решений пока нет …