请问,如何用ffmeg【接收摄像头吐出的PS流,并将其转换为TS流推送出去】?

Swordscsdner 2017-10-24 11:40:02
没研究过ffmpeg, 所以不太熟悉,来这里问一下大神们,直接ffmpeg命令能做到吗?
还是需要用ffmpeg的库自行开发?
...全文
1862 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐阳2100 2018-01-25
  • 打赏
  • 举报
回复
EasyDarwin-EasyCamera源码,仅供参考
bool GetH246FromPS(IN BYTE* pBuffer, IN int nBufLenth, BYTE** pH264, int& nH264Lenth, BOOL& bVideo,BOOL& bAudio)
{
	if (!pBuffer || nBufLenth <= 0)
	{
		return FALSE;
	}

	BYTE* pH264Buffer = NULL;
	int nHerderLen = 0;

	if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xE0)//E==视频数据(此处E0标识为视频)
	{
		bVideo = TRUE;
		bAudio = FALSE;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xC0) //C==音频数据?
	{
		*pH264 = NULL;
		nH264Lenth = 0;
		bVideo = FALSE;
		bAudio = TRUE;
		//BYTE * pOutBuffer = NULL;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xBA)//视频流数据包 包头
	{
		bVideo = TRUE;
		*pH264 = NULL;
		nH264Lenth = 0;
		return FALSE;
	}
	return FALSE;
}
沐阳2100 2018-01-25
  • 打赏
  • 举报
回复
EasyDarwin-EasyCamera源码,仅供参考
bool GetH246FromPS(IN BYTE* pBuffer, IN int nBufLenth, BYTE** pH264, int& nH264Lenth, BOOL& bVideo,BOOL& bAudio)
{
	if (!pBuffer || nBufLenth <= 0)
	{
		return FALSE;
	}

	BYTE* pH264Buffer = NULL;
	int nHerderLen = 0;

	if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xE0)//E==视频数据(此处E0标识为视频)
	{
		bVideo = TRUE;
		bAudio = FALSE;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xC0) //C==音频数据?
	{
		*pH264 = NULL;
		nH264Lenth = 0;
		bVideo = FALSE;
		bAudio = TRUE;
		//BYTE * pOutBuffer = NULL;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xBA)//视频流数据包 包头
	{
		bVideo = TRUE;
		*pH264 = NULL;
		nH264Lenth = 0;
		return FALSE;
	}
	return FALSE;
}
沐阳2100 2018-01-25
  • 打赏
  • 举报
回复
EasyDarwin-EasyCamera源码,仅供参考
bool GetH246FromPS(IN BYTE* pBuffer, IN int nBufLenth, BYTE** pH264, int& nH264Lenth, BOOL& bVideo,BOOL& bAudio)
{
	if (!pBuffer || nBufLenth <= 0)
	{
		return FALSE;
	}

	BYTE* pH264Buffer = NULL;
	int nHerderLen = 0;

	if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xE0)//E==视频数据(此处E0标识为视频)
	{
		bVideo = TRUE;
		bAudio = FALSE;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xC0) //C==音频数据?
	{
		*pH264 = NULL;
		nH264Lenth = 0;
		bVideo = FALSE;
		bAudio = TRUE;
		//BYTE * pOutBuffer = NULL;
		nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
		pH264Buffer = pBuffer + nHerderLen;
		if (*pH264 == NULL)
		{
			*pH264 = new BYTE[nBufLenth];
		}
		if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
		{
			memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
		}
		nH264Lenth = nBufLenth - nHerderLen;
		return TRUE;
	}
	else if (pBuffer
		&& pBuffer[0] == 0x00
		&& pBuffer[1] == 0x00
		&& pBuffer[2] == 0x01
		&& pBuffer[3] == 0xBA)//视频流数据包 包头
	{
		bVideo = TRUE;
		*pH264 = NULL;
		nH264Lenth = 0;
		return FALSE;
	}
	return FALSE;
}
Swordscsdner 2017-10-24
  • 打赏
  • 举报
回复
问题先简化一下:怎样将ps流转成ts流?有没有可以用的开源代码?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧