Today I analyse the .tsx file’s generation logical. Here is my founding:
1. In MPEG2TransportStreamIndexFile.hh #define INDEX_RECORD_SIZE 11 2. In MPEG2TransportStreamIndexFile.cpp 238 Boolean MPEG2TransportStreamIndexFile::seekToIndexRecord(unsigned long indexRecordNumber) { 239 if (!openFid()) return False; 240 241 if (indexRecordNumber == fCurrentIndexRecordNum) return True; // we're already there 242 243 if (SeekFile64(fFid, (int64_t)(indexRecordNumber*INDEX_RECORD_SIZE), SEEK_SET) != 0) return False; 244 fCurrentIndexRecordNum = indexRecordNumber; 245 return True; 246 } Which we can got conclusion, the .tsx’s item is 11 bytes long. 3. Still In MPEG2TransportStreamIndexFile.cpp float MPEG2TransportStreamIndexFile::pcrFromBuf() { unsigned pcr_int = (fBuf[5]<<16) | (fBuf[4]<<8) | fBuf[3]; u_int8_t pcr_frac = fBuf[6]; return pcr_int + pcr_frac/256.0f; } //Conclusion A : item[3-6] is a time-anchor. unsigned long MPEG2TransportStreamIndexFile::tsPacketNumFromBuf() { return (fBuf[10]<<24) | (fBuf[9]<<16) | (fBuf[8]<<8) | fBuf[7]; } //Conclusion B: item[7-10] is .tsx file’s item index. Boolean MPEG2TransportStreamIndexFile::seekToIndexRecord(unsigned long indexRecordNumber) { if (!openFid()) return False; if (indexRecordNumber == fCurrentIndexRecordNum) return True; // we're already there if (SeekFile64(fFid, (int64_t)(indexRecordNumber*INDEX_RECORD_SIZE), SEEK_SET) != 0) return False; fCurrentIndexRecordNum = indexRecordNumber; return True; } //Conclusion C: item[0~7] is record the frame position in .ts file. It seems like Conclussion A, B, C can not be all right. Especially Conclusion B and C could not be both right. And, I have make a experiment, the trick play can not work property (through vlc media player). Wait for your opionion, thanks a lot. Fengxh, China
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel