关于视频组帧播放的问题
C中:
定义结构体m_TmpAvFrm用于存放视频数据信息,其中AvData定义为:BYTE AvData[1];
函数BufferFrame用于收包组帧播放
当有数据包过来时,传递给函数BufferFrame做多包的连接,当组包完成一帧完整的数据时播放该帧
void CClientDlg::BufferFrame(TPostMonData * pMonPack)关键代码如下:
{
LPBYTE pData = pMonPack->MonData;
.
.
//一帧分多包发送单包长度为nSize,
memcpy(m_TmpAvFrm[nChanNum].pAvFrm->AvData + nCurVidLen, pData, nSize);
//最后多包组成一完成的帧,帧长为nCurVidLen
nCurVidLen= nCurVidLen+nSize;
.
.
H264PL_AddStreamFrame(m_CnnInfo.nPlayNum[nChanNum], SDT_VIDEO, m_TmpAvFrm[nChanNum].pAvFrm->AvData, nCurVidLen);
}当播放一帧图像时函数H264PL_AddStreamFrame的参数m_TmpAvFrm[nChanNum].pAvFrm->AvData也可用&m_TmpAvFrm[nChanNum].pAvFrm->AvData[0]来代替
均可正常播放;delphi中实现时:
定义同样的结构体:m_TmpAvFrm结构体中的AvData定义为AvData: array[0..0] of BYTE 和 C中的BYTE AvData[1];是一样的么?
关键代码如下:
var
pData:pbyte
begin
move(pData^, pointer(integer(@m_TmpAvFrm[nChanNum].pAvFrm.AvData[0]) + nCurVidLen)^, nSize);
H264PL_AddStreamFrame(m_CnnInfo.nPlayNum[nChanNum], SDT_VIDEO, @m_TmpAvFrm[nChanNum].pAvFrm.AvData[0], nCurVidLen);
end;
其中参数@m_TmpAvFrm[nChanNum].pAvFrm.AvData[0]换成@m_TmpAvFrm[nChanNum].pAvFrm.AvData均无法播放,请问:delphi中组包的过程是对的么?和C中的是否有出入?