gpac代码剖析工作

考察VC下的workspace:
Project libgpac: 生成静态库libgpac_static.lib
Project libgpac_dll: 生成动态库libgpac.dll
 以上两者同样的source/header文件。输出的库文件供其它工程使用。

  Project Rtp_in也使用了上面的库,但是目前还没有找到哪个project使用rtp_in输出的库。经文本搜索,

除了rtp_in.dll和rtp_in.def,仅在osmo4.inf中找到包含“rtp_in.dll”字样。
  发现libgpac导出的库被多个项目使用。
  是否projct rtp_in是最终使用的项目,有待考察。
  重点阅读rtp_in的代码,位于gpac/modules/rtp_in/目录下:
   rtp_in.c
   rtp_in.def
   rtp_in.h
   rtp_payloads.c
   rtp_session.c
   rtp_signaling.c
   rtp_stream.c
   sdp_fetch.c
   sdp_load.c
  亦须重点阅读project libgpac下的代码,位于gpac/src/ietf/下:
   rtcp.c
   rtp.c
   rtp_packetizer.c
   rtp_pck_3gpp.c
   rtp_pck_mpeg12.c
   rtp_pck_mpeg4.c
   rtsp_command.c
   rtsp_common.c
   rtsp_response.c
   rtsp_session.c
   sdp.c
  以及gpac/include/gpac/internal/ietf_dev.h

GPAC是一个多媒体框架,它提供了一套用于处理多媒体数据的库函数。要往MP4文件中插入SEI帧,可以使用GPAC中的MP4Box工具或者使用GPAC库函数来实现。 以下是使用GPAC库函数往MP4文件中插入SEI帧的步骤: 1. 打开MP4文件 使用GPAC库函数中的MP4Read函数打开需要插入SEI帧的MP4文件,并创建一个MP4文件句柄。 ```C++ MP4FileHandle mp4 = MP4Read("test.mp4"); ``` 2. 获取视频轨道句柄 使用MP4GetTrackHandler函数获取视频轨道的句柄。 ```C++ MP4TrackId videoTrack = MP4FindTrackId(mp4, 0, MP4_VIDEO_TRACK_TYPE); MP4TrackHandle videoTrackHandle = MP4GetTrackHandler(mp4, videoTrack); ``` 3. 创建SEI帧数据 SEI帧是一种附加数据,用于传递一些额外的信息,如时间戳、场景描述等。需要根据SEI帧的格式,创建一个包含SEI帧数据的缓冲区。 ```C++ uint8_t seiData[] = {0x00, 0x00, 0x00, 0x01, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01}; uint32_t seiDataSize = sizeof(seiData); ``` 4. 插入SEI帧数据 使用MP4AddSEI函数将SEI帧数据插入到视频轨道的每个帧中。 ```C++ MP4Duration videoDuration = MP4GetTrackDuration(mp4, videoTrack); MP4Duration videoTimeScale = MP4GetTrackTimeScale(mp4, videoTrack); MP4Timestamp videoTimestamp = 0; for (MP4Duration i = 0; i < videoDuration; i += videoTimeScale / 30) { MP4AddSEI(mp4, videoTrackHandle, seiData, seiDataSize, videoTimestamp); videoTimestamp += videoTimeScale / 30; } ``` 5. 保存MP4文件 使用MP4Write函数将修改后的MP4文件保存到磁盘上。 ```C++ MP4Write(mp4); ``` 6. 关闭MP4文件 使用MP4Close函数关闭MP4文件句柄。 ```C++ MP4Close(mp4); ``` 通过以上步骤,就可以往MP4文件中插入SEI帧数据。需要注意的是,SEI帧的格式需要符合MP4标准,否则可能会导致视频播放出现问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值