1. 框架概要
软探针为了准确定位故障,需要获得3方面数据:
a) 播放器播放状态(卡顿、缓冲等)
b) 网络协议KPI 指标(TCP/HTTP 协议)
c) 机顶盒运行状态(内存/CPU/ROM 等)
通过网络抓包和协议解析,难以精准的判定播放器的目前节目播放状态。 本文定义播放器和软探针之间接口,用于实时传递节目播放状态。据次可以使得软探针准确定位故障,显著提高视频监控系统的实用性和有效性。
2. 接口通信方式
播放器软件、软探针2个程序实际运行在1个android Linux 系统内,故采用IPC 进程通信的方式进行交互。
考虑到2个软件在运行中彼此独立,因此采用无连接的UDP 套接字方传输信息;为了便于维护和排障,传输内容采用XML 格式(UTF-8)编码。
2.1. U DP 套接字通信方式
使用套接字socket 通信的播放器为客户端,软探针为服务器端。播放器在播放事件发生的时间点,立刻发出相应的报文,播放器无需等待软探针的任何反馈信息。创建套接字范文如下:
sock =socket (PF_LOCAL, SOCK_DGRAM, 0);
name.sun_family = AF_LOCAL;
name.sun_path="/data/video_player_states.sock";
对于播放器,使用sendto 发送数据;对于软探针,使用bind + recvfrom 来接收数据。
2.2.播放状态报文
播放状态报文是播放器在发生一些状态切换时,向软探针发出的状态通知。状态报文已XML格式书写,以UTF-8格式编码以保障在非ASCII内容的情况下正确传输。状态报文的样例格式如下:
<videoplayer_state>
socket通信报文格式<type>Play</type>
<contentid>4890526699577299046</contented>
<utcsecond>1420699684</utcsecond>
<bufferseconds>8</bufferseconds>
<name></name>
<url>xx.m3u8</url>
<bitrate>4000000</bitrate>
<width>1920</width>
<height>1080</height>
<videocodec>H264</videocodec>
<audiocodec>AAC</audiocodec>
</videoplayer_state>
2.3.播放器采集信息定义
播放器将1个节目播放的整个播放过程中所发生的时间,逐一进行上报。
2.3.1.开始播放(Play)
2.3.2.缓冲区字节数(CacheBytes)
2.3.3.缓冲开始(BufferStart)
2.3.4.缓冲结束(BufferEnd)