summaryrefslogtreecommitdiff
path: root/pps.h
blob: 06a664265c93ad00571117049795d515993facc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
#ifndef __PPS_H__
#define __PPS_H__


#ifndef HASH_VALUE_LENGTH
#define HASH_VALUE_LENGTH  20
#endif

#define PPS_EXTRA_MSG_LEN  64
#define PPS_MAX_MAP_SIZE   65536

typedef unsigned long long uint64_t;
typedef long long          int64_t;

typedef enum pps_event_id
{
	EPPS_SERVER_TIMEOUT,            // 0,  连接服务器超时,停止播放
	EPPS_NO_SERVER,                 // 1,  找不到服务器,停止播放
	EPPS_SERVER_NO_RESPONSE,        // 2,  服务器未响应,停止播放
	EPPS_SERVER_INVALID,            // 3,  解析服务器域名失败.
	EPPS_VERSION_LOW,               // 4,  客户端版本号太低,退出网络
	EPPS_CLIENT_NAME,               // 5,  客户端名称或引用页不正确,退出播放
	EPPS_URL_INVALID,               // 6,  播放的文件不存在或网址错误
	EPPS_NO_SERVICE,                // 7,  服务不存在,停止播放
	EPPS_OUT_OF_SERVICE,            // 8,  不在服务区.    
	EPPS_MEDIA_INFO_ERROR,          // 9,  媒体信息加载时错误..
	EPPS_INDEX_INFO_ERROR,          // 10, 媒体索引信息错误
	EPPS_NO_INDEX,                  // 11, 没有获取到媒体索引信息,不能拖动播放位置
	EPPS_NO_MEIDIA,                 // 12, 找不到媒体
	EPPS_MULTI_INSTANCE,            // 13, 请确定是否有另一个实例正在播放此文件
	EPPS_PREPARE_MEDIA_INFO,        // 14, 正在准备媒体信息
	EPPS_GETTING_MEDIA_INFO,        // 15, 正在获取媒体信息
	EPPS_GETTING_INDEX_INFO,        // 16, 正在获取媒体索引信息
	EPPS_PLAYING,                   // 17, 正在播放
	EPPS_BUFFERING,                 // 18, 正在缓冲数据
	EPPS_CONNECTING,                // 19, 正在连入网络
	EPPS_MEDIA_READY,               // 20, 准备媒体就绪
	EPPS_PARSING_SERVER,            // 21, 正在解析服务器域名..
	EPPS_GET_MEDIA_INFO,            // 22, 已成功获取到媒体信息.
	EPPS_BUFFERED,                  // 23, 数据缓冲完毕.
	EPPS_PREPARE_MEDIA,             // 24, 准备媒体
	EPPS_STORAGE_ERROR,             // 25. 访问存储器失败
	EPPS_QUIT,                      // 26. 程序退出

	EPPS_DATA_TIMEOUT,              // 27, 等待数据超时

	EPPS_UPDATING,                  // 28, 正在升级
	EPPS_UPDATE_FAILED,             // 29, 升级失败
	EPPS_UPDATE_OK,                 // 30, 升级成功
}pps_event_id;

typedef struct pps_event
{
	pps_event_id id;
	unsigned int wparam;
	unsigned int lparam;
	char         extra[PPS_EXTRA_MSG_LEN];
}pps_event;

#ifdef __cplusplus
extern "C" {
#endif

typedef int (*pps_callback)(int index, pps_event event); 

#ifdef __cplusplus
}
#endif


typedef struct ppsvod_iteminfo
{
	int          index;
	char         hash_id[HASH_VALUE_LENGTH];        // task hash id
	char        *file_name;                         // save name
	unsigned int file_size;                         // total file size
	int          progress;                          // download percent 
	int          down_speed;                        // download speed (byte/s)
	int          up_speed;                          // upload speed (byte/s)
	int          peer_count;                        // peer count has connected
	int          status;                            // has the task been started?
}ppsvod_iteminfo;

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Description: ppsvod initialization, must be called before all.
 * param:       Datatype               Param name      In/Out     Comment
 *              const char *           oem_name        in
 *              const char *           terminal_type   in
 *              const char *           device_id       in
 *              pps_callback           pcallback       in         callback function pointer
 * return:      int    return 0 if success; -1 if failed.
 */
int ppsvod_create(const char *oem_name, 
                const char * terminal_type, 
                const char *device_id, 
                pps_callback pcallback);

/*
 * Description: uninitialize ppsvod, call this fuction when you want to exit ppsvod.
 * param:       Datatype     Param name      In/Out     Comment
 *              void
 * return:      int    return 0 if success; -1 if failed
 */
int ppsvod_destroy(void);

/*
 * Description: Add an item into ppsvod internal list.
 * param:       Datatype     Param name      In/Out     Comment
 *              char *       url             In         url to add
 *              int          vip_flag        In         flag for vip items
 * return:      int    return a file descriptor if success; -1 if failed.
 */
int ppsvod_add_item(char *url, int vip_flag);

/*
 * Description: Remove an item from ppsvod internal list.
 * param:       Datatype     Param name      In/Out     Comment
 *              int          fd              In         file descriptor
 * return:      int    return 0 if success; -1 if failed.
 */
int ppsvod_remove_item(int fd);

/*
 * Description: start to play a file.
 * param:       Datatype     Param name      In/Out     Comment
 *              int          fd              In         file descriptor
 *              const char*  validcode       In         
 * return:      int    return 0 if success; -1 if failed.
 */
int  ppsvod_play_item(int fd, const char * validcode);

/*
 * Description: stop the playing url.
 * param:       Datatype     Param name      In/Out     Comment
 *              int          fd              In         file descriptor
 * return:      int    return 0 if success; -1 if failed; -3 means validcode error.
 */
int ppsvod_stop_item(int fd);

/*
 * Description: read data.
 * param:       Datatype     Param name      In/Out     Comment
 *              int            fd              In       file descriptor
 *              char *         buffer          Out      buffer to store data
 *              unsigned int   length          In       data length
 *              unsigned int   position        In       from where to read.
 *              struct timeval* wait_time      In       time length that read() can block
 * return:      int    return length of data if success; -1 if failed(errno
 *                     is set to EAGAIN if data is temporarily unavailable; etherwise,
 *                     some error happens or EOF reaches). 
 */
int ppsvod_read(int fd, char *buffer, unsigned int length, unsigned int position, struct      timeval *wait_time);

/*
 * Description: Drop read operation
 * param:       Datatype     Param name      In/Out     Comment
 *              int            fd              In       file descriptor
 */
void ppsvod_drop_read(int fd);

/*
 * Description: seeking within a playing url.
 * param:       Datatype     Param name      In/Out     Comment
 *              int           fd              In        file descriptor
 *              unsigned int  position        In        seeking destination
 * return:      int    return 0 if success; -1 if failed.
 */
int  ppsvod_seek(int fd, unsigned int position);

/*
 * Description: get total file length
 * param:       Datatype     Param name      In/Out     Comment
 *              int          fd              In         file descriptor
 * return:      int    return file length if success; -1 if failed.
 */
int  ppsvod_get_file_length(int fd);

/*
 * Description: validate url.
 * param:       Datatype     Param name      In/Out     Comment
 *              const char*    url            In        url to check 
 * return:      int    return 0 if success; -1 if failed.
 */
int  ppsvod_check_url(const char* url);

/*
 * Description: Get information for a playing file.
 * param:       Datatype     Param name      In/Out     Comment
 *              int          fd              In         file descriptor
 * return:      ppsvod_iteminfo*   return a pointer to ppsvod_iteminfo if success; 
 *                                 NULL if failed.
 */
ppsvod_iteminfo *ppsvod_get_item_info(int fd);

/*
 * Description: Free memory of a ppsvod_iteminfo* pointer
 * param:       Datatype         Param name      In/Out     Comment
 *              ppsvod_iteminfo* piteminfo       In         pointer returned by ppsvod_get_item_info
 * return:      void
 */
void ppsvod_free_item_info(ppsvod_iteminfo *piteminfo);

/*
 * APIs for playlist operation
 */

/* 
 * Define download, unzip and parse vodlist file status.
 * vodlist status use highest 4 bits to express stage, use 
 * lowest 8 bits to express every stage process 
 */
#define VODLIST_IDLE            0x0
#define VODLIST_DOWNLOADING     0x10000000
#define VODLIST_UNCOMPRESSING   0x20000000
#define VODLIST_PARSING         0x40000000
#define VODLIST_UPDATE_SUCCESS  0x80000000
#define VODLIST_UPDATE_FAIL     0xff000000

typedef struct __ppscategory
{
	int    id;                       /* category or subcategory id */
	char  *name;                     /* category or subcategory num */
	int    type;                     /* subcategory type. 0: movie, 1: teleplay */
	int    subcatnum;                /* subcategory number under this category */
	struct __ppscategory *psubcat;   /* subcategory array */

	struct __ppscategory *next;
}ppscategory;


typedef	struct __ppsitem
{
	int    id;                       /* Item id */
	int    index;                    /* Item index */
	int    size;                     /* Item size (MB) */
	int    duration;                 /* Item duration (Minute)*/
	char  *format;                   /* file format (rm/rmvb/wmv) */
	int    bitrate;                  /* bitrate */
	char  *ppsurl;                   /* pps vod url */
	int    vipflag;                  /* vip flags */
	struct __ppsitem *next;
}ppsitem;

typedef struct __ppschannel
{
	char *name;                     /* channel name */
	char *director;
	char *actor;
	char *area;
	int   size;                     /* all items' total size under this channel (MB) */
	char *pubtime;                  /* publish time */
	int   duration;                 /* all items' total duration time under this channel (Min) */
	char *lang;                     /* channel language */
	char *desc;                     /* channel description */
	char *BImgUrl;                  /* Big Image Url */
	char *SImgUrl;                  /* Small Image Url */
	int   itemnum;                  /* num of items */
	struct __ppsitem *pitems;       /* point to items list */
	
	struct __ppschannel *next;
}ppschannel;


/*
 *  description: vod list initialization, must be called before all.
 *  param:       datatype     param name      in/out     comment
 *               void
 *  return:      int    return 0 if success; -1 if failed.
*/
int pps_vodlist_init(void);

/*
 *  description: vod list uninitialize, call this fuction when you want to exit pps vodlist.
 *  param:       datatype     param name      in/out     comment
 *               void
 *  return:      int    return 0 if success; -1 if failed.
*/
int pps_vodlist_uninit(void);

/*
 *  description: get all categories and sub categories list.
 *  param:       datatype     param name      in/out     comment
 *               void
 *  return:      ppscategory* pointer of all categories, null if failed.
*/
ppscategory *pps_vodlist_getcat(int *catnum);

/*
 *  description: get channels under pointed catogory and sub category.
 *  param:       datatype     param name      in/out     comment
 *               int          catid           in         class id
 *               int          subcatid        in         sub class id
 *               int          page_size       in         channels one page have
 *               int          page_num        in         page num which want to query
 *  return:      ppschannel pointer of channels, null if failed.
*/
ppschannel *pps_vodlist_getchannel(int catid, int subcatid, int page_size, int page_num);

/*
 * Description: configure directory for store cache, config, data and logs.
 * param:       Datatype     Param name      In/Out     Comment
 *              const char*  root_path       In         root path used to store
 * return:      int          return 0 if success, -1 if failed.
 * comment:     
 */
int ppsvod_save_config_dir(const char * root_path);

/*
 * Description: load configure directory for store cache, config, data and logs.
 * param:       Datatype     Param name      In/Out     Comment
 *              void
 * return:      char*        return root path if success, NULL if failed.
 * comment:     
 */
char *ppsvod_get_config_dir(void);

/*
 * Description: load default configure directory for store cache, config, data and logs.
 * param:       Datatype     Param name      In/Out     Comment
 *              void
 * return:      int          return 0 if success, -1 if failed.
 * comment:     
 */
int ppsvod_default_config_dir(void);

/*
 * Description: Deposit money for PPS VIP account
 * param:       Datatype     Param name      In/Out     Comment
 *              const char*  password        In         17 numbers sold by pps
 * return:      int          return 0 if success, -1 if failed.
 * comment:     
 */
int ppsvod_charge(const char* password);

/*
 * Description: Get account type of current user
 * param:       Datatype     Param name      In/Out     Comment
 *              void
 * return:      int          return -1 if failed;
 *                           return 0: Non-VIP user
 *                           return 1: Payment VIP
 * comment:     
 */
int ppsvod_get_account_type(void);

/*
 * Description: Get expire time of vip qualification
 * param:       Datatype     Param name      In/Out     Comment
 *              char*        time            Out        memory allocated by caller
 * return:      int          -1: failed
 *                            0: OK
 */
int ppsvod_get_vip_expire_time(char *time);


/*
 * Description: Get time from network
 * param:       Datatype     Param name      In/Out     Comment
 *              struct timeval  tv           Out        time since 1970
 * return:      int          return 0 if success, -1 if failed.
 * comment:     
 */
int ppsvod_get_time(struct timeval *tv);

#ifdef __cplusplus
}
#endif
#endif	// __PPS_H__