common_yun.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. <?php
  2. //结束处理
  3. /*
  4. * 查询是否有保存(已结束直播)
  5. * 查询是否分片(有保存)
  6. * 是否需要合并(有分片)
  7. */
  8. function crontab_do_end_video_3(){
  9. try {
  10. $ret_array = array();
  11. //视频处理进行操作锁定,辨别字段 video_status 0:未进行任何处理 、1:已保存、2:分片合并中、3:合并完成、4:开始拉取视频 5:视频拉取中、6:拉取完成
  12. // 结束直播5分钟后,
  13. $sql = "select id,is_del_vod,video_type,channelid,begin_time,create_time,end_time,user_id,vote_number,destroy_group_status,group_id,video_status,source_url,file_id from ".DB_PREFIX."video where end_time < ".(NOW_TIME - 300)." and live_in = 0 and video_status = 0 limit 10";
  14. $sql = "select id,is_del_vod,video_type,channelid,begin_time,create_time,end_time,user_id,vote_number,destroy_group_status,group_id,video_status,source_url,file_id from ".DB_PREFIX."video where live_in = 3 and video_status = 0 limit 10";
  15. $list = $GLOBALS['db']->getAll($sql);
  16. if ($list){
  17. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
  18. $video_redis = new VideoRedisService();
  19. fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
  20. $api = createTimAPI();
  21. foreach ( $list as $k => $v )
  22. {
  23. $ret = array();
  24. $data = array();
  25. //1:表示已经清空了,录制视频;0:未做清空操作
  26. $v['is_del_vod'] = 1 ;
  27. if ($v['is_del_vod'] == 1){//
  28. fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
  29. $video_factory = new VideoFactory();
  30. $ret_g = $video_factory->GetVodRecordFiles($v['channelid'], $v['create_time']);
  31. log_file('GetVodRecordFiles','crontab_do_end_video_3');
  32. log_file($ret_g,'crontab_do_end_video_3');
  33. $data['video_status'] = 0;
  34. if ($ret_g['totalCount'] > 0){
  35. //视频存在
  36. if ($ret_g['totalCount'] > 1){
  37. $sql = "update ".DB_PREFIX."video set is_del_vod='0',video_status = '1' where id = ".$v['id'];
  38. $data['video_status'] = 1;
  39. }else{
  40. $sql = "update ".DB_PREFIX."video set is_del_vod='0',video_status = '3' where id = ".$v['id'];
  41. $data['video_status'] = 3;
  42. }
  43. log_file($sql,'crontab_do_end_video_3');
  44. $GLOBALS['db']->query($sql);
  45. $v['is_del_vod'] = 0;
  46. $data['is_del_vod'] = 0;
  47. }
  48. if($v['video_status']==1){
  49. $data['video_status'] = 1;
  50. }
  51. $ret['id'] = $v['id'];
  52. $ret['channelid'] = $v['channelid'];
  53. $ret['video_status'] = $data['video_status'];
  54. //1、被分片,需要合并处理
  55. $ret['concat_status'] = 0;
  56. if (intval($data['video_status']) == 1){
  57. //进行视频合并
  58. $channel_id = $v['channelid'];
  59. $new_file_name = $v['channelid']."_".$v['id'];
  60. log_file($new_file_name,'crontab_do_end_video_3');
  61. $ret_c = $video_factory->ConcatVideo($channel_id,$new_file_name);
  62. log_file($ret_c,'crontab_do_end_video_3');
  63. //status=1 经过合并 v_status 是否合并成功 1合并完成 0不需要合并
  64. if($ret_c['v_status']==1&&$ret_c['status']==1){
  65. //合并中
  66. $vodtaskid = $ret_c['vodtaskid'];
  67. $sql = "update ".DB_PREFIX."video set video_status= 2,vodtaskid='".$vodtaskid."' where id = ".$v['id'];
  68. log_file($sql,'crontab_do_end_video_3');
  69. $GLOBALS['db']->query($sql);
  70. $ret['concat_status'] = 1;
  71. }
  72. }
  73. log_file('data[\'video_status\']','crontab_do_end_video_3');
  74. log_file($data['video_status'],'crontab_do_end_video_3');
  75. if($data['video_status']==3&&$v['source_url']==''){
  76. $file_id = $ret_g['filesInfo'][0]['fileId'];
  77. $ret_file = $video_factory->DescribeVodPlayUrls($file_id);
  78. log_file($ret_file,'crontab_do_end_video_3');
  79. if($ret_file['file_id']!=''){
  80. $file_id = $ret_file['file_id'];
  81. $source_url = $ret_file['urls'][20];
  82. $sql = "update ".DB_PREFIX."video set source_url='".$source_url."',file_id = '".$file_id."' where id = ".$v['id'];
  83. log_file($sql,'crontab_do_end_video_3');
  84. $GLOBALS['db']->query($sql);
  85. }
  86. $ret['file_id'] = $data['file_id'] = $file_id;
  87. $ret['source_url'] =$data['source_url'] = $source_url;
  88. }
  89. $video_redis->update_db($v['id'], $data);
  90. }
  91. //直播结束 后相关数据处理(在后台定时执行)
  92. $ret['func']='do_end_video_3';
  93. $ret_array[]=$ret;
  94. }
  95. }
  96. return $ret_array;
  97. } catch (Exception $e) {
  98. return $e->getMessage();
  99. }
  100. }
  101. /*
  102. * 视频拉取处理
  103. */
  104. function crontab_do_end_video_4(){
  105. try {
  106. $ret_array = array();
  107. //视频处理进行操作锁定,辨别字段 video_status 0:未进行任何处理 、1:已保存、2:分片合并中、3:合并完成、4:开始拉取视频 5:视频拉取中、6:拉取完成
  108. $sql = "select id,is_del_vod,video_type,channelid,begin_time,create_time,end_time,user_id,vote_number,destroy_group_status,group_id,video_status,source_url,file_id from " . DB_PREFIX . "video where video_status = 3 limit 10";
  109. $list = $GLOBALS['db']->getAll($sql);
  110. if ($list){
  111. foreach ( $list as $k => $v ){
  112. $sql = "update ".DB_PREFIX."video set video_status = 4 where id = ".$v['id']." and video_status = 3";
  113. log_file($sql,'crontab_do_end_video_4');
  114. $GLOBALS['db']->query($sql);
  115. if($GLOBALS['db']->affected_rows()){
  116. fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
  117. $video_factory = new VideoFactory();
  118. $video_info = $video_factory->MultiPullVodFile($v['source_url'], $v['id'], get_gmtime());
  119. log_file($video_info,'MultiPullVodFile');
  120. if($video_info['codeDesc']=='Success'){
  121. $ret_array['sourceurl'] = $video_info['data'][0]['source_url'] ;
  122. $ret_array['filename'] = $video_info['data'][0]['file_name'] ;
  123. $ret_array['vodtaskid'] = $video_info['data'][0]['vod_task_id'] ;
  124. //更新状态 和任务ID:vodtaskid
  125. $sql = "update ".DB_PREFIX."video set video_status = 5,vodtaskid = '". $ret_array['vodtaskid']."' where id = ".$v['id']." and video_status = 4";
  126. log_file($sql,'crontab_do_end_video_4');
  127. $GLOBALS['db']->query($sql);
  128. if($GLOBALS['db']->affected_rows()){
  129. }
  130. }
  131. }
  132. }
  133. }
  134. return $ret_array;
  135. } catch (Exception $e) {
  136. return $e->getMessage();
  137. }
  138. }
  139. //获取通知事件
  140. function get_pullevent(){
  141. fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
  142. $video_factory = new VideoFactory();
  143. //合并是否完成(开始合并)
  144. $ret_g = $video_factory->PullEvent();
  145. foreach ($ret_g['data']['eventList'] as $key=>$item) {
  146. if($item['eventContent']['eventType']=='NewFileUpload'){
  147. $msghandle['NewFileUpload'][] = $item;
  148. }
  149. if($item['eventContent']['eventType']=='PullComplete'){
  150. $msghandle['PullComplete'][] = $item;
  151. }
  152. if($item['eventContent']['eventType']=='TranscodeComplete'){
  153. $msghandle['TranscodeComplete'][] = $item;
  154. }
  155. if($item['eventContent']['eventType']=='ConcatComplete'){
  156. $msghandle['ConcatComplete'][] = $item;
  157. }
  158. if($item['eventContent']['eventType']=='CreateImageSpriteComplete'){
  159. $msghandle['CreateImageSpriteComplete'][] = $item;
  160. }
  161. if($item['eventContent']['eventType']=='CreateSnapshotByTimeOffsetComplete'){
  162. $msghandle['CreateSnapshotByTimeOffsetComplete'][] = $item;
  163. }
  164. }
  165. log_file($msghandle,'get_pullevent');
  166. return $msghandle;
  167. }
  168. //URL转拉完成通知处理
  169. function crontab_do_pullcomplete(){
  170. //是否拉取完成(开始拉取)
  171. //视频记录转移到历史表(拉取完成)
  172. //$msghandle = test_PullComplete();
  173. $msghandle = get_pullevent();
  174. if($msghandle['PullComplete']){
  175. foreach($msghandle['PullComplete'] as $item){
  176. $PullComplete['vodtaskid'][] = "'".$item['eventContent']['data']['vodTaskId']."'";
  177. $PullComplete['fileUrl'][$item['eventContent']['data']['vodTaskId']] = $item['eventContent']['data']['fileUrl'];
  178. $PullComplete['pull_msghandle'][] = $item['msgHandle'];
  179. }
  180. }
  181. $ret_array = array();
  182. $pullcomplete_str = implode(',',$PullComplete['vodtaskid']);
  183. if($pullcomplete_str!=''){
  184. $sql = "select id,is_del_vod,video_type,channelid,begin_time,create_time,end_time,user_id,vote_number,destroy_group_status,group_id,video_status,file_id,vodtaskid from " . DB_PREFIX . "video where video_status = 5 and vodtaskid in (".$pullcomplete_str.")";
  185. log_file($sql,'crontab_do_pullcomplete');
  186. $ret_array['sql'] = $sql;
  187. $list = $GLOBALS['db']->getAll($sql);
  188. }
  189. $url = $PullComplete['fileUrl'];
  190. if ($list) {
  191. foreach ($list as $k => $v) {
  192. //更新拉取完成状态
  193. $play_url = $url[$v['vodtaskid']];
  194. $sql = "update ".DB_PREFIX."video set video_status = 6,play_url ='".$play_url."' where id = ".$v['id']." and video_status = 5";
  195. $ret_array['sql1'] = $sql;
  196. log_file($sql,'crontab_do_pullcomplete');
  197. $GLOBALS['db']->query($sql);
  198. if($GLOBALS['db']->affected_rows()){
  199. //删除原视频
  200. /*fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
  201. $video_factory = new VideoFactory();
  202. $channel_id = $v['channelid'];
  203. $video_info = $video_factory->DeleteVodFiles($channel_id);
  204. $ret_array['video_info'] = $video_info;
  205. log_file('DeleteVodFiles','crontab_do_pullcomplete');
  206. log_file($video_info,'crontab_do_pullcomplete');*/
  207. }
  208. }
  209. }
  210. return $ret_array;
  211. }
  212. //视频拼接完成通知处理
  213. function crontab_do_concatcomplete(){
  214. //是否拉取完成(开始拉取)
  215. //视频记录转移到历史表(拉取完成)
  216. $msghandle = test_ConcatComplete();
  217. if($msghandle['ConcatComplete']){
  218. foreach($msghandle['ConcatComplete'] as $item){
  219. $ConcatComplete['vodtaskid'][] = $item['eventContent']['data']['vodTaskId'];
  220. $ConcatComplete['concat_msghandle'][] = $item['msgHandle'];
  221. }
  222. }
  223. return $ConcatComplete;
  224. }
  225. //视频上传完成通知处理
  226. function crontab_do_newfileupload(){
  227. //是否拉取完成(开始拉取)
  228. //视频记录转移到历史表(拉取完成)
  229. $msghandle = test_NewFileUpload();
  230. if($msghandle['ConcatComplete']){
  231. foreach($msghandle['ConcatComplete'] as $item){
  232. $NewFileUpload['vodtaskid'][] = $item['eventContent']['data']['vodTaskId'];
  233. $NewFileUpload['concat_msghandle'][] = $item['msgHandle'];
  234. }
  235. }
  236. return $NewFileUpload;
  237. }
  238. //视频转码完成通知处理
  239. function crontab_do_transcodecomplete(){
  240. //是否拉取完成(开始拉取)
  241. //视频记录转移到历史表(拉取完成)
  242. $msghandle = test_TranscodeComplete();
  243. if($msghandle['ConcatComplete']){
  244. foreach($msghandle['ConcatComplete'] as $item){
  245. $TranscodeComplete['vodtaskid'][] = $item['eventContent']['data']['vodTaskId'];
  246. $TranscodeComplete['concat_msghandle'][] = $item['msgHandle'];
  247. }
  248. }
  249. return $TranscodeComplete;
  250. }
  251. //获取视频上传完成通知处理
  252. function test_NewFileUpload(){
  253. $msghandle['NewFileUpload'] = array(
  254. 0 =>
  255. array (
  256. 'msgHandle' => '476553469977303',
  257. 'eventContent' =>
  258. array (
  259. 'data' =>
  260. array (
  261. 'fileId' => '9031868222912365916',
  262. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/75ac9aa89031868222912365916/f0.mp4',
  263. 'message' => '',
  264. 'status' => 0,
  265. 'vodTaskId' => '',
  266. ),
  267. 'eventType' => 'NewFileUpload',
  268. 'version' => '4.0',
  269. ),
  270. ),
  271. 1 =>
  272. array (
  273. 'msgHandle' => '476553469977303',
  274. 'eventContent' =>
  275. array (
  276. 'data' =>
  277. array (
  278. 'fileId' => '9031868222912365916',
  279. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/75ac9aa89031868222912365916/f0.mp4',
  280. 'message' => '',
  281. 'status' => 0,
  282. 'vodTaskId' => '',
  283. ),
  284. 'eventType' => 'NewFileUpload',
  285. 'version' => '4.0',
  286. ),
  287. ),
  288. );
  289. return $msghandle;
  290. }
  291. //获取URL转拉完成通知处理
  292. function test_PullComplete(){
  293. $msghandle['PullComplete'] = array(
  294. 0 =>
  295. array (
  296. 'msgHandle' => '516294617180961',
  297. 'eventContent' =>
  298. array (
  299. 'data' =>
  300. array (
  301. 'fileId' => '9031868222916768589',
  302. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/b2ebc5399031868222916768589/f0.mp4',
  303. 'message' => '',
  304. 'status' => 0,
  305. 'vodTaskId' => 'pull-c2c90cc95cb9923d24b98e38c3443dee',
  306. ),
  307. 'eventType' => 'PullComplete',
  308. 'version' => '4.0',
  309. ),
  310. ),
  311. );
  312. return $msghandle;
  313. }
  314. //视频转码完成通知处理
  315. function test_TranscodeComplete(){
  316. $msghandle['TranscodeComplete'] = array(
  317. 0 =>
  318. array (
  319. 'msgHandle' => '374104058407037',
  320. 'eventContent' =>
  321. array (
  322. 'data' =>
  323. array (
  324. 'coverUrl' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/shotup/f0.100_0.jpg',
  325. 'duration' => 351,
  326. 'fileId' => '9031868222915102568',
  327. 'fileName' => 'edu_20_2017-04-24-17-36-17_2017-04-24-17-36-17',
  328. 'message' => '',
  329. 'playSet' =>
  330. array (
  331. 0 =>
  332. array (
  333. 'definition' => 0,
  334. 'url' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/5782b7239031868222915102568/f0.mp4',
  335. 'vbitrate' => 0,
  336. 'vheight' => 0,
  337. 'vwidth' => 0,
  338. ),
  339. 1 =>
  340. array (
  341. 'definition' => 210,
  342. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f210.m3u8',
  343. 'vbitrate' => 302291,
  344. 'vheight' => 180,
  345. 'vwidth' => 320,
  346. ),
  347. 2 =>
  348. array (
  349. 'definition' => 220,
  350. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f220.m3u8',
  351. 'vbitrate' => 577472,
  352. 'vheight' => 360,
  353. 'vwidth' => 640,
  354. ),
  355. 3 =>
  356. array (
  357. 'definition' => 20,
  358. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f20.mp4',
  359. 'vbitrate' => 511119,
  360. 'vheight' => 360,
  361. 'vwidth' => 640,
  362. ),
  363. 4 =>
  364. array (
  365. 'definition' => 230,
  366. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f230.m3u8',
  367. 'vbitrate' => 1127687,
  368. 'vheight' => 720,
  369. 'vwidth' => 1280,
  370. ),
  371. ),
  372. 'status' => 0,
  373. 'vodTaskId' => 'transcode-65e1de88d50c494778253a872ac0a69b',
  374. ),
  375. 'eventType' => 'TranscodeComplete',
  376. 'version' => '4.0',
  377. ),
  378. ),
  379. 1 =>
  380. array (
  381. 'msgHandle' => '374104058407037',
  382. 'eventContent' =>
  383. array (
  384. 'data' =>
  385. array (
  386. 'coverUrl' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/shotup/f0.100_0.jpg',
  387. 'duration' => 351,
  388. 'fileId' => '9031868222915102568',
  389. 'fileName' => 'edu_20_2017-04-24-17-36-17_2017-04-24-17-36-17',
  390. 'message' => '',
  391. 'playSet' =>
  392. array (
  393. 0 =>
  394. array (
  395. 'definition' => 0,
  396. 'url' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/5782b7239031868222915102568/f0.mp4',
  397. 'vbitrate' => 0,
  398. 'vheight' => 0,
  399. 'vwidth' => 0,
  400. ),
  401. 1 =>
  402. array (
  403. 'definition' => 210,
  404. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f210.m3u8',
  405. 'vbitrate' => 302291,
  406. 'vheight' => 180,
  407. 'vwidth' => 320,
  408. ),
  409. 2 =>
  410. array (
  411. 'definition' => 220,
  412. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f220.m3u8',
  413. 'vbitrate' => 577472,
  414. 'vheight' => 360,
  415. 'vwidth' => 640,
  416. ),
  417. 3 =>
  418. array (
  419. 'definition' => 20,
  420. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f20.mp4',
  421. 'vbitrate' => 511119,
  422. 'vheight' => 360,
  423. 'vwidth' => 640,
  424. ),
  425. 4 =>
  426. array (
  427. 'definition' => 230,
  428. 'url' => 'http://1251020758.vod2.myqcloud.com/3ebe8826vodtransgzp1251020758/5782b7239031868222915102568/f0.f230.m3u8',
  429. 'vbitrate' => 1127687,
  430. 'vheight' => 720,
  431. 'vwidth' => 1280,
  432. ),
  433. ),
  434. 'status' => 0,
  435. 'vodTaskId' => 'transcode-65e1de88d50c494778253a872ac0a69b',
  436. ),
  437. 'eventType' => 'TranscodeComplete',
  438. 'version' => '4.0',
  439. ),
  440. ),
  441. );
  442. return $msghandle;
  443. }
  444. //获取视频拼接完成通知处理
  445. function test_ConcatComplete(){
  446. $msghandle['ConcatComplete'] = array(
  447. 0 =>
  448. array (
  449. 'msgHandle' => '560197602638589',
  450. 'eventContent' =>
  451. array (
  452. 'data' =>
  453. array (
  454. 'fileInfo' =>
  455. array (
  456. 0 =>
  457. array (
  458. 'fileId' => '9031868222915958977',
  459. 'fileType' => 'mp4',
  460. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/6a89d21a9031868222915958977/playlist.f9.mp4',
  461. 'message' => '',
  462. 'status' => 0,
  463. ),
  464. ),
  465. 'vodTaskId' => 'concat-3409059688705824a024587d83a2362b',
  466. ),
  467. 'eventType' => 'ConcatComplete',
  468. 'version' => '4.0',
  469. ),
  470. ),
  471. 1 =>
  472. array (
  473. 'msgHandle' => '526513940839864',
  474. 'eventContent' =>
  475. array (
  476. 'data' =>
  477. array (
  478. 'fileInfo' =>
  479. array (
  480. 0 =>
  481. array (
  482. 'fileId' => '9031868222915981242',
  483. 'fileType' => 'mp4',
  484. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/6abc26c79031868222915981242/playlist.f9.mp4',
  485. 'message' => '',
  486. 'status' => 0,
  487. ),
  488. ),
  489. 'vodTaskId' => 'concat-344cf1aec7c3693b0df44557600f611d',
  490. ),
  491. 'eventType' => 'ConcatComplete',
  492. 'version' => '4.0',
  493. ),
  494. ),
  495. 2 =>
  496. array (
  497. 'msgHandle' => '371074117837562',
  498. 'eventContent' =>
  499. array (
  500. 'data' =>
  501. array (
  502. 'fileInfo' =>
  503. array (
  504. 0 =>
  505. array (
  506. 'fileId' => '9031868222915982899',
  507. 'fileType' => 'mp4',
  508. 'fileUrl' => 'http://1251020758.vod2.myqcloud.com/8a96e57evodgzp1251020758/6abccd5a9031868222915982899/playlist.f9.mp4',
  509. 'message' => '',
  510. 'status' => 0,
  511. ),
  512. ),
  513. 'vodTaskId' => 'concat-abb69264e2906f69ac81544a1144aa4f',
  514. ),
  515. 'eventType' => 'ConcatComplete',
  516. 'version' => '4.0',
  517. ),
  518. ),
  519. );
  520. return $msghandle;
  521. }
  522. ?>