FFMPEG 用视频编码 klv 数据

问题描述

我正在尝试使用常规视频流对 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;
}

添加一个klv数据包

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 (将#修改为@)