linchunsheng

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng  发布于  2017-02-17 16:42:25
采纳率 0%
31个问答
3675

SPS PPS获取

 
想问下高手们如何从stStream中获取SPS,PPS信息?请高手们帮帮忙,用的是3518EV200,文档上没有看明白如何拿到这些信息,,先谢了哈
我来回答
回答14个
时间排序
认可量排序

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-02-17 19:17:30
认可0
海思不是有demo,存h264文件吗?你可以把数据导出来看看啊,只需要做个地址偏移就可以得到sps、pps了

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2017-02-18 04:50:55
认可0
到了264流的范畴,和海思关系就不大了,网上代码一大堆,自己找源码例子。

你自己看看海思给出来的编码数据包,你把开头的几个字节全部都printf出来,遇到0001就是一个帧了,然后再来解析即可。

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2017-02-18 22:22:19
认可0
非常感谢高手们的回复,我对这个不太了解是个新手,请问下是否打印pu8Addr的数据,谢谢。

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2017-02-19 04:38:52
认可0
本帖最后由 ngswfx 于 2017-2-19 04:50 编辑

对,判断u32Len大小,如果大于6,你就打印,注意别越界即可,打印出来你看看你得到的编码数据开头到底是啥东西,然后再来针对性解析.

当然由于海思结构里面还有好多有用信息,你都可以打印出来先看看,尤其是VENC_DATA_TYPE_U里面的H264E_NALU_TYPE_E,然后就可以具体来处理了

例如 3520D里面,其他类似:
[code]
VENC_PACK_S*  pstData;
for (int i=0; i< stStream.u32PackCount; i++)
{
          pstData = &stStream.pstPack;
        /////////////////////////////
        if(pstData->u32Len[0]>1){
                char *buff=pstData->pu8Addr[0];
                if(pstData->u32Len[0]>6)
                        printf("%x:%x:%x:%x:%x:%x \n",buff[0],buff[1],buff[2],buff[3],buff[4],buff[5]);
        }
        ////////////////////
        if(pstData->u32Len[1]>1){
                char *buff=pstData->pu8Addr[1];
                if(pstData->u32Len[1]>6)
                        printf("%x:%x:%x:%x:%x:%x \n",buff[0],buff[1],buff[2],buff[3],buff[4],buff[5]);
        }
}[/code]

旷性怡情

0个粉丝

3

问答

0

专栏

0

资料

旷性怡情 2017-02-19 19:44:24
认可0
你仔细看看帧结构体,看定义,里面有sps还是pps的定义的。。看一下那个帧结构体就明白了

xushengyang

0个粉丝

1

问答

0

专栏

0

资料

xushengyang 2017-02-19 22:38:25
认可0
VENC_PACK_S中的VENC_DATA_TYPE_U是记录了当前PACK的类型,基本可以通过这个类型对当前PACK进行判断是否为lz需要的sps或pps,如果里面SPS\PPS\ISLICE信息为同一个PACK中,应该在VENC_PACK_S结构体中的u32DataNum、stPackInfo[8]记录了相应的信息,只需要再根据stPackInfo[8]中的u32PackType判断所需类型,u32PackOffset和 u32PackLength定位所需数据段即可。

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2017-02-20 15:55:59
认可0
本帖最后由 linchunsheng 于 2017-2-20 16:00 编辑

这个是海思DEMO保存h264文件,能否从这个图中看出SPS,PPS信息,每一帧的分隔符我怎么看?据我了解,67,,,68分别是SPS,PPS,

xushengyang

0个粉丝

1

问答

0

专栏

0

资料

xushengyang 2017-02-20 23:09:23
认可0
4字节0x00000001或者3字节0x000001作为每个帧的起始码。关于264码流结构的详细信息lz可以在网上查下,已经很完备了:)

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2017-02-21 05:16:09
认可0
本帖最后由 ngswfx 于 2017-2-21 05:40 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=45312&ptid=14216]linchunsheng 发表于 2017-2-20 15:55[/url]
这个是海思DEMO保存h264文件,能否从这个图中看出SPS,PPS信息,每一帧的分隔符我怎么看?据我了解,67,, ...[/quote]

这里面还真没有帧开始标志,你的数据太少了,最起码要好几百K,才可以确保肯定有帧头


最有可能有帧头信息的地方抓图刚好没抓住,也就是0x00-0x80,而且第一个帧通常都是关键帧,都很大,到第二个帧之间有100K左右的量级,所以你这个刚好没有。


////////用hex进制查看工具,然后ctrl+F 搜索00 00 00 01就可以找到了。






看0001后面 68 67 65 61各种类型都有了。

H伟伯爵H

0个粉丝

0

问答

0

专栏

0

资料

H伟伯爵H 2017-08-23 00:58:55
认可0
强烈mark一下:lol

helphel

0个粉丝

4

问答

0

专栏

0

资料

helphel 2017-08-24 20:23:17
认可0
26x帧格式是固定的,看看协议

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2017-02-27 18:37:08
认可0
谢谢楼上,,

what6300

0个粉丝

2

问答

0

专栏

0

资料

what6300 2017-06-12 23:17:18
认可0
:lol收藏一下

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2017-08-25 08:33:01
认可0
mark一下。。。。。。。。。。。。。。。。。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区