H.264编码引擎内建了两个DMA通道,通道O用于读写原始图像、参考帧、重建帧等数据,通道1用于将编码完的H.264码流回写到系统内存中。在编码引擎工作之前,需要为图像原始数据、参考帧、重建帧缓存分配物理上连续的内存空间,并将缓存起始地址和长度以一定格式组织成DMA命令链数组,设置给编码引擎DMA通道O。将存放编码后码流数据的缓存基址设置给通道1。而H.264编码参数,例如条带类型、量化参数等则直接通过寄存器设置。
编码1帧图像时,H.264编码引擎会根据DMA命令链数组中的图像数据和参考帧缓存基址,以宏块为单元读入当前帧和参考帧,进行运动估计、运动补偿、整型
DCT变换和量化。通过DMA将重建帧写到系统内存中,更新参考帧缓存。最后进行熵编码,生成H.264码流并通过DMA通道1写回到系统内存中。完成编码之后,编码引擎通过中断通知主CPU。
2.3 RTSP流媒体服务器
实时流协议(Real Time Streaming Protocol,RTSP)是由Real Networks和Netscape公司共同提出的,该协议定义了一对多的应用程序如何有效地通过IP网络传送多媒体数据的方法。RTSP协议构建在实时传输协议(Real-time Transport Protocol,RTP)和实时控制协议(RealT-ime Control Protocol,RTCP)之上,它使用TCP或者UDP完成数据传输。
如图5所示,RTSP服务器软件设计为分层结构,采用socket网络编程和pthread多线程技术实现。系统设计一个单独的线程用于监听RTSP端口以及进行RTSP会话的信令交互处理,这样的设计保证服务器能够对每个客户连接作出快速的响应。当一个RTSP会话成功建立之后,服务器将为该会话分配一组RTP/RTCP端口以及相应的缓冲区,同时创建一个新的线程用于负责发送RTP和RTCP报文以及接收、分析客户端反馈的RTCP接收者报告。在RTSP、RTP、RTCP协议实现和音视频编码器之间设计了一层实时流媒体管理层,通过它将音视频采集和编码驱动的初始化、采集数据、编码以及在运行过程中更改采集或者编码参数(如更改码率、帧率、请求编码关键帧)等操作抽象成统一的实时媒体文件接口。
结语
本文设计的基于GM8180的嵌入式视频服务器,通过片上的H.264编码引擎实现2路D1分辨率的H.264实时编码,通过软件实现2路AMRNB音频编码,以及实时流媒体传输的相关协议。充分挖掘了GM8180这款ASIC芯片的潜在性能。