【转】用Live555中的openRTSP保存H264

简介

这两天抽空整理书签,发现有一篇以前做监控时踩坑的文章,转过来留档。

声明

本文转载自用Live555 中的openRTSP 保存H264
想看原文请自行跳转

以下为原文(修复了一些笔误并稍稍美化)

Live555中的openRTSP保存H264文件很简单

但是发现保存的H264文件并不能直接被VLC播放

同一个RTSP源 用VLC保存的H264文件就可以直接被播放

经过研究 发现是openRTSP没有把SDP中已经包括的SPS &PPS数据保存到文件中

VLC保存的H264文件的前2个00 00 00 01数据

也就是SPS &PPS复制到openRTSP保存的文件最前头就可以播放了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   } else if (strcmp(subsession->mediumName(), "video") == 0 &&
(strcmp(subsession->codecName(), "H264") == 0)) {
// For H.264 video stream, we use a special sink that insert start_codes:
unsigned int num=0;
SPropRecord * sps=parseSPropParameterSets(subsession->fmtp_spropparametersets(),num);
fileSink = H264VideoFileSink::createNew(*env, outFileName,
fileSinkBufferSize, oneFilePerFrame);
struct timeval tv={0,0};
unsigned char start_code[4] = {0x00, 0x00, 0x00, 0x01};
fileSink-> addData(start_code, 4, tv);
fileSink->addData(sps[0].sPropBytes,sps[0].sPropLength,tv);
fileSink-> addData(start_code, 4, tv);
fileSink->addData(sps[1].sPropBytes,sps[1].sPropLength,tv);
delete[] sps;
} else {
您的支持将鼓励我继续创作!