功效结构图、信息结构图、结构图,你还傻傻分不到头为?

章开始:本文是PM_allen老师上在成品壹佰的章(http://www.chanpin100.com/article/105716)转载文章就供大家习,不发任何商业用途。

每当行使ffmpeg解码播放TS流的当儿(例如之前写了之UDP组播流),在接连时反复得消耗大量年华。经过debug发现凡是av_find_stream_info(已弃,现在动的凡avformat_find_stream_info)这个方式好耗时,而且是死的。av_find_stream_info方法主要是获取对应的流信息,其中针对自我的行使最可行之就是视频的分辨率。在av_find_stream_info中是只要不断的读取数据包,解码获得对应的信,而内部除了分辨率信息之外的东西对自身之使用被凡是不行的。所以,考虑自己手动从H.264码流中分析出视频的分辨率信息。

君还于咨询产品布局图到底是信息结构图还是作用布局图也?这里产生微信的实际例图帮助而又好地知道这组数三姊妹图类。

   
以下内容主要参考了立篇文章:http://www.myexception.cn/internet/586390.html

以写PRD、竞品分析文档中,我们经常会相活结构图、产品效果结构图或者产品信息结构图的身影,但需要开口明白他俩之概念跟图为真没看上去那么简单,这里作者尝试分享一下好之意。

       H.264码流的流淌信息还存储在了特别之构造中,叫做SPS(Sequence
Parameter Set)。要分析SPS就需要知道有H.264码流的格式信息。

专门声明:由于篇幅和另外因素限制,本系列被装有的实例图于完整性上发生简要和简化,仅看成举例讲解用,请读者不要纠结图表是否描述完整、是否发生缺乏失模块,主要是吃读者来比3类图表的关系以及分。

    在H.264码流中,都是以0x00 0x00 0x01 或者 0x00 0x00 0x00
0x01呢开始码的(在自身的利用被吗接班人),之后经过检测开始码后率先独字节的后五号是否为7(00111)来判定该是否也SPS。得到SPS之后,就得分析出视频的分辨率。SPS中来半点独成员,pic_width_in_mbs_minus1和pic_height_in_map_units_minus_1,分别表示图像的充盈和强,但是一旦注意的凡其还是盖16也单位(在面积达到就是是因16*16的丘吧单位)再减1,所以实际的方便是(pic_width_in_mbs_minus1

一致、功能结构图

  • 1)*16,高为(pic_height_in_map_units_minus_1+1)*16。

1、定义

 

效益结构图虽是按效益的隶属关系写成的图,在拖欠图形中之各一个框都称为一个功能模块。功能模块可以因具体情况分得格外一些要么微一些,分解得最小功能模块可以是一个主次中之每个处理过程,而比充分的功能模块则可能是完结有一个任务之同一组先后。(百度定义)用深入浅出的口舌来说,功能布局图虽是因功能模块为项目,介绍模块下该每职能整合的图形。

      欢迎转载,转载请注明出处:http://guoyb.com/Tech/34.html

2、作用

    以下是分析宽高之代码:

产品概念设计的应用工具之一,能够针对匪净确定的规划问题或一定模糊的统筹要求,以同等种比较简单与明朗的法表示。在绘制的长河被,能够帮助PM思考并清晰产品的功能模块及其功能结合;

 

梳理需求,以鸟瞰的方法对全部产品页面被的效应布局形成一个直观的认识,防止在活要求转化为力量要求的历程被冒出功能模块和力量点亏失之气象。

转载http://guoyb.com/Tech/34.html

3、注意事项

 

每当分别功能结构、信息结构图、结构图前,有一个重中之重之前提需要大家达到共识:软件出品自己即是传递信息和供功能的载体,完全绝对的信息类或效益看似制品是免可能存的在,信息往往伴随在作用,我们好为难扛一长条界限将两头根本分手。从某种意义上,信息传送甚至就是是软件出品极紧要的主干作用。鉴于此,一般性我们默认地拿信展示效果独立了下,作为信息架构的同等片去想想,在活效果结构时未考虑信息展示效果。

以下一些 转自 http://blog.csdn.net/pkueecser/article/details/7367641

这里选出一个音讯及功力纠缠的例子更好掌握,如微信的个人信息模块(如下图),“名字”字段于此处既是是信息以提供着修改设置的效应。

 

图片 1

使RTP传输H264之时候,需要为此到sdp协议描述,其中有些许件:Sequence
Parameter Sets (SPS) 和Picture
Parameter Set (PPS)需要采取,那么这简单起于哪里得到呢?答案是自H264码流中落取.在H264码流中,都是为”0x00
0x00 0x01″或者”0x00 0x00 0x00
0x01″为开始码的,找到开始码后,使用起来码后的率先只字节的低5各类判断是否为7(sps)或者8(pps),
及data[4] & 0x1f == 7 || data[4] & 0x1f ==
8.然后对获之nal去丢起码后进行base64编码,得到的音讯就是足以用于sdp.sps和pps需要因此逗号分隔开来.

为此我们不难理解许多意义结构图被冒出了信息结构的要素,但由力量结构图的施用目的(即高达文中的意图)要求我们注意让产品功效是维度,在效益布局图备受我们尽好尽量减少信息结构要素出现的可能。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

虽就此点功能和信息纠缠的例证来说,在该作用结构图被多朋友见面一直用“名字”来代表该功能点,画图人可能我清楚,但看图人哪怕会见来疑惑:这个“名字”到底是恃供可查名字的职能还是只是查看并修改名字的功效。

 

于此间介绍一个微窍门,形容一个效果点时建议大多采取“动词+名词”的言语讲述形式,这种办法不但信息传达更加精确而可避免读者不必要之困惑。如上面的例证中我们就可将“名字”改吧“设置名字”或“查看并设置名字”来讲述功能点。

争剖析SDP中含有的H.264的SPS和PPS串

 

http://www.pernet.tv.sixxs.org/thread-109-1-1.html

SDP中的H.264的SPS和PPS串,包含了初始化H.264解码器所要之消息参数,包括编码所用的profile,level,图像的财大气粗和赛,deblock滤波器等。
由SDP中的SPS和PPS都是BASE64编码形式之,不便于了解,附件有一个工具软件可以针对SDP中之SPS和PPS进行剖析。
故法是以指令执行遭输入:
spsparser sps.txt pps.txt output.txt

例如sps.txt中之情节也:
Z0LgFNoFglE=
pps.txt中的情吗:
aM4wpIA=

最后分析的顶之结果吗:

Start dumping SPS:
  profile_idc = 66
  constrained_set0_flag = 1
  constrained_set1_flag = 1
  constrained_set2_flag = 1
  constrained_set3_flag = 0
  level_idc = 20
  seq_parameter_set_id = 0
  chroma_format_idc = 1
  bit_depth_luma_minus8 = 0
  bit_depth_chroma_minus8 = 0
  seq_scaling_matrix_present_flag = 0
  log2_max_frame_num_minus4 = 0
  pic_order_cnt_type = 2
  log2_max_pic_order_cnt_lsb_minus4 = 0
  delta_pic_order_always_zero_flag = 0
  offset_for_non_ref_pic = 0
  offset_for_top_to_bottom_field = 0
  num_ref_frames_in_pic_order_cnt_cycle = 0
  num_ref_frames = 1
  gaps_in_frame_num_value_allowed_flag = 0
  pic_width_in_mbs_minus1 = 21
  pic_height_in_mbs_minus1 = 17
  frame_mbs_only_flag = 1
  mb_adaptive_frame_field_flag = 0
  direct_8x8_interence_flag = 0
  frame_cropping_flag = 0
  frame_cropping_rect_left_offset = 0
  frame_cropping_rect_right_offset = 0
  frame_cropping_rect_top_offset = 0
  frame_cropping_rect_bottom_offset = 0
  vui_parameters_present_flag = 0

Start dumping PPS:
  pic_parameter_set_id = 0
  seq_parameter_set_id = 0
  entropy_coding_mode_flag = 0
  pic_order_present_flag = 0
  num_slice_groups_minus1 = 0
  slice_group_map_type = 0
  num_ref_idx_l0_active_minus1 = 0
  num_ref_idx_l1_active_minus1 = 0
  weighted_pref_flag = 0
  weighted_bipred_idc = 0
  pic_init_qp_minus26 = 0
  pic_init_qs_minus26 = 0
  chroma_qp_index_offset = 10
  deblocking_filter_control_present_flag = 1
  constrained_intra_pred_flag = 0
  redundant_pic_cnt_present_flag = 0
  transform_8x8_mode_flag = 0
  pic_scaling_matrix_present_flag = 0
  second_chroma_qp_index_offset = 10

/////////////////////////////////////////////////////////////////////////////////////////////////
此用专门提一下当即点儿独参数
pic_width_in_mbs_minus1 = 21
  pic_height_in_mbs_minus1 = 17
分别代表图像的方便和赛,以宏块(16×16)为单位之价值减1
从而,实际的财大气粗为 (21+1)*16 = 352
图片 2 spsparser.rar

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

http://krdai.info.sixxs.org/blog/mp4-sps-pps-data.html

最近以举行同 h264 encode/decode 相關的钻研,目標是愿意得以從 Android 的
MediaRecorder 當中取出 h264 的資訊。目前問題是在於 SPS 以及 PPS
到底要怎樣得到。由於 MediaRecorder 是寫入 mp4
檔案中,所以没法只能來去分析一下 mp4 的檔案格式,發現沒有想像吃之困難.
主要是參照 ISO/IEC 14496-15 這部份. 在 mp4 的檔案之中, 找到 avcC
這個字串, 之後就是接上 AVCDecoderConfigurationRecord.
AVCDecoderConfigurationRecord 的 format 如下:

 

[cpp] view
plaincopy

 

  1. aligned(8) class AVCDecoderConfigurationRecord {  
  2.    unsigned int(8) configurationVersion = 1;  
  3.    unsigned int(8) AVCProfileIndication;  
  4.    unsigned int(8) profile_compatibility;  
  5.    unsigned int(8) AVCLevelIndication;  
  6.   
  7. bit(6) reserved = ‘111111’b;  
  8.    unsigned int(2) lengthSizeMinusOne;  
  9.   
  10. bit(3) reserved = ‘111’b;  
  11.    unsigned int(5) numOfSequenceParameterSets;  
  12.   
  13. for (i=0; i< numOfSequenceParameterSets; i++) {  
  14.       unsigned int(16) sequenceParameterSetLength ;  
  15.       bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;  
  16.    }  
  17.    unsigned int(8) numOfPictureParameterSets;  
  18.    for (i=0; i< numOfPictureParameterSets; i++) {  
  19.       unsigned int(16) pictureParameterSetLength;  
  20.       bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;  
  21.    }  
  22. }  

 

對照一下這樣就足以找到 SPS 和 PPS

+++++++++++++++++++++++++++++++++++++++++++++

 

vlc没有收到pps和sps

2010-10-08 16:16

问题 packetizer_h264 packetizer warning: waiting for SPS/PPS

是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame; 

h264 packetizer has set so, that it sends sps/pps only first keyframe,
 I'm trying to figure what breaks if that is changed so sps/pps is written in every keyframe. 
[出自| http://trac.videolan.org/vlc/ticket/1384]

解决办法:

1、编码器编码出每个关键帧都加上SPS、PPS ,据说通常情况编码器编出的 SPS、PPS是一样的,所以这种方法耗费资源。

2、在服务器接收到客户端请求时,发送第一个package 加上 SPS、PPS。

具体如下:

  • 1、在 VideoOpenFileSource 添加一个变量 isFirstFrame;

  • 2、构造时初始化 isFirstFrame = true;
  • 3、在int VideoOpenFileSource::readFromBufferChain() 修改如下:

  •    1         if(isFirstFrame == true)
       2         {
       3                 memcpy(fTo, h264_header, sizeof(h264_header)); /* h264_header = pps +sps*/
       4                 offset = sizeof(h264_header);
       5                 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
       6                 offset += framesize;
       7                 isFirstFrame = false;
       8                 printf("this is the first fime\n");
       9                 sleep(1);
      10         }
      11         else
      12         {
      13                 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
      14                 offset += framesize;
      15         }
      1
[http://topic.csdn.net/u/20100801/17/ef35e664-92ff-4144-a35f-3984dcf11da3.html| 参考] 


========================================================================
sdp 关于pps和sps的疑问:
packetization-mode 主要是定义包的模式,单一 NALU单元模式(0);非交错(non-interleaved)封包模式(1);交错(interleaved)封包模式(2)
sprop-parameter-sets 等于H.264 的序列参数集和图像参数 NAL单元,base64转换;(即= sps+pps)
profile-level-id 这个参数用于指示 H.264 流的 profile 类型和级别。这知道这个是啥东东

参考 黑暗长老 www.cppblog.com/czanyou/
ffmpeg decode 关于pps sps问题:
stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodec/3500432#3500432

 

 

 

何以用C语言取出H.264ES文件里之nal(sps,pps)信息。比如width, height,
profile等等

恳请大师指点指点。。。 http://www.oschina.net/question/225813_35707

解析sps,pps的代码在ffmpeg里面就是发生, 抄出来就是推行了, 我原先为自己写过…
ffmpeg的libavcodec/h264_parser.c,
h264_ps.c
函数
ff_h264_decode_seq_parameter_set
ff_h264_decode_picture_parameter_set
自己可看代码.

 

H264参数语法文档:
SPS、PPS、IDR http://blog.csdn.net/heanyu/article/details/6205390

H.264码流第一只 NALU 是 SPS(序列参数集Sequence Parameter Set)
对应H264正经文档 7.3.2.1 序列参数集的语法进行分析

 

4、如何绘制功能结构图

每当骨子里行使时,产品效果布局图通常以以下2种植情形下绘制:

对非到位的制品以设计阶段绘制,确定产品功能布局;

对就形成的之一版本的出品绘制,用于分析并传递该产品的职能布局;

1)在产品之设计阶段,如何发掘并规定功能结构图中之兆功能模块呢?

率先主功能模块应该是活以完整业务流程中之逐条核心功能模块,我们可经业务流程中所波及到之意义要求去提炼出主功能模块,提炼完成后还经过业务流程走查同一次于,看是不是有遗漏的预告功能模块。

推个例证,假而我们与了微信的初功能设计,其产品最初定位是千篇一律慢慢悠悠运动社交软件,那么其对应之核心业务可以简化为

图片 3

这么咱们就大易得出产品设计阶段微信的主功能模块,如下:

图片 4

微信力量结构图

整合下面现有版本的微信力量结构图对比一下,经过多蹩脚迭代,其主功能结构几乎从来不发生变化,我们只好佩服其职能布局的拓展性;

图片 5

微信作用结构图(V6.5.21)

当通过业务流程将主功能模块确定下后,再因工作要求对其开展职能的事无巨细规划即可,在是就是不再进行了。

2)对于曾经规定产品来说如何绘制功能结构图也?

对一款已规定产品绘制功能结构图,最便捷的不二法门就是是参照产品之Tab功能模块找来产品主功能模块,然后以层级归属关系详叙该功能模块提供的产一级功能模块或效益,如产生必不可少,其发粒度可径直细化到成效操作的描述程度。

那上图“微信作用结构图(V6.5.21)”的主功能模块为什么不是“微信”、“通讯录”、“发现”、“我”这四死标签功能模块?

以这里作者希望转告一个概念,结构图中之主功能模块不肯定就是是Tab中之竹签功能模块,许多上产品受限于运动端的上空范围,不得不将效果分为3至4独Tab中,这是平等种务实之妥协。当然正常情况下为Tab标签名作为主功能模块的做法没有错,只是当产品功效复杂时,产品效果布局图下这种划分有点粗糙。而绘制就规定产品之意义布局图会协助我们错过打这个产品之中心功能模块,梳理产品之机能架构。我们建议发图人可以品尝脱离Tab标签从而自己之语言去发掘并描述主功能模块。

这么说来我们不怕可擅自用标签功能模块中的次级功能模块划分出作为主功能模块吗?

实际呢未是,一款不管多复杂的采用其主功能模块的细分数量都未克最好多(5-9单吗优良),一般景象下当对产品功能布局进行剖析后,我们依旧会采用Tab功能模块作为主功能模块然后对该下属的功能模块进行规整。只有当我们认为有次级功能模块在业务上最为过要且产品价于高时,我们才可以以那个分割出来作为一个独门的主功能模块。

此介绍一个略秘诀,当一个次级功能模块反复出现在不同之Tab功能模块中之上,我们就是好设想将其拆分出来作为主功能模块,因为这个上表示这次级功能模块在活之业务流程中的话十分至关重要,而且就为得以叫咱的制品效果结构图更加从简清楚。如上面“微信力量布局图(V6.5.21)”中的摸索模块就又起于了Tab中之微信功能模块和通讯录功能模块。

终极什么确定功能结构图备受的颗粒度呢?

力量布局图备受的颗粒程度要基于实际应用场景来定,由画图人因需要活动将控即可。比如说在产品设计的长河遭到,功能结构的建立是设计者的宏图思想由散落趋向于收敛的历程,刚开头的颗粒度一般比老,可能仅仅提到到某功能模块,随着计划的缕缕促进,功能结构图的颗粒度会没完没了细化,最终可以拆分及某具体的意义操作。这里作者以“微信模块-个人对话”功能模块作了细化,仅供参考:

图片 6

微信模块(信息连接)

次、信息结构图

1、定义:仰脱离产品之实际上页面,将产品的数据抽象出来,组合分类的图样。

2、作用:

助PM梳理复杂情节之音讯整合,避免信息内容在亮过程遭到起遗漏、混乱、重复;

当开发工程师建立数据库的参照依据;

信息结构图的绘图通常晚于功能结构图,往往是以产品设计阶段的泛过程中,在成品功效框架已规定、功能布局都圆满好的情形下才对产品信息结构进行解析规划。

每当此处,我们用强调的是脱离实际页面是概念,在局部产品有关文章被,我们会看到作者用信息结构图完全以页面的逻辑顺序来拓展分类整合,严格意义上吧,这种图表不是同一卖合格的信息结构图。

俺们为此微信的个人信息模块举例,如下图所示:

图片 7

那个组织信息图在当下一部分底绘图就用脱离产品的其实页面,如下:

图片 8

个人信息

最后索要强调的凡:信息结构图要适用于活信息整合比较复杂需要考虑优化的状况,如内容型产品(博客、web门户网站当),产品之信息结构对于用户体验就颇根本,需要因此信息结构图作为工具进行剖析盘算。

此作者简单绘制了一晃微信的信息结构图作为参考

图片 9

微信信息结构图(V6.5.21)

三、结构图

相较于功能结构图和消息结构图,产品结构图的定义就是死混乱以及歪曲了,为什么会冒出这种状况呢?

单产品结构图从文字知道上的话即使便于给人纳闷:产品信息结构图、产品效果布局图无还可以简称为产品布局图嘛。

一派现有网上流传的竞品分析文档、产品体验文档、PRD文档有多是出于产品新人模仿前辈流传出来的文档模板来写的。但为丁哭笑不得的是,有部分同学没有进行细心深入地询问。经常于平首文章被,前面就是产品之功力布局图,结果图中凡活效果产生,产品信息要素呢发出,没有明白功能结构图的概念。而后来之新家又由这些文章被失探听上产品功能布局图、产品信息结构图,导致恶性循环;

顶根本之原故是:对于产品布局图,产品从业人员这个群体自己还还没高达共识呦。作者以网上搜了搜相关文章,对于产品结构图大家的基本点理解有3种:

大部产品人认为:活布局图虽产品功能结构图的简称,可能在产品无强调信息结构的概念时,有局部PM开始简称产品效果布局图也活布局图,之后就是默认了这种名,当起产品信息结构图后,概念就闹了模糊;

部分产品人认为:活结构图是概括显产品信息与功效逻辑的图片;

少部分产品人认为:活布局图就是是产品信息架构图。

于这边,作者还认同第2栽传统:

出品结构图是综合显产品信息与意义逻辑的图形,简单说产品布局图虽是成品原型的简化表达。它们亦可以早期的需要评审被还是外类状况被作产品原型的代表,因为产品布局图相较于产品原型,其落实资产没有,能够迅速对活效果布局进行加、删、改操作,减少PM在是进程中之落实资本。

活布局图虽是由此信息架构设计,将作用以及信息以同种客观自然的逻辑,把职能结构图和信结构图被之始末放入产品被的各国一个页面的结果。而现行多PRD、竞品分析中涉及的信息结构图、功能布局图其实大部分且是同时含有功能跟消息元素的简化版产品布局图。如下图所示:

图片 10

微信结构图(V6.5.21)

总结

当平等磨蹭产品之筹划过程遭到,功能结构图是必的,信息结构图视产品以及PM自身而定,通常我们开确定了出品效果布局图(产品效果框架)之后才起绘制产品信息结构图。

于产品设计流程中,产品效果布局图是产品概念化阶段的头输出,产品布局图是成品概念化的尾期阶段输出物,当产品结构图成功后,我们针对产品之中坚相在思维就生矣一个轮廓。同时为产品结构图作为绘制原型的根据,可以避我们以产品设计中边画边改,跳上大掐细节,不见森林的牢笼。

顶此处,你是否还针对性效益布局图、信息结构图、结构图傻傻分不干净为?

文章最后:再次表明所有转载文章就供上,感谢PM_allen老师的享用,使爱我们的篇章点关注**吧!比心呦!**

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图