问题描述
我正在尝试使用常规视频流对 KLV 元数据 (MISB 0601) 进行编码。我正在使用 ffmpeg 示例并且想出了这个
启动 klv 流:
int Streamer::add_klv_stream(){
this->klv_stream = avformat_new_stream(this->output_context,NULL);
this->klv_stream->codec->codec_type = AVMEDIA_TYPE_DATA;
this->klv_stream->codec->codec_id = AV_CODEC_ID_SMPTE_KLV;
this->klv_stream->codec->codec_tag = 1096174667; //some magic number?
this->klv_stream->time_base = AVRational{ 1,30 };
this->klv_stream->id = this->output_context->nb_streams - 1;
}
int Streamer::addKlv(uint8_t * some_array) {
AVPacket pkt;
av_init_packet(&pkt);
pkt.size = 10;
pkt.data = some_array;//(uint8_t*)GetKlv(pkt.size);
auto res = write_frame(this->output_context,&this->video_stream.st->time_base,this->klv_stream,&pkt);
//ret = write_frame(this->output_context,&c->time_base,this->video_stream.st,&pkt);
free(pkt.data);
return res;
}
但是,我在 write_frame(特别是 av_interleaved_write_frame 调用)中收到 BAD ACCESSS 错误
int Streamer::write_frame(AVFormatContext *fmt_ctx,const AVRational *time_base,AVStream *st,AVPacket *pkt)
{
/* rescale output packet timestamp values from codec to stream timebase */
av_packet_rescale_ts(pkt,*time_base,st->time_base);
pkt->stream_index = st->index;
/* Write the compressed frame to the media file. */
//log_packet(fmt_ctx,pkt);
return av_interleaved_write_frame(fmt_ctx,pkt); //error is here
}
如果有人知道如何复用 klv 数据和视频,将不胜感激。
提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)