【发布时间】:2016-08-29 19:42:38
【问题描述】:
我需要通过Ffmpeg的帮助从无人机传输一些数据。这些数据包括帧数据和一些其他参数,例如无人机的计时滚动/俯仰/高度/方向,以及当我得到帧的图像时,相应的参数也应该拉出来,所以我决定将这些参数作为SEI发送。 那么问题来了,发送sps pps后,我发送自己的SEI包,eg:
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 什么也没有! 此外,我还尝试将我的参数放在 AVFrame 的 side_data 或元数据中,但是在 rtp 传输后,收到了 AVFrame 的 side_data 和元数据再次为 0x00。 谁能给我一些思路?
【问题讨论】:
标签: c++ ffmpeg h.264 rtp multimedia