PHP4用户手册:函数->fseek

博客介绍了PHP中fseek函数,该函数用于为文件引用fp设置文件指示器,新位置由offset指定,或从whence指定位置开始,whence默认值为SEEK_SET。成功返回0,否则返回 -1。同时指出特定格式fopen返回的指针不可用此函数,且whence参数有版本要求。

fseek

(PHP 3, PHP 4 >= 4.0.0)

fseek -- 定位一个文件的指针

描述

int fseek (int fp, int offset [, int whence])

为这个文件的引用fp设置文件指示器。这个新的位置,是从文件开始以字节为标准由offset指定的,或由 whence指定的位置开始。 whence的值见下:

SEEK_SET - 从文件开始;
SEEK_CUR - 从当前位置;
SEEK_END - 从文件结尾开始。

如果whence 没有指定,默认为 SEEK_SET。

成功,返回0;否则,返回-1。注意定位到结束符 EOF 不是一个错误。

如果使用"http://" or "ftp://"格式的fopen() 返回的指针不可以使用本函数。

注意: whence 参数必须在PHP 4.0 RC1以上的版本中使用。

参见 ftell()rewind().


// 替换 avdm_get_next_block int get_local_video_block(GOPReader *reader, avdm_block_t *block) { // 清空旧数据 // if (reader->gop_buffer) // { // free(reader->gop_buffer); // reader->gop_buffer = NULL; // reader->gop_buffer_size = 0; // STM_INFO("clean old data?"); // } uint8_t nal[1024 * 1024]; // 1MB NAL buffer int nal_size; int found_i = 0; while (read_nal_unit(reader->fp, nal, sizeof(nal), &nal_size)) { if (is_i_frame(nal, nal_size)) { if (found_i) { // 第二个I帧表示上一个GOP结束,回退文件指针 fseek(reader->fp, -nal_size, SEEK_CUR); break; } found_i = 1; // block->unique_info.video.iframe_type = 5; // IDR帧 STM_INFO("is_i_frame(), nal_size=%d", nal_size); } // 扩展缓冲区 reader->gop_buffer = realloc(reader->gop_buffer, reader->gop_buffer_size + nal_size); memcpy(reader->gop_buffer + reader->gop_buffer_size, nal, nal_size); reader->gop_buffer_size += nal_size; } if (!found_i && reader->gop_buffer_size == 0) { return -1; // 没有读取到有效数据 } // 获取文件大小 fseek(fp, 0, SEEK_END); long file_len = ftell(fp); rewind(fp); // 分配内存 block->addr = (U8 *)malloc(file_len); if (!block->addr) { fclose(fp); return -1; } size_t read_len = fread(block->addr, 1, file_len, fp); fclose(fp); if (read_len != file_len) { free(block->addr); return -1; } // 填充 avdm_block_t 字段 block->addr = reader->gop_buffer; block->len = reader->gop_buffer_size; block->start_time = reader->last_pts; // 简单模拟:假设每帧间隔为 3600 ticks(90kHz 时钟) block->unitCnt = 1; // 可以根据实际帧数动态计算 reader->last_pts += 3600 * block->unitCnt; block->end_time = reader->last_pts; return 0; }怎么改
最新发布
09-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值