首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    视音频数据处理入门:UDP-RTP协议解析「建议收藏」

    * (2)音频采样数据处理程序。包含PCM音频采样格式处理的函数。 * (3)H.264码分析程序。可以分离并解析NALU。 * (4)AAC码分析程序。可以分离并解析ADTS帧。 * (5)FLV封装格式分析程序。可以将FLV中的MP3音频码分离出来。 * (6)UDP-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。 ffmpeg -re -i sintel.ts -f mpegts udp://127.0.0.1:8880 下面的命令可以推首先经过RTP封装,然后经过UDP封装的MPEG-TS。 (2)音频采样数据处理程序。包含PCM音频采样格式处理的函数。 (3)H.264码分析程序。可以分离并解析NALU。 (4)AAC码分析程序。可以分离并解析ADTS帧。 (5)FLV封装格式分析程序。可以将FLV中的MP3音频码分离出来。 (6)UDP-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。

    1.9K30编辑于 2022-09-13
  • 来自专栏音视频开发技术

    FFmpeg封装格式处理

    概述 1.1 封装格式简介 封装格式(container format)可以看作是编码(音频、视频等)数据的一层外壳,将编码后的数据存储于此封装格式的文件之内。 video DE mpegts MPEG-TS (MPEG-2 Transport Stream) 1.2.2 h264/aac裸封装格式 h264裸封装格式和aac裸封装格式在后面的解复用和复用例程中会用到 h264本来是编码格式,当作封装格式时表示的是H.264裸格式,所谓裸就是不含封装信息也,也就是没穿衣服的。aac等封装格式类似。 mpegts输入封装格式中并未指定文件扩展名,而mpegts输出封装格式中则指定了文件扩展名为"ts,m2t,m2ts,mts"。 可以在FFmpeg工程源码中搜索封装格式名称,如搜索“mpegts”,可以看到其扩展名为“ts,m2t,m2ts,mts”。 2. API介绍 最主要的API有如下几个。

    3.5K20发布于 2019-04-02
  • 来自专栏实战docker

    Golang流媒体实战之七:hls拉服务源码阅读

    ) 推,初始阶段 首先看推处理,关于rtmp推的源码,其实已在 《Golang流媒体实战之五:lal推服务源码阅读》有详细分析,所以这里就不从头说起了,只挑出hls有关代码来看 处理推时,publish = remux.NewRtmp2MpegtsRemuxer(group) 也就是说,推阶段,该对应的group对象,其成员变量rtmp2MpegtsRemuxer是有值的,看名字,这个rtmp2MpegtsRemuxer = nil { group.rtmp2MpegtsRemuxer.FeedRtmpMessage(msg) } 展开上述FeedRtmpMessage方法的堆栈有点深,这里简化一下 rtmp2mpegts.go #FeedRtmpMessage -> rtmp2mpegts_filter_.go#Push -> rtmp2mpegts.go#onPop -> feedVideo (这段代码比较复杂,值得细看) -> onFrame -> muxer.go#OnTsPackets -> FeedMpegts -> fragment.go#WriteFile 上面这复杂的调用栈,重点是rtmp2mpegts_filter

    1.7K20编辑于 2023-04-24
  • 来自专栏实战docker

    Golang流媒体实战之三:转推和录制

    ,录制节点负责录制flv文件,源站作为媒体源,接受外部拉(源站->拉->VLC这个链路已在前文《Golang流媒体实战之二:回源》详细说明) 如果把FFmpeg换成主播,VLC换成观众,是不是有直播内味了 /lal_record/flv/", "enable_mpegts": false, "mpegts_out_path": ". /lal_record/flv/", "enable_mpegts": false, "mpegts_out_path": ". /lal_record/mpegts" }, 将修改后的配置存盘,执行以下命令启动 . /sample.mp4 \ -c copy \ -f flv \ 'rtmp://127.0.0.1:1935/live/test110' 推成功后,先用VLC直接从源站拉试试,如下图,能正常播放,

    1.6K20编辑于 2023-03-27
  • 来自专栏李家的小酒馆

    Java IO(IO)-2

    InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d://deo2. txt")); char[] b = new char[2]; int len = 0; 子类可以直接操作文件,但是不能指定编码格式,默认使用系统默认的格式 FileReader fr = new FileReader("a.txt"); 缓冲 提高输入输出的效率 分为字节缓冲与字符缓冲 创建字节输出缓冲的对象,构造方法中,传递字节输出 BufferedOutputStream bos = new bos.write(bytes); bos.write(bytes, 3, 2)

    1.4K00发布于 2017-12-28
  • 来自专栏机器学习、深度学习

    CNN光计算2

    Optical Flow Estimation with Deep Networks CVPR2017 Code: https://github.com/lmb-freiburg/flownet2 改进主要有三点: 1) 在训练层面,数据库的训练的顺序很重要 the schedule of presenting data during training is very important 2

    1.4K30发布于 2019-05-26
  • 来自专栏后台技术底层理解

    Oozie工作分析

    oozie基本架构 是一个工作调度系统 工作的调度是DAG(有向无环图)-Directed Acyclical Graphs Coordinator job可以通过时间和数据集的可用性触发 集成了Hadoop Coordinator: 协调器,可以理解为工作的协调器,可以将多个工作协调成一个工作流来进行处理。 Bundle: 捆,束。将一堆的coordinator进行汇总处理。 workflow.xml <workflow-app xmlns="uri:oozie:workflow:0.4" name="${sys_name}-MonitorPlus-Task-${task_id}"> 2. 40+0800 end=2017-07-30T14:59+0800 workflowAppUri=${nameNode}/user/cen/${oozieAppsRoot}/cron-schedule 2. 出现失败的情况:Azkaban会丢失所有的工作,但是Oozie可以在继续失败的工作运行。

    1.5K10发布于 2020-08-04
  • 来自专栏原创分享

    nodejs可读源码分析

    我们通过源码去了解一下可读实现的一些逻辑。因为实现的代码比较多,逻辑也比较绕,本文只分析一些主要的逻辑,有兴趣的可以参考文档或者自行深入看源码了解细节。 nodejs只是抽象了的逻辑,具体的操作(比如可读就是读取数据)是由用户自己实现的,因为读取操作是业务相关的。下面我们分析一下可读的操作。 2 用户从可读获取数据 用户可以通过read函数或者监听data事件来从可读中获取数据 Readable.prototype.read = function(n) { n = parseInt( _destroy = function(err, cb) { this.push(null); cb(err); }; 刚才分析push函数时已经看到this.push(null)表示结束了。 总结:本文就分析到这里,的实现代码不算很难,但是非常绕,有兴趣的可以详细看源码,最后分享很久之前画的一个图(链接https://www.processon.com/view/link/5cc7e9e5e4b09eb4ac2e0688

    1.1K30发布于 2020-07-22
  • 来自专栏全栈程序员必看

    使用FFmpeg命令行进行UDP、RTP推(H264、TS),ffplay接收

    命令行是: ffplay -protocol_whitelist "file,udp,rtp" -i test_rtp_h264.sdp 2. 使用UDP发送TS FFmpeg的推命令: ffmpeg -re -i d:\videos\1080P.264 -vcodec copy -f mpegts udp://127.0.0.1:1234 使用RTP发送TS 很多人以为这种情况跟上面差不多,使用如下的推命令(错误): ffmpeg -re -i d:\videos\1080P.264 -vcodec copy -f mpegts rtp /90000 (注意:FFmpeg发送TS的RTP PayloadType不是96而是33) 还有一个问题:早期的ffmpeg版本是不支持rtp_mpegts输出协议的,你可以使用命令ffmpeg - copy -f rtp rtp://<IP>:5005 > test.sdp FFplay接收的SDP文件: SDP: v=2 m=video 5004 RTP/AVP 96 a=rtpmap:96

    6.7K20编辑于 2022-07-02
  • 来自专栏山河木马

    脱离文档分析(转)

    脱离文档,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档的元素不存在而进行定位。 只有绝对定位absolute和浮动float才会脱离文档。   分别分析一下position的几个值 (1)static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。 (2)relative 相对定位。 相对定位是相对于该元素在文档中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档空间。 元素原先在正常文档中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常中生成何种类型的框。 另外要注意:仅使用margin属性布局绝对定位元素的情况 此情况,margin-bottom 和margin-right的值不再对文档中的元素产生影响,因为该元素已经脱离了文档

    1.9K20发布于 2019-03-05
  • 来自专栏python3

    python学习之控制2

    /usr/bin/env python #-*- coding: utf-8 -*- # 控制语句: # if语句通俗说法:“如果条件为真,执行子句中的代码” #if语句包含以下部分: # if关键字 teenager') elif age >= 3: print('qzzhou') #if、elif、else语句结合格式: # if <条件判断1>: # <执行1> # elif <条件判断2> : # <执行2> # elif <条件判断3>: # <执行3> # else: # <执行4> Name = 'qzhou' #当Name中的一个条件为true时就会停止

    72210发布于 2020-01-16
  • 来自专栏厉害了程序员

    Golang 学习笔记-2:控制

    上一篇我们了解了golang 的变量、函数和基本类型,这一篇将介绍一下控制 现在我们看一个复杂点的例子: fibonacci(递归版) package main import "fmt" func fibonacci(9) is: 55 fibonacci(10) is: 89 for i := 0; i <= 10; i++ {} 第7行是一个循环结构 这里for 循环是一个控制 控制 For Go 只有一种循环接口-- for 循环 For 支持三种循环方式,包括类 while 语法 1 基本for循环 支持初始化语句 s := "abc" for i, n := 0, len a : b" 以上是上段代码出现的两个控制,剩下的控制还有 Switch Range Goto, Break, Continue, defer Switch switch 语句用于选择执行,语法如下 // 可以想一下会输出什么 // 代码执行 https://tour.go-zh.org/flowcontrol/13 关键字 defer 允许我们进行一些函数执行完成后的收尾工作,例如: 关闭文件

    57910发布于 2020-12-22
  • 来自专栏SRS开源服务器

    SRS6.0: 七年长跑,全面支持H.265

    第三部分,浏览器H5播放流,MSE支持,但也需要上层播放器库支持: •  原生支持:使用Chrome播放HTTP-TS,需要硬解支持,SRS使用mpegts.js。 •  原生支持:使用Chrome播放HTTP-FLV,需要硬解支持,SRS使用mpegts.js。 •  配置支持:使用Safari拉WebRTC,需要手动点下菜单栏开启。  -vcodec libx265 \  -pes_payload_size 0 -f mpegts 'srt://127.0.0.1:10080? 2. Chrome/Firefox WebRTC是不支持HEVC的,也没有计划支持。 3. 几乎浏览器都支持MSE,除了iOS。注意HEVC MSE是依赖硬件解码的。 4. H5播放器目前mpegts.js支持,hls.js和dash.js还没有支持。 在某些场景下,HEVC的应用完全成熟了,具体就需要各位开发者自己评估了。

    3.8K40编辑于 2023-04-02
  • 来自专栏原创分享

    nodejs基类源码分析

    是对数据生产,消费的一种抽象,今天先分析一下基类的实现 const EE = require('events'); const util = require('util'); // 的基类 function pause方法,那就暂停可读的读取操作,等待目的触发drain事件 if (false === dest.write(chunk) && source.pause) { (); } } // 监听drain事件,目的可以消费数据了就会触发该事件 dest.on('drain', ondrain); 这是管道化时控实现的地方,主要是利用了write 关闭/结束处理 // 目的不是标准输出或标准错误,并且end不等于false if (!dest._isStdio && (!options || options.end ! 这就是基类的所有逻辑。

    87530发布于 2020-07-22
  • 来自专栏大数据杂货铺

    Cloudera分析中引入FlinkSQL

    将SQL推广到处理和分析用例提出了一系列挑战:我们必须解决表达无限流和记录的及时性的问题。 2) 这如何改变从开发到生产的流式作业旅程? 3) 这如何影响数据工程团队的范围? 数据分析人员通常是特定领域知识的专家,他们倾向于使用标准MPP或OLAP系统中存储的这些的快照,例如通过Apache Impala查询存储在Kudu中的数据。 这从本质上引入了寻找以的方式对其进行洞察和生产化。分析师在证实其假设之后,必须与几个数据工程师确保数周甚至数月的项目资金投入,以细致地重新实现已经用另一种语言(通常是SQL)制定的业务逻辑。 FlinkSQL使分析人员可以直接与流进行交互,并单击按钮即可部署作业。

    77730发布于 2020-07-14
  • 来自专栏大数据杂货铺

    Cloudera中的分析概览

    Cloudera分析(CSA)提供由Apache Flink支持的实时处理和分析。在CDP上的Flink提供了具有低延迟的灵活解决方案,可以扩展到较大的吞吐量和状态。 除Flink之外,CSA还包括SQL Stream Builder,可使用对数据的SQL查询来提供数据分析经验。 Cloudera分析的主要功能 SQL生成器 SQL Stream Builder是一个作业管理界面,用于在流上编写和执行Streaming SQL,以及为结果创建持久的数据API。 流媒体平台 对于分析,CSA可以集成到一个完整的平台中,该平台由Cloudera Runtime堆栈中的Apache Kafka、Schema Registry、Streams Messaging Flink是一个分布式处理引擎和一个可伸缩的数据分析框架。您可以使用Flink大规模处理数据,并通过流式应用程序提供有关已处理数据的实时分析见解。

    1.5K20发布于 2021-05-20
  • 来自专栏QQ音乐技术团队的专栏

    ExoPlayer 自适应切换分析

    三、自适应切换分析 3.1 原理图 在不同网速时自动切换为兼容当前bitrate的媒体,匹配条件一般在自适应的清单文件中就已经提前设定了,保证当前网络的bitrate大于清单协议中媒体的最低bandWidth ExoPlayer中支持DASH、HLS、Smoothing-Stream协议,我们这里以HLS和DASH协议进行流程分析,毕竟目前使用Smoothing-Stream也就微软自己为主。 trackselection.AdaptiveTrackSelection.Factory#createTrackSelections要做必要的分析。 return evaluation; } 3.2.6 完成切换 通过上述必要的逻辑,就能实现分片的切换,当然,每个部分代码量实在太多包括,资源加载部分也是一个核心环节,这里就不在继续分析了 #onVideoInputFormatChanged(com.google.android.exoplayer2.Format) 4.3 实验结果 符合预期,成功实现了降码 五、总结 ExoPlayer

    2.8K31编辑于 2023-10-23
  • 来自专栏txp玩Linux

    必须要掌握的音视频编码、解码基础!

    比方说,一张普通的图片的大小大概是1-2M,假设我们传输的帧率是30帧,则相当于一秒钟三十张2M的图片,那这个传输量是不得了的。 常见的复合流有flv封装复合流、mpegts封装复合流(这两种具体的区别,在后面会说到)。 比方说RTMP用的是FLV格式,SRT/RTSP用的是mpegts复合流格式)。 所谓解封装处理就相当于把flv、mpegts等复合流分割成视频裸(H264/H265视频)和音频裸(AAC音频)。 并把每个裸分别存放到不同的队列,视频裸存放到VideoPacket Queue,音频裸存放到Audio Queue。

    1.2K40编辑于 2023-08-31
  • 来自专栏码客

    低延时播之Jsmpeg

    Jsmpeg 官网:http://jsmpeg.com/ Github:https://github.com/phoboslab/jsmpeg 服务器 安装NodeJS The Websocket 安装FFMpeg 推时使用 sudo apt install ffmpeg 第2个Terminal中推 ffmpeg -stream_loop -1 -i /data/video.mp4 -f mpegts \ -codec:v mpeg1video -r 24 -bf 0 \ -codec:a mp2 -ar 44100 -ac 1 -b:a 128k \ http://49.233.81.68 :8081/supersecret 推送桌面 ffmpeg -f gdigrab -i desktop -framerate 30 -f mpegts -codec:v mpeg1video -s 640x480 -b:v 1000k -bf 0 -codec:a mp2 -b:a 128k -muxdelay 0.001 http://49.233.81.68:8081/supersecret 播 安装web

    1.6K20发布于 2021-02-26
  • 来自专栏腾讯IMWeb前端团队

    看前端如何通过WebAssembly实现播放器预览能力

    在简单分析了B站、腾讯视频后,发现都是采取在上架视频时,由后台生成专门用来帧预览的组合sprite图,然后前端拉取后再计算进度进行展示。 由于目前的我们后台云点播录制没有生成帧预览图功能。  \     --enable-decoder=h264 \     --disable-asm \     --disable-debug \ 分析ffmpeg提取帧流程 视频文件数据到帧的图像数据, 这里我3需要解复用ts文件的格式、即mpegts。 libswscale:图像伸缩和像素格式转化。 libavutil:工具函数。 它还定义了Emscripten如何处理程序中的错误。可以将值设置为ASSERTIONS=2,以便运行额外的测试。 、找视频的解码器、复制上下文并打开编解码器。

    3.1K10编辑于 2022-06-29
领券