码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 流媒体分析之srt协议ffmpeg 实现


    srt  音视频数据是基于mpegts 封装的,ffmpeg 数据流程

    1. mpegts    封装格式会后面系列文章中讲叙,在ffmpeg 中的封装实现接口如下:mpegtsenc.c

    1. AVOutputFormat ff_mpegts_muxer = {
    2. .name = "mpegts",
    3. .long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
    4. .mime_type = "video/MP2T",
    5. .extensions = "ts,m2t,m2ts,mts",
    6. .priv_data_size = sizeof(MpegTSWrite),
    7. .audio_codec = AV_CODEC_ID_MP2,
    8. .video_codec = AV_CODEC_ID_MPEG2VIDEO,
    9. .init = mpegts_init,
    10. .write_packet = mpegts_write_packet,
    11. .write_trailer = mpegts_write_end,
    12. .deinit = mpegts_deinit,
    13. .check_bitstream = mpegts_check_bitstream,
    14. .flags = AVFMT_ALLOW_FLUSH | AVFMT_VARIABLE_FPS | AVFMT_NODIMENSIONS,
    15. .priv_class = &mpegts_muxer_class,
    16. };

    解封封装:FFmpeg-n4.3.3/libavformat/mpegts.c

    1. AVInputFormat ff_mpegts_demuxer = {
    2. .name = "mpegts",
    3. .long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
    4. .priv_data_size = sizeof(MpegTSContext),
    5. .read_probe = mpegts_probe,
    6. .read_header = mpegts_read_header,
    7. .read_packet = mpegts_read_packet,
    8. .read_close = mpegts_read_close,
    9. .read_timestamp = mpegts_get_dts,
    10. .flags = AVFMT_SHOW_IDS | AVFMT_TS_DISCONT,
    11. .priv_class = &mpegts_class,
    12. };

     

    srt  协议实现: ffmpeg 主要调用libsrt 实现srt  与服务器交互并实现音视频封及网络发送:

    后面系列文章对srt 分析:

    1. const URLProtocol ff_libsrt_protocol = {
    2. .name = "srt",
    3. .url_open = libsrt_open,
    4. .url_read = libsrt_read,
    5. .url_write = libsrt_write,
    6. .url_close = libsrt_close,
    7. .url_get_file_handle = libsrt_get_file_handle,
    8. .priv_data_size = sizeof(SRTContext),
    9. .flags = URL_PROTOCOL_FLAG_NETWORK,
    10. .priv_data_class = &libsrt_class,
    11. };

  • 相关阅读:
    【C++】初识Cplusplus
    web资产识别
    2022/11/24 [指针] 通过指针引用字符串
    【Gradle自动化构建编程框架】一、介绍
    WebService SOAP1.1 SOAP1.12 HTTP PSOT方式调用
    核心交换机、汇聚层交换机、接入层交换机的区别和特点
    企业网络安全:威胁检测和响应 (TDR)
    java计算机毕业设计学生课堂互动教学系统源码+mysql数据库+lw文档+系统+调试部署
    C专家编程 第6章 运行的诗章:运行时数据结构 6.4 C语言运行时系统在a.out里都干了些什么
    数据结构与算法:排序算法(1)
  • 原文地址:https://blog.csdn.net/u012794472/article/details/126778791
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号