MPEG2TransportStreamIndexer

MPEG2TransportStreamIndexer主要实现了对视频数据流化,要想实现对视频的点播,要同时具备.ts.tsx文件,MPEG2TransportStreamIndexer示例代码可以完成这个过程。

其中用到的类的继承关系如下:

ts流化需要四个主要的步骤,分别为:

  1. 打开要流化的视频文件
  2. 根据打开的文件创建index
  3. 打开流化之后文件的输出
  4. 开始每取一帧视频数据转换为流之后输出到输出文件中,重复直到文件结束

具体实现如下:

//
// Created by andrew on 2021/6/17.
//
#include <iostream>
#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
#include <cstring>void afterPlaying(void* /*clientData*/) {std::cout << "done" << std::endl;exit(0);
}class MPEG2TransportStreamIndex {
public:MPEG2TransportStreamIndex() = default;~MPEG2TransportStreamIndex() = default;int32_t Init(const char* pProgramName, const char* pSzInputFilename, size_t filenameLen) {// 设置用户环境变量if (filenameLen < 4 || strcmp(&pSzInputFilename[filenameLen - 3], ".ts") != 0) {*m_pEnv << "ERROR : input file name " << pSzInputFilename;return -1;}TaskScheduler* pScheduler = BasicTaskScheduler::createNew();m_pEnv = BasicUsageEnvironment::createNew(*pScheduler);m_pProgramName = pProgramName;m_pInputFilename = pSzInputFilename;m_fileNameLen = filenameLen;return 0;}int32_t OpenInputFile() {m_pInput = ByteStreamFileSource::createNew(*m_pEnv, m_pInputFilename, TRANSPORT_PACKET_SIZE);if (nullptr == m_pInput) {*m_pEnv << "open input file failed .";return -1;}return 0;}int32_t CreatTransportStreamFilter() {m_pIndexer = MPEG2IFrameIndexFromTransportStream::createNew(*m_pEnv, m_pInput);if (nullptr == m_pIndexer) {return -1;}return 0;}int32_t OpenOutputFile() {char *pSzOutputFilename = new char[m_fileNameLen + 2];sprintf(pSzOutputFilename, "%sx", m_pInputFilename);m_pOutput = FileSink::createNew(*m_pEnv, pSzOutputFilename);if (nullptr == m_pOutput) {return -1;}return 0;}void StartPlaying() {*m_pEnv << "Start Writing index file " ;// 将fSource传递给 outputm_pOutput->startPlaying(*m_pIndexer, afterPlaying, nullptr);m_pEnv->taskScheduler().doEventLoop();}private:UsageEnvironment *m_pEnv{};const char *m_pProgramName{};// 输入文件名和文件长度const char *m_pInputFilename{};int m_fileNameLen{};FramedSource* m_pInput{};FramedSource * m_pIndexer{};MediaSink* m_pOutput{};
};int main(int argc, char* argv[]) {if (argc != 2) {std::cout << "argc < 2" << std::endl;return -1;}// 定义一个Mpeg解析类MPEG2TransportStreamIndex mpeg2TransportStreamIndex;int32_t ret = mpeg2TransportStreamIndex.Init(argv[0], argv[1], strlen(argv[1]));if (0 != ret) {std::cerr << "mpeg2TransportStreamIndex.Init failed." << std::endl;return ret;}//    打开输入文件ret = mpeg2TransportStreamIndex.OpenInputFile();if (0 != ret) {std::cerr << "mpeg2TransportStreamIndex.OpenInputFile failed." << std::endl;return ret;}// 创建文件流ret = mpeg2TransportStreamIndex.CreatTransportStreamFilter();if (0 != ret) {std::cerr << "mpeg2TransportStreamIndex.CreatTransportStreamFilter failed." << std::endl;return ret;}// 打开输出文件ret = mpeg2TransportStreamIndex.OpenOutputFile();if (0 != ret) {std::cerr << "mpeg2TransportStreamIndex.OpenOutputFile failed." << std::endl;return ret;}// 开始执行事件循环mpeg2TransportStreamIndex.StartPlaying();return 0;
}

参考:

MPEG2TransportStreamIndexer

live555实现视频格式数据流化处理相关推荐

  1. 音视频方案,音视频扩展内容(RTMP,FFMpeg/H.26*/mpeg*/AVC等标准与协议)(笔记)1,视频格式

    视频方案,雷霄骅的专栏- http://blog.csdn.net/leixiaohua1020  > SI, TI   ITU-R BT.1788建议使用时间信息(TI,Temporal pe ...

  2. linux deepin使用FFmpeg处理视频格式、尺寸、播放速度

    背景 deepin下的视频处理.剪辑软件可选择的比较少,没有Window下常用的PR.AE.格式工厂等,达芬奇由于依赖的问题不是很好安装.我们可以充分利用deepin系统自带的FFmpeg,完成常用的 ...

  3. [转载]流行视频格式讲解

    *. MPEG/.MPG/.DAT MPEG也是Motion Picture Experts Group 的缩写.这类格式包括了 MPEG-1, MPEG-2 和 MPEG-4在内的多种视频格式.MP ...

  4. linux下ts转mp4,ffmpeg安装及实现视频格式的转换、分片(ts m3u8)

    1.简介 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案 2.相关 系统版本:Cent ...

  5. 看懂影片标题,各种电影视频格式标题的含义

    一.资源片源解析 根据命名,可以知道资源的来源,从而判断资源画质的好坏. 1.CAM(枪版)--珍爱生命,远离枪版  CAM通常是用数码摄像机从电影院盗录.有时会使用小三角架,但大多数时候不可能使用, ...

  6. MJPEG+PCM合成AVI视频格式文件

    前段时间将Webcam的MJPEG获得了,也将MJPEG通过硬件解码显示出来了,现在要做的是将MJPEG数据合成视频文件.想到最简单的视频格式就是微软的AVI了,首先我们要对AVI的结构有些认识,下面 ...

  7. FFmpeg 基础库(一)视频格式

    1.1 视频格式 视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类.尽管后者 在播放的稳定性和播放画面质量上可能没有前者优秀,但网络流媒体影像视频的广泛传播性使之 ...

  8. 使用FFmepg进行视频转码、视频格式转换、图片提取等!

    一.什么是FFmpeg? FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常 ...

  9. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

最新文章

  1. HDFS简单介绍及用C语言訪问HDFS接口操作实践
  2. 青蛙跳台阶问题——剑指offer
  3. docker 删除默认连接_Net Core 中 Docker应用
  4. 高斯拟合原理_解读 | 得见的高斯过程
  5. 简单的OPC与C#通讯,别想复杂了
  6. 洛谷P5664:Emiya 家今天的饭(容斥、dp)
  7. java 秒变成时间_使用Quarkus开发Java云原生应用
  8. keeko机器人_机器人零距离,创意搭建编程妙趣多!——瑞云社区开展全国科普日活动...
  9. 关于“Fluent UI”或Ribbon Design报道的补充说明
  10. dev gridcontrol 单选框效果
  11. 加密与解密 linux,security 02: 加密与解密 、 扫描与抓包 、 总结和答疑 、 SELinux安全防护(示例代码)...
  12. 线材下料优化python算法_深度学习中的优化算法(Optimizer)理解与python实现
  13. 宁录哨兵机器人_单纯靠速度快银就打得过哨兵机器人?想多了,怼上这一版就不行!...
  14. 百度一键Root授权管理完美卸载解决方案
  15. L1 和 L2的区别
  16. 计算机开机总要按f1键,华硕主板开机需要按F1键怎么解决?华硕主板开机按f1的解决方法...
  17. 强推Markdown神器,一秒钟拯救微信公众号排版
  18. 云计算的优势和未来发展
  19. matlab文件名批量读取dat文件,matlab批量读取dat
  20. 尚硅谷网课笔记 P361-P370

热门文章

  1. CodeForce 463C Gargari and Bishops(贪心+暴力)
  2. 一些关于bootstrap,bagging,Adaboost,random forest, gradient boost的基本理解
  3. Visual Studio Styles
  4. C# XML的序列化与反序列化
  5. 2019春第四周作业软件
  6. 机器学习——正则化-L2
  7. [转载]非常量引用的初始值必须为左值的问题
  8. 转载:javaweb学习总结(二十三)——jsp自定义标签开发入门
  9. linux rz xshell
  10. 【JulyEdu-Python基础】第 8 课:Python第三方库