ffmpeg 怎样分析ts 流中的 sdt 表

打印 上一主题 下一主题

主题 504|帖子 504|积分 1512

---------------------------------------------------------
author:hjjdebug
date: 2024年 07月 24日 星期三 10:34:08 CST
descriptor: ffmpeg 怎样分析ts 流中的 sdt 表
---------------------------------------------------------
1. sdt 的概念
   sdt 就是服务描述表,就是这个表包罗一个或多个服务.
   一个服务对应一个节目,以是服务就是节目的服务.
   上面听起来就是挺虎人的,
   那服务是什么呢? 
   服务就是每个频道对应的频道名称和频道供应商等信息.
   可以简单理解为就是2个字符串!!

2. ffmpeg 怎样保存sdt 表中的字符串
   由于字符串的长度并不固定,以是必要动态分配内存来保存.
    switch (desc_tag) {
    case 0x48: //0x48描述符
        service_type = get8(&p, p_end);
        if (service_type < 0) // 服务类型,0x1为数字电视业务
            break;
// getstr8 会返回动态分配的内存, 该内存的容量每每比字符串长度要大.
// 另getstr8 还会调用icon_open()函数, 该函数有动态内存分配,需调用icon_close()释放动态内存
// 这是我向下跟踪得到的.这里就不睁开了.
        provider_name = getstr8(&p, p_end); 
        if (!provider_name)
            break;
        name = getstr8(&p, p_end); // 此处也是动态指针
        if (name) {
//ts->stream 是avformatContext, 先找有没有sid这个节目, 有的话直接返回program
//没有再分配节目, 有动态内存分配,要等释放AVFormatContext 时才会释放program
            AVProgram *program = av_new_program(ts->stream, sid); 
            if (program) {
            //sdt 信息保存在节目的metadata 中, program->metadata是一个字典dictionary
            //添加字典项会有内存再分配
            //而字典项key和value根据flags 大概会被复制,就是说大概有内存分配,
            //只以是要举行字符串复制是因为这里用strdup,会根据字符长度重新分配一次内存,呈紧凑字符串形式
            //它们的内存释放要等到program 被释放的时候
            //关于字典的操作另有很多细节,例如key-value已经有值了怎么办等, 可由flags控制.
                av_dict_set(&program->metadata, "service_name", name, 0);
                av_dict_set(&program->metadata, "service_provider", provider_name, 0);
            }
        }
        av_free(name);  // 释放动态内存, 保持内存平衡,因为这里的字符串存储空间每每比字符串长度大.
        av_free(provider_name);
        break;
    default:
        break;
    }
3. 这些为字符串分配的内存何时释放
   参考第2步的代码解释!
   简单说,暂时用的就立刻释放了,对象用的要等到对象释放时才释放,
   对象的属性也大概是不断厘革的.但对sdt来讲,虽然有很多sdt表,但内容是稳定的.
小结: 本博偏重从内存分配的角度来描述一下sdt表的存储,是我查内存泄漏的一个小劳绩!
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表