http live streaming ,m3u8 文件有没有开源的解析代码?
近日需要用到这个功能,但是m3u8 是 m3u 的扩展,有EXT-X-STREAM-INF 这个字段,
是另一个 m3u8文件的地址,也就是说编程的话要递归进去。
需要用 C 语言完成这个功能,我看到这个是 java 实现的。
我查找 vlc 的代码里面只有解析 标准 m3u 文件的代码
只有 对 #EXTINF 进行了处理。
//Open and parse a M3U file:int M3U_open(char *fileName){ FILE *f; char lineText[512]; char chrLength[20]; char title[264]; struct M3U_songEntry *singleEntry; int playListCount = lPlayList.songCount; f = fopen(fileName, "rt"); if (f == NULL){ //Error opening file: return(-1); } while(fgets(lineText, 256, f) != NULL){ if (!strncmp(lineText, "#EXTINF:", 8)){ //Length and title: splitSongInfo(lineText, chrLength, title); }else if (!strncmp(lineText, "#EXTM3U", 7)){ //Nothing to do. :) }else if (strlen(lineText) > 2){ //Store song info: singleEntry = &lPlayList.songs[playListCount++]; strncpy(singleEntry->fileName, lineText, 263); singleEntry->fileName[263] = '\0'; if ((int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 10 || (int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 13 ){ singleEntry->fileName[strlen(singleEntry->fileName) - 1] = '\0'; } if ((int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 10 || (int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 13 ){ singleEntry->fileName[strlen(singleEntry->fileName) - 1] = '\0'; } if (strlen(title)){ strncpy(singleEntry->title, title, 263); }else{ getFileName(singleEntry->fileName, singleEntry->title); } singleEntry->title[263] = '\0'; singleEntry->length = atoi(chrLength); if (playListCount == MAX_SONGS){ break; } } } fclose(f); lPlayList.modified = 0; lPlayList.songCount = playListCount; strcpy(lPlayList.fileName, fileName); return(0);}