ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

海思 Hi3531D 视频流获取代码流程

2022-06-15 20:01:21  阅读:242  来源: 互联网

标签:venc 视频流 MPI SAMPLE step HI VENC 海思 Hi3531D


代码大概流程

main.c                                  |venc/sample_venc.c
 ->SAMPLE_VENC_DUALPP_CLASSIC           |venc/sample_venc.c
  ->SAMPLE_COMM_VENC_StartGetStream     |common/sample_comm_venc.c
   ->SAMPLE_COMM_VENC_GetVencStreamProc |common/sample_comm_venc.c                           
    ->rtp_send_ch0                      |common/send_h264file_rtp.c
     ->h264nal2rtp_send1                |common/send_h264file_rtp.c

详细流程

SAMPLE_VENC_DUALPP_CLASSIC
 enViMode = SAMPLE_VI_MODE_8_1080P  默认
 s32ChnNum = 4  默认四个通道数
 stVbConf.u32MaxPoolCnt 设置缓冲池最大可以容纳128
 stVbConf.astCommPool[x] 设置视频的数据块大小
 stVbConf.astCommPool[x].u32BlkCnt=32; 设置视频数据块的个数
 -> 设置视频存放的缓冲区
 ->step 2: mpp system init.
   ->HI_MPI_SYS_Exit 先销毁音频编解码通道等
   ->HI_MPI_VB_SetConf 然后设置系统配置 
   ->HI_MPI_VB_Init 然后初始化系统 
 ->step 3: start vi dev & chn to capture
   ->SAMPLE_COMM_VI_Start
   ->HI_MPI_VI_BindChn
   ->HI_MPI_VI_SetChnAttr 设置通道属性
   ->HI_MPI_VI_EnableChn 启用VI通道
 ->step 4: 获取图片大小,开启VPSS,用于图片的裁剪旋转等
 ->step 5: start stream venc 设置编码通道
  ->HI_MPI_VENC_CreateChn 创建编码通道
  ->HI_MPI_VENC_StartRecvPic 开启编码通道接收输入图像
 ->step 6: stream venc process -- get stream, then save it to file   SAMPLE_COMM_VENC_GetVencStreamProc, 采用新的线程执行
  -> step 6.1:  check & prepare save-file & venc-fd
   ->HI_MPI_VENC_GetChnAttr     获取编码通道的编码属性
   ->HI_MPI_VENC_GetFd   根据编码通道对应的设备文件句柄
  -> step 6.2:  Start to get streams of each channel.
   ->SAMPLE_COMM_VENC_GetFilePostfix  根据类型获取对用文件属性 .mp4, .h264
   ->HI_MPI_VENC_GetStreamBufInfo  获取码流的物理地址和大小
     ->HI_MPI_VENC_Query 查询当前帧包含多少包
     ->stStream.pstPack=(VENC_PACK_S*)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks); 申请内存地址
     ->HI_MPI_VENC_GetStream 获取帧数据
     ->SAMPLE_COMM_VENC_SaveStream 保存为文件
     ->rtp_send_ch0 构造RTP包通过网络发送
 ->step 7 退出程序 
  ->HI_MPI_SYS_UnBind  数据源到数据接收者的解绑
  ->HI_MPI_VENC_StopRecvPic 停止编码通道接收输入图像
  ->HI_MPI_VENC_DestroyChn 销毁编码通道

结构体

typedef struct hiVENC_PACK_S
{
      HI_U32   			u32PhyAddr;      /*流包首地址*/
      HI_U8   			*pu8Addr;        /*流包物理地址*/
      HI_U32   			u32Len;          /*流包长度*/
      HI_U64   			u64PTS;          /*时间戳,单位:us*/
      HI_BOOL  			bFrameEnd;       /*结束帧*/
      VENC_DATA_TYPE_U  	DataType;        /*视频类型编解码*/
      HI_U32   			u32Offset;       /*流包中有效数据与流首地址的偏移量 */
      HI_U32 			u32DataNum;      /*当前码流包序号,包含其它类型的码流包的个数*/
      VENC_PACK_INFO_S 	      stPackInfo[8];   /*当前码流包数据中包含其它类型码流包数据信息*/
}VENC_PACK_S;
typedef struct hiVENC_PACK_INFO_S
{
      VENC_DATA_TYPE_U  u32PackType;            /*当前码流包数据包含其它码流包的类型*/
      HI_U32 u32PackOffset;                     /*当前码流包数据包含其它码流包的偏移*/                
      HI_U32 u32PackLength;                     /*当前码流包数据包含其它码流包的大小*/         
}VENC_PACK_INFO_S;

mpp/include 接口参考文档: HiMPP V3.0 媒体处理软件开发参考.pdf

标签:venc,视频流,MPI,SAMPLE,step,HI,VENC,海思,Hi3531D
来源: https://www.cnblogs.com/han-guang-xue/p/16379638.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有