媒体播放方法、设备及音乐教学系统的制作方法_2

文档序号:9670797阅读:来源:国知局
取一个音频帧(AV_Info+Aud1Data),并存放到网络缓冲区211中。需要说明的是,每个音频帧包括的时间戳为多个音频采样点中第一个音频样点的采集时间,可以标记为第一时间戳。在根据本发明一个实施例中,接收单元210对音频数据包进行处理的代码示例如下:
[0028]PushAAC (ch, dwstamp, m_szBuf, tmp_nLen);
[0029]ch:通道名称,根据数据包装头传输过来的id来匹配通道。
[0030]dwstamp:是从AV_Info中剥离出来的第一时间戳,数据类型为—int64
[0031]m_szBuf:包含 Aud1Data 的缓冲
[0032]tmp_nLen:Aud1Data 的总长
[0033]//此函数把包含第一时间戳的音频帧存放到网络缓冲区
[0034]另外,接收单元210所接收的视频数据包消息格式例如为:
[0035]TCP_info+AV_Info+VideoData
[0036]其中,TCP_info为TCP传输协议头。
[0037]AV_Info包括视频帧控制参数:
[0038]DWORD c_type 控制类型;
[0039]—int64 stamp 时间戮;
[0040]DWORD c_value 控制数值。
[0041]VideoData为一个视频帧对应的压缩数据,压缩格式例如为H.264,但不限于此。AV_Info中所包括的时间戳为视频帧的采集时间,可以标记为第二时间戳。换言之,该时间戳为媒体终端采集原始图像的捕获时间。
[0042]在接收到一个视频数据包时,接收单元210可以从其中提取出视频帧(AV_Info+VideoData),并存放到网络缓冲区211中。根据本发明一个实施例,接收单元对视频数据包进行处理的代码示例如下:
[0043]PushVideoStream(ch, dwstamp, m_szBuf, tmp_nLen);
[0044]ch:通道名称,根据数据包协议头传输过来的id来匹配通道。
[0045]dwstamp:是从AV_Info中剥离出来的第二时间戳,数据类型为—int64
[0046]m_szBuf:包含SPS,PPS和视频压缩数据的缓冲
[0047]tmp_nLen:视频压缩数据的总长
[0048]//此函数把包含第二时间戳的视频数据存放到网络缓冲区
[0049]如上所述,网络缓冲区211中存放有音频帧和视频帧。在根据本发明一个实施例中,网络缓冲区211具体可以包括音频缓冲区和视频缓冲区。音频缓冲区适于存放音频帧。视频缓冲区适于存放视频帧。需要说明的是,根据本发明的媒体终端在采集音频和视频时采用相同的时间基准。因此,接收单元210所接收到的音频帧的第一时间戳和视频帧的第二时间戳时间基准相同。这里,音频缓冲区和视频缓冲区都可以被配置为例如环形缓冲。环形缓冲可以存放最新接收(例如20秒)的数据。这样,网络缓冲区211可以始终向音频和视频解码单元提供最新的数据。
[0050]音频解码单元220适于对网络缓冲区211中音频帧进行解码操作。经解码的音频帧包括多个音频样点和第一时间戳。在根据本发明一个实施例中,音频解码单元220进行解码操作的代码示例如下:
[0051]Ret = GetAACStream(ch, &dwstamp, m_aud1stream, &aud1_nLen)
[0052]视频解码单元240适于对网络缓冲区中视频帧进行解码操作。在根据本发明一个实施例中,视频解码单元240进行解码操作的代码示例如下:
[0053]Ret = GetVideoStream(ch, &dwstamp, m_videostream, &video_nLen)
[0054]音频播放单元230适于对来自音频解码单元220的音频帧进行播放。在根据本发明一个实施例中,音频播放单元230具有播放缓冲区231。音频播放适于依次从音频解码单元220提取音频帧,例如每次提取一个音频帧。这里,每提取一个音频帧的操作可以称之为一次选定操作。音频播放单元230将每次所选定的音频帧推送到播放缓冲区231中。这里,播放缓冲区231例如为声卡的缓冲区,但不限于此。在每次选定操作中,音频播放单元230适于根据音频帧的第一时间戳进行选定,从而使得音频帧在播放缓冲区231中是按照采集时间排序的。这样,音频播放单元230可以依次对播放缓冲区231中每个音频帧的播放音频样点进行播放。需要说明的是,每个音频帧为根据本发明的媒体终端所采集的例如乐器演奏等内容。为了保持声音的高保真采集,媒体终端没有对音频帧进行静音检测处理(即静音抑制操作,对静音数据不进行网络传输)。这样,在媒体播放设备200中,音频播放单元230可以对音频数据进行高品质的播放。
[0055]另外,由于网络抖动等原因,在音频数据播放延时较大时,音频播放单元230可以对播放延时进行消减操作。下面结合根据本发明一个实施例进行示例性说明。音频播放单元230在每次执行选定操作时,还适于检测当前播放缓冲区231的缓冲长度是否超过阈值。这里,缓冲长度是指播放当前缓冲区中数据需要的播放时长,阈值例如为500毫秒。如果播放缓冲区231的缓冲长度小于阈值,则音频播放单元230确定当前音频播放延时在正常范围内,音频播放单元230将所选定的这帧音频帧推送到播放缓冲区231中。如果播放缓冲区230的缓冲长度大于阈值,音频播放单元230会执行静音检测操作,以判断所选定的音频帧是否为静音数据。这里,静音数据是指声音信号能量低于预定门限的数据。静音检测的算法例如为短时能量检测算法,或者短时过零率检测算法。但不限于此,任何已知的静音检测算法都可以应用在本发明的实施方式中。如果所选定的音频帧为静音数据,则音频播放单元230可以舍弃这帧音频帧,并继续执行下一次的选定操作。如果所选定的音频帧非静音数据,音频播放单元230将该音频帧推送到播放缓冲区231中。这样,根据本发明的媒体播放设备200可以在播放延时较长时,通过静音检测操作,消减播放延时以提高播放实时性。而在缓冲长度未超过阈值时,音频播放单元230通过不执行静音检测,从而可以对媒体终端所采集的例如乐器演奏等声音进行完整的播放。应当注意,这对于音乐教学等对声音实时性要求较高的流媒体直播方案来说,本发明的音频播放单元230同时考虑到音频播放的实时性和完整性,从而可以极大提升首乐教学的品质。
[0056]另外,音频播放单元230还可以在没有待播放的音频帧(即播放缓冲区为空)时,生成空白帧并推送到播放缓冲区231中。这样音频播放单元230可以进行连续的声音输出,而不会出现卡断现象,从而极大提高用户的体验度。
[0057]另外,在播放缓冲区231中缓冲长度达到缓冲区上限时,音频播放单元230可以删除播放缓冲区中一个或多个音频帧。在一个实施例中,播放缓冲区为环形缓冲。环形缓冲例如可以最多存放16帧音频帧,但不限于此。在缓冲长度达到16帧时,音频播放单元230可以删除当前环形缓冲区中最早的一个音频帧。这样,音频播放单元230通过删除音频帧的方式以便继续缓存最新的音频帧,而对播放音频的质量影响很小。
[0058]另外,音频播放单元230在确定所检测的音频帧非静音数据,并且在将该音频帧存放到播放缓冲区231之前,还可以根据这个音频帧的第一时间戳和缓冲长度计算当前所播放音频样点的采集时间。在根据本发明一个实施例中,音频播放单元230根据下述公式计算当前播放音频样点的采集时间:
[0059]curastamp = dwstamp-1nbufferlength*1000/AUD10_PERSEC0ND_REAL
[0060]其中,AUD10_PERSEC0ND_REAL为音频播放单元230的播放速度(单位为byte/s),inbufferlength为播放缓冲区231中数据长度(单元为byte),dwstamp为所选定的音频帧的第一时间戳,curastamp为当前所播放的音频样点的采集时间(最小单位为毫秒)。例如第一时间戮 dw
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1