如何使用视频编辑 SDK 编辑碎片 MP4 HLS 流 (M3U8)
By Olga Krovyakova - modified October 2, 2023, created April 1, 2019
在新发布的 4.2 版本中,Solveig Multimedia 的视频编辑 SDK 扩展了支持的格式.
当前版本通常侧重于基于在线的流格式.
视频编辑 SDK v.4.2 支持以下格式:
- 碎片 MP4 HLS 流
- HTTP 托管 MP4 文件
- YouTube 在线视频
在本文中,您将找到分段 MP4 HLS 流支持的演示.
分段 MP4 HLS 流支持
视频编辑 SDK v.4.2 支持碎片 MP4 HLS 流的以下功能:
回放.
您可以轻松打开碎片 MP4 HLS M3U8 流并像使用本地文件一样使用它。 您可以浏览文件并播放它。 仅预览流所需的部分会下载到您的 PC.
要预览碎片 MP4 HLS 流,您可以构建以下图表:
该图包含作为源过滤器的 SolveigMM HLS Source 和作为视频解码器过滤器的 Elecard AVC Video Decoder。 这两个过滤器都随 SDK 一起提供.
使用 SMM Trim C++ 示例应用程序来测试对碎片 MP4 HLS 流播放和修剪的支持.
以下视频演示了通过视频编辑 SDK v.4.2 可以对碎片 MP4 HLS 流执行哪些操作:
编辑.
视频编辑 SDK 现在能够修剪碎片 MP4 HLS 流。 视频编辑引擎是负责的主要组件。 您需要做的是配置视频编辑引擎,指定 XTL,描述您当前的任务,然后运行它并等待完成.
视频编辑引擎是一个 COM 组件,公开 ITrimmerObjControl,您可以按如下方式创建它:
hr = ::CoCreateInstance( CLSID_TrimmerObjControl, NULL, CLSCTX_INPROC, IID_ITrimmerObjControl, (void**)&m_pITrimmerObjControl ); |
要配置编辑引擎,您应该使用 IModuleConfig 界面:
hr = m_pITrimmerObjControl->QueryInterface(IID_IModuleConfig, (void **)&m_pModuleCfgEditObj); |
您必须使用获取的接口来设置包含您的修剪任务的 XTL 字符串,并可选择指定回调来跟踪操作进度:
变量 var1 = {0}, var2 = {0}; var1.vt = VT_BSTR; var1.bstrVal = ...; //XTL格式的任务字符串 hr = m_pModuleCfgEditObj->SetValue( &SMAT_XTLString, &var1 ); var2.vt = VT_BYREF|VT_UI1; var2.pbVal = (BYTE*) &m_xCTrimmerObjControlCB; //指向回调类的指针 hr = m_pModuleCfgEditObj->SetValue( &SMAT_Callback, &var2 ); 变量 var_res = {0}; hr = m_pModuleCfgEditObj->CommitChanges(&var_res); |
您可以通过调用 ITrimmerObjControl::Start() 方法来启动修剪过程:
hr = m_pITrimmerObjControl->开始(); |
在修剪过程中,您可以向编辑引擎询问进度值:
变量 var = {0}; hr = m_pModuleCfgEditObj->GetValue( &SMAT_Progress, &var ); |
处理完成后,编辑引擎从回调中调用 ITrimmerObjControlCB::OnStop() .
下面您可以看到 XTL sting 示例,其中包含修剪任务:
<时间线版本=“2”"> |
此 XTL 中的源文件是 Fragmented MP4 HLS 文件,托管在 http://smarteditingonline.solveigmm.com上。 两个间隔(由“clip”标签表示)将从源文件保存到输出文件:
- 160413589 - 229542097 单位(或 16.041 - 22.954 秒)和
- 469719350 - 572525849 单位(或 46.971 - 57.252 秒)
如果源文件包含多个流(例如,对于不同的比特率值),将重新创建源结构.
测试文件http://smarteditingonline.solveigmm.com/files/test_multibitrate.m3u8包含2个具有不同比特率值的不同流(见下图).
修剪后,输出文件夹 (C:\hls) 将包含 2 个子文件夹,其中包含流和包含流配置描述的 M3U8 播放列表文件 (output.m3u8)。 下图是修剪后的HLS的结构:
输出M3U8文件的结构:
#EXTM3U #EXT-X-STREAM-INF:平均带宽=1007161,带宽=1275068,视频范围=SDR,CODECS=“mp4a.40.2,avc1.42c01f”,分辨率=1280x720,帧速率=24.000,隐藏式字幕 =无 500K/prog_index.m3u8 #EXT-X-STREAM-INF:平均带宽 = 1564155,带宽 = 2042932,视频范围 = SDR,CODECS =“mp4a.40.2,avc1.42c01f”,分辨率 = 1280x720,帧速率 = 24.000,隐藏字幕 =无 1000K/prog_index.m3u8 |
可以通过以下链接找到修剪后的文件:
http://smarteditingonline.solveigmm.com/sdkdemo/hls/output.m3u8
有关如何配置和运行视频编辑引擎以执行修剪操作的详细说明,请参阅 SMM Trim C++ 示例应用程序源代码.
经常问的问题
什么是分段 MP4 HLS 流 (M3U8)?
那么,为什么MP4文件一定要分片呢? 如果要使用 HEVC/H.265 或 AVC/H.264,则必须根据 Apple HLS 创作规范中的视频编码标准来使用。 碎片 MP4 文件还与 MPEG-DASH(HLS 的替代方案)兼容,因此您可以使用相同的文件; 唯一的区别是清单文件(播放列表)。 这会减少编码和存储需求,从而节省开支.
我可以使用传统视频编辑软件编辑碎片化的 MP4 HLS 流吗?
总之,使用传统视频编辑软件编辑分段的 MP4 HLS 流通常需要在编辑之前将片段转换为完整的视频文件。 此过程简化了兼容性,但可能会导致某些特定于 HLS 的功能丢失.
除了修剪之外,是否还有其他可用于分段 HLS MP4 流的编辑功能?
- 回放。 分段 MP4 HLS M3U8 流与本地文件一样易于访问和使用。 该文件可以回放和浏览。 您的计算机将仅下载播放预览所需的流部分.
- 编辑。 可以使用视频编辑软件开发套件来编辑碎片 MP4 HLS 流。 该系统的核心是视频编辑引擎。 设置视频编辑引擎并提供描述当前任务的 XTL 后,您可以启动程序并等待其完成.
有关如何设置和运行用于修剪的视频编辑引擎的信息,请参阅 SMM Trim C++ 示例应用程序源代码.
SDK 支持哪些平台?
对于处理分段 MP4 HLS 流中的字幕或副标题,是否有任何具体准则?
我可以通过分段 MP4 HLS 流获利或插入广告吗?
Olga Krovyakova is the Technical Support Manager in Solveig Multimedia since 2010.
She is the author of many text and video guidelines of company's products: Video Splitter, HyperCam, WMP Trimmer Plugin, AVI Trimmer+ and TriMP4.
She works with programs every day and therefore knows very well how they work. Сontact Olga via support@solveigmm.com if you have any questions. She will gladly assist you!