zhwa

zhwa

0个粉丝

32

问答

0

专栏

1

资料

zhwa  发布于  2020-08-17 18:00:38
采纳率 0%
32个问答
4017

h264封装ts—ffmpeg的源码怎么用呢

   

打算对h264的es流进行ts封装,参考ffmpeg mpegtsenc.c的源码,mpegts_write_pes()这个函数对es流打包成ts流,在这之前应该调用mpegts_init(),初始化AVFormatContext s类型变量,参考书明用s = avformat_alloc_context(),可是在mpegts_init()一开始就失败; 代码如下: AVFormatContext s = NULL; if (countProcess == 0) { pDataTs = (HI_U8 )malloc(sizeof(HI_U8) FRAMELEN); if (!pDataTs) { printf("%s:%d malloc false\n", FILE, LINE); return -1; }

        s = avformat_alloc_context();
        if (!s)
        {
            printf("%s:%d  avformat_alloc_context false\n", __FILE__, __LINE__);
            return -1;
        }
        countProcess = 1;
        printf("%s:%d\n", __FILE__, __LINE__);
        mpegts_init_ts(s);
        st = s->streams[0];
    }
    Is_IFrame = isIFrame_Sendpack(pDataAddr, u32DataLen, PackageType);
    key = Is_IFrame;
    memset(pDataTs, 0, sizeof(HI_U8) * FRAMELEN);
    printf("%s:%d\n", __FILE__, __LINE__);
    mpegts_write_pes(s, st, pDataAddr, u32DataLen, u32TimeStamp, u32TimeStamp, key, stream_id, pDataTs, &DataTsLen);
s32Ret = HI_RTP_SendSock(WriteSock, pDataTs, DataTsLen, pPeerSockAddr);

static int mpegts_init_ts(AVFormatContext *s) { printf("%s:%d\n", FILE, LINE);

MpegTSWrite *ts = s->priv_data;
 printf("%s:%d\n", __FILE__, __LINE__);
MpegTSWriteStream *ts_st;
MpegTSService *service;
AVStream *st, *pcr_st = NULL;
AVDictionaryEntry *title, *provider;
int i, j;
const char *service_name;
const char *provider_name;
int *pids;
int ret;

printf("%s:%d\n", __FILE__, __LINE__);
printf("%s:%d  ts->pes_payload_size:%d  s->max_delay:%d\n", __FILE__, __LINE__, ts->pes_payload_size, s->max_delay);

[color=Red] if (s->max_delay < 0) / Not set by t[/color]he caller / s->max_delay = 0;

// round up to a whole number of TS packets

[color=Red] ts->pes_payload_size = (ts->pes_payload_size [/color]+ 14 + 183) / 184 184 - 14; 在红字体这块就崩了,也就是说给mpegts_init_ts()的实参初始化有问题,可是源码没找见怎么调用mpegts_init()给他的实参赋值, 群里的大神这个AVFormatContext s怎么赋值?[size=5][/size]

我来回答
回答3个
时间排序
认可量排序

taitan

0个粉丝

0

问答

0

专栏

0

资料

taitan 2020-08-18 10:11:54
认可0

ts封包网上很多C实现的代码 不建议用ffmpeg

zhwa

0个粉丝

32

问答

0

专栏

1

资料

zhwa 2020-08-27 09:40:40
认可0
已解决

参考github的文件封装代码改,
另外注意:
1. 对264编码的时间戳/1000 * 90
2.vlc播放时的url注意,用以前播放的udp视频的udp/h264://@:port,可以连接上但是花屏(这是最糟糕的,怀疑了好几天是ts流没封装好),用udp://@:port可以正常播放
3. 单包的话,需要pps,sps,sei独立处理

0个粉丝

0

问答

0

专栏

0

资料

2021-10-13 19:44:24
认可0

请问能给一下你的源码参考一下吗?
还有github的路径是哪里?

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区