17.使用avilib库:将h264格式的码流数据保存成AVI格式

一:下载:

https://github.com/wyyrepo/avilib

解压后得到如下文件:
avilib.c 
avilib.h

二:测试代码:

//*************h264转AVI格式********************
HI_S32 SAMPLE_COMM_VENC_AVI(VENC_STREAM_S *stStream)
{
	static avi_t *hAVIFile = NULL;

	static char recordfish = 0x1;
	
	int j = 0;
	int len = 0;
	char *pData = NULL;

	if(recordfish == 0x00)
	{
		return HI_FAILURE;
	}

	if (hAVIFile == NULL)
	{		
		hAVIFile = AVI_open_output_file("./stream_chn_yang_0.avi");
		printf("[%s:%d]:[yang] AVI_open_output_file\n",__FUNCTION__,__LINE__);

		AVI_set_video(hAVIFile, 1280, 720, 30, "H264");
		printf("[%s:%d]:[yang] AVI_set_video\n",__FUNCTION__,__LINE__);
	}

	if((stStream->u32Seq % 100) == 0)
	{
		printf("[%s:%d]:[yang] stStream->u32Seq = %d\n",__FUNCTION__,__LINE__,stStream->u32Seq);
	}	

	for(j = 0;j < stStream->u32PackCount;j++)
	{
		len 	= stStream->pstPack[j].u32Len - stStream->pstPack[j].u32Offset;
		pData	= (stStream->pstPack[j].pu8Addr + stStream->pstPack[j].u32Offset);					

		int keyfame = 0;
		if (stStream->pstPack[j].DataType.enH264EType == H264E_NALU_ISLICE)
		{
			keyfame = 1;	// 是I帧
		}
		AVI_write_frame(hAVIFile, pData,len,keyfame);	//写入一帧h264数据		
	}
	
	if(stStream->u32Seq > 900 && hAVIFile != NULL)
	{
		printf("[%s:%d]:[yang] AVI_close\n",__FUNCTION__,__LINE__);
		AVI_close(hAVIFile);
		hAVIFile = NULL;

		recordfish = 0x00;
	}
	
	return HI_SUCCESS;

}

三:转码的avi视频播放成功;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值