一、文件中H.264码流没有sps、pps怎么办?
一般在MP4文件中,sps、pps是单独存放在文件头的AVCC中,文件中的码流是不含sps、pps的。如果用常规的方法使用live555,会导致RTPSink一直无法创建SDP,从而使DESCRIBE命令无法响应客户端。正确的做法是在 ServerMediaSubsession::createNewRTPSink 中使用
createNew(UsageEnvironment& env, Groupsock* RTPgs, unsigned char rtpPayloadFormat,
u_int8_t const* sps, unsigned spsSize, u_int8_t const* pps, unsigned ppsSize);
这种形式的重载,在创建RTPSink的时候就传入sps、pps
解析AVCC的代码可以参考MatroskaFile
::createRTPSinkForTrackNumber
二、读取下一帧时间控制问题
要实现读取完一帧以后,休息一段时间再读取下一帧,有两种方法:一、使用 nextTask() = envir().taskScheduler().scheduleDelayedTask 定时器触发下一次deliverFrame;二、需要休息的时候,在deliverFrame中设置fDurationInMicroseconds,则live555会自动生成定时任务读取下一帧
网友评论