自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chenquangobeijing的专栏

流媒体、音视频开发

  • 博客(117)
  • 资源 (1)
  • 收藏
  • 关注

原创 [ffmpeg系列] 从应用的角度学习ffmpeg

[ffmpeg系列 01] ffmpeg命令行-CSDN博客[ffmpeg系列 02] 音视频基本知识-CSDN博客[ffmpeg系列 03] 文件、流地址(视频)解码为YUV_ffmpeg 视频文件解码为yuv文件-CSDN博客[ffmpeg系列 04] YUV编码H264,以及推流_[ffmpeg系列 04] yuv编码h264,以及推流-CSDN博客[ffmpeg系列 05] 录音、声音直播(音频推流)_ffmpeg录音 csdn-CSDN博客[ffmpeg系列 06] 摄像头直播-CSDN博客[ff

2024-02-26 20:14:27 423

原创 WebRTC入门系列

一 Windows端编译、使用H264、只使用opus。实际中根本不会用这个,可以不看。

2022-10-13 19:45:26 521

原创 [ffmpeg系列 07] 音视频同步,面试经常被问

面试问题,特别是你做客户端开发1 如何进行音视频同步?2 如果视频有延时怎么做?3 如果声音有延时怎么做?...

2024-02-22 18:35:33 339

原创 [ffmpeg系列 10] 总结即序言

ffmpeg命令行可以作为验证问题的工具,比如,用代码有问题,命令行是好的。ffmpeg的格式和协议,都是按照标准的国际文档,RFC文档等实现的。转码,音频重采样,是比较重要的,请参考example。1 先熟悉ffmpeg命令行,大概知道它有那些功能。a 流程,函数调用顺序。编码,解码,转码等都有流程。答:已学习C语法,已接触音视频开发,初级程序员。答:编码、解决问题的能力需要一个过程,需要积累。3 项目出问题,能找到在那,并解决。这个过程需要你自己独立完成,走过。b 函数参数,重要的结构体等。

2024-02-20 10:45:40 387

原创 [ffmpeg系列 09] 添加水印,学习filter的使用

ffmpeg版本5.1.2,dll是:ffmpeg-5.1.2-full_build-shared。新建win32工程,复制这三个文件。设置ffmpeg库的include和lib目录。的代码基础上添加的,直接存yuv文件,验证添加水印是否生效。最基本的知识:需要解码的,图片是叠加在YUV上的,然后在编码。有的视频,叠加水印,不成功。用命令行试,是可以的。限制了视频编码前的格式是yuv420p?代码是windows端,用VS编译。

2024-02-05 17:43:41 203

原创 [ffmpeg系列 08] 硬编(Intel、Invidia)

2 移动端硬编,比如用手机直播。会受限于android系统,android版本低,FrameWork框架层不支持硬编。b 编码器替换成h264_nvenc、使用hw_frames_ctx。ffmpeg版本5.1.2,dll是:ffmpeg-5.1.2-full_build-shared。INTEL_QSV cpu是intel就行,输入YUV格式要求NV12。答:避免了CPU和GPU之间的数据拷贝,提高了编码效率。代码在[系列04]编码的基础上改的。即hw_frames_ctx的作用?什么时候会用到硬编?

2024-01-23 16:06:46 177

原创 [ffmpeg系列 06] 摄像头直播

(我不确定它们是不是使用的rtmp,抓包看走的tcp。4 Frame的pts:调用av_packet_rescale_ts,ffmpeg已内部计算好。版本5.1.2,dll是:ffmpeg-5.1.2-full_build-shared。正确的音视频同步大概是:1个视频,2个音频。因为一般视频是25帧,音频有50帧。答:mjpg格式,同分辨率的YUV422P,帧率低。代码是在系列 05上加的,这个demo可以作为直播的demo。导致的问题:音视频一开始是同步的,过了十几分钟后,音频落后了。

2024-01-17 21:05:13 351

原创 [ffmpeg系列 05] 录音、声音直播(音频推流)

版本5.1.2,dll是:ffmpeg-5.1.2-full_build-shared。3 swr_convert转换前的音频数据:可以用不同操作系统的音频库函数替代。答:av_read_frame、解码后的、swr_convert转换后的数据等。采集音频数据用的dshow,声卡名称一般是中文,需要转换。5 编码AAC,帧长度要求是1024,编码前的格式是FLTP。S16、FLTP格式区别,可以参考系列 02讲的。8 AAC有头,直接写编码后的数据,播不了。:是采样点的个数,< 不是字节数。

2024-01-10 21:15:39 477 3

原创 [ffmpeg系列 04] YUV编码H264,以及推流

avformat_new_stream的参数从m_pVideoEncodeCodecCtx获取的,参数必须赋值,否则avformat_write_header返回负值。sps的nalu type =7, pps的nalu type = 8,I帧的nalu type=5。2 对比YUV文件和H264文件,计算一下大小之比,对H264压缩率有一个直观的认识。答:起始码0x00 0x00 0x00 0x01或者0x00 0x00 0x01。如果没有进行缩放,yuv的宽高和h264宽高是一样的。

2024-01-08 10:37:46 1095

原创 [ffmpeg系列 03] 文件、流地址(视频)解码为YUV

H264有记录编码前的YUV采样格式,chroma_format_idc,在sps里。如果没有这个字段,说明该字段用的默认值1,即yuv 4:2:0。流地址(RTMP、HTTP-FLV、RTSP等):信令完成后,才进行音视频传输。ffmpeg版本5.1.2,dll是:ffmpeg-5.1.2-full_build-shared。),音频:1/48000(1/采样频率)。如果YUV的采样格式是yuv 4:2:0,也不要求缩放,不需要sws_scale。接流的在实际中的应用:1 展示,播放。

2024-01-02 20:21:36 724

原创 [ffmpeg系列 02] 音视频基本知识

Planar(平面的,带P)是左右声道分开存储,左声道data[0],右声道data[1]。YUV大小:宽*高*1.5,Y占大小:宽*高,U占大小:宽*高/4,UV一样大。编码AAC:比如S16,双通道,一帧PCM数据字节数:1024。B帧是帧间编码,双向预测,依赖于I帧或前面、后面的P帧。播放带B帧的视频:需要把B帧后面的P帧解码了,再播放。不带P,交错排序LRLR,data[0],比如S16。P帧是帧间编码,前向预测,依赖于I帧或前面的P帧。I帧是帧内编码,能独立解码成功。取值范围:0-256。

2024-01-01 22:11:22 1572 1

原创 WebRTC的RTP扩展头、RTCP包

MSW+LSW=NTP timestamp,各4字节,Most significant word,Least,音频5000ms:media_config.audio.rtcp_report_interval_ms。One-Byte Header:0xbede 2字节、length 2字节—扩展头的个数、Sender ssrc:ssrc of sender:自己那端rtp流ssrc。packet count:4字节,octet count:4字节。sender ssrc:是自己那端rtp流的ssrc。

2023-06-03 00:31:49 21

原创 WebRTC的Pacing

作用:匀速发送数据,主要是视频。I帧和P帧的大小不一样,I帧拆分的RTP包多些,匀速发送。

2023-05-02 18:51:51 227 1

原创 WebRTC Probe 探测码率、transport-cc作用

为什么需要探测带宽?答:拥塞控制的AIMD算法,加法增加太慢了,网络很好的时候,需要很快探测到最大带宽。

2023-04-05 20:12:08 583

原创 ffmpeg叠加水印

叠加的图片只能png、jpg?

2023-04-02 00:30:43 298

原创 OpenGL渲染视频步骤--面试用

有两种着色器Shader:顶点着色器、片元着色器。用的是GLSL语言,运行在显卡上的语言。创建着色器,编译着色器。Window、Linux、Android的上下文环境搭建,都是使用EGL。4 设置OpenGL二维纹理坐标,(向右增长、向上增长、范围是[0,1])获得一个display,配置,创建context,创建surface。3 设置物体坐标,(向右增长、向上增长、范围是[-1,1]),2 使用显卡绘制程序,useprogram,创建程序,附加着色器,连接程序,使用程序。6 设置纹理属性,绘制。

2023-04-01 00:18:17 393

原创 PS和TS

PS一般是安防GB28181用的,TS是电视相关的,比如广电监控,直播的m3u8+ts。

2023-03-24 00:06:42 208

原创 对接GB28181厂家平台的思考

在两家安防公司呆过,中间隔了几年。第一家的架构第二家的架构第一家,算法拉rtsp流,会慢几秒。因为转码服务器和RTSP服务器多了一个rtsp推流。几秒对算法结果没有影响。其它客户端拉rtsp流,打开慢,影响用户体验。轮询上大屏,效果也不好。客户端和信令服务器可以走私有协议,是内部使用。走sip信令,信令服务器要转发sip,加大了开发的量,from和to都要改等。ZLMediaKit是http服务器,向wvp定时发送服务器的Keepalive信息。

2023-03-22 17:46:56 108

原创 回顾用过的开源库:mediastream2和ortp

一 mediastream2一 mediastream2特点:由一系列不同功能的Filter,即MSFilter,按照需要连接Link起来。Run起来。Filter照着模板写,注册上去。跟ffmpeg类似。音频filter,视频filter,各一个线程。项目经验:有遇到接收音视频数据报错--没有数据,是其中一个filter阻塞了,该功能太耗时了,而不是ortp库有问题。

2023-03-17 22:56:33 196

原创 WebRTC拥塞控制:发送端基于延时----学习记录

基于延时得出的码率:SendSideBandwidthEstimation::UpdateDelayBasedEstimate(的delay_based_limit_。

2023-02-06 21:05:47 346

原创 WebRTC SDP协议--新属性

6 payload 96的重传流是97,96的ssrc是3793049148,97是2533540925。level-asymmetry-allowed=1—允许h264 level等级不同,指main、high那些。比如:有2路视频,有2个m=video。描述不了的情况:ssrc对应的编码格式不同,一个H264、一个H265,放到一个m描述就有问题。非交错:Type是[1-23, 24, 28]、STAPA是24,FU-A是28。2 a=rtcp-mux //端口复用,rtp和rtcp是同一个。

2023-02-03 21:01:53 847

原创 线程、进程同步与互斥--在实际项目中的使用

⾃旋锁是通过CPU提供的CAS函数(Compare And Swap),在⽤户态完成加锁和解锁操作,不会主动产⽣线程上下⽂切换,所以相⽐互斥锁来说,比如:解码时取数据,push和pop队列,都需要加锁。自旋锁:linux内核的epoll实现中有用,应用开发很少用,或者我孤陋寡闻,不知道。比如:线程A,接收所有设备信息,接收完了,通知线程B展示,可以用事件。进程互斥的原则:空闲让进,忙则等待,有限等待,让权等待。上下切换的耗时,⼤概在⼏⼗纳秒到⼏微秒之间,别人统计的。操作系统讲的PV操作就是用的信号量。

2023-02-03 00:08:54 366

原创 H264编码一些名词概念和疑问

帧分组算法:在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,我们认为这样的图可以分到一组。blocking artifact:随着码率的降低,量化变得粗糙,块的边界出现不连续,形成重建图像。基于机器学习的模型设计的,依靠多种指标,比如:1 视觉信息保真度,2细节丢失指标,3运动量等。在H.264中,亮度分量的MV最高可达1/4像素精度,色度分量的MV最高可达1/8像素精度。运动估计:不同算法的搜索,计算宏块不同类型的值,选最优值。

2023-02-01 18:22:41 423

原创 H264/AVC 句法和语义--重要的字段、带截图

mb_skip_run:cavlc跳过的个数,mb_skip_flag:使用cabac时,宏块是否跳过。transform_size_8x8_flag:为1,预测残差按照8x8像素块进行解码。pic_order_cnt_type=0:只对POC低位编码传输。disable_deblocking_filter_idc:去块滤波器。first_mb_in_slice:重要,第一个宏块在整帧中的位置。frame_mbs_only_flag:=1只含帧宏块。SPS中有一个pic_order_cnt_type决定。

2023-02-01 11:06:55 383

原创 ffmpeg新知识get--记录

调用avcodec_open2(codec_ctx, codec, NULL)后,codec_ctx->frame_size被赋值。Android采集声卡格式:AUDIO_FORMAT_PCM_16_BIT,S16。opus支持AV_SAMPLE_FMT_S16, frame_size =960。

2023-01-31 23:08:58 300

原创 [ffmpeg系列 01] ffmpeg命令行

``cpp通过ffmpeg --help > help.txt。

2023-01-31 20:30:40 161

原创 ffmpeg视频编解码流程--面试用

如果是H264,直接写编码后文件就行。不需用ffmpeg函数写头写尾。

2023-01-31 15:42:41 409

原创 epoll模型要点总结

6 epoll惊群(指在accept下):多个线程或多进程等待同一事件,比如accept,系统会唤醒所有线程,但只有一个线程得到该事件,导致效率低。会设置回调函数ep_poll_callback,把pwq->wait(等待队列)跟socket的等待队列关联起来。网卡有事件到来,直接插入到rdllist中,所以epoll不需要像select一样遍历事件。4 LT水平模型,默认的,数据没有读完,epoll_wait还能读到数据。9 sock有poll函数,需要实现,如tcp_poll、udp_poll。

2023-01-29 20:40:04 564 1

原创 RSFEC RFC

比FlexFEC header头多了三个字段:序列号(为什么三字节?一帧视频分成几个RTP包。

2022-12-02 19:26:17 234

原创 WebRTC的ProcessThread

方便统一实现定时任务(周期性任务)

2022-11-27 20:51:10 7

原创 WebRTC--三大线程

【代码】WebRTC--三大线程。

2022-11-24 00:13:07 10

原创 WebRTC代理类作用--切到原本的线程执行

工作线程:VideoReceiveStream、BaseChannel等有判断。网络线程:WebRtcSession等有判断。信令线程用在:发送信令。

2022-11-23 19:07:22 10

原创 声网SDK使用笔记

【代码】声网SDK使用笔记。

2022-11-05 18:05:22 1149

原创 BBR学习笔记--什么是BBR、可调整的参数

Reno、Cubic都是基于丢包的拥塞控制算法,Cubic适用场景是高带宽的,但现在丢包不一定是发生拥塞了,比如Bufferbloat(缓冲区膨胀),路由器的缓冲区满了的丢包。

2022-10-08 17:59:46 1067

原创 epoll源码学习记录

【代码】epoll源码学习记录。

2022-09-26 20:46:06 290

原创 ZLToolKit网络库的自问自答

用户操作:比如addEvent即EPOLL_CTL_ADD等,在当前线程,放到_event_map。不是当前线程,切换到属于它的线程,在runLoop,回调该IO事件。在当前线程,直接处理task,否在放到 _list_task。疑问:一台服务器的IO事件不是固定的吗?1 一个线程一个epoll,还是共用1个epoll?work poller线程个数太多了,是cpu的个数。6 ioctl设置非阻塞,对那些函数起作用?使用epoll+线程池+异步网络IO模式开发。一个线程一个epoll。

2022-09-17 15:53:38 397

原创 DTLS、ICE--用janus举例

3 dtls:Client Hello、Server Hello等、4 srtp包--使用绑定ip和port。服务器janus的sdp是a=setup:active,sdp type是answer,音视频一样。1 先SDP协商、2 发stun包—bind request、response、绑定ip和port。a=setup:actpass:作为客户端,主动发送协商。客户端的sdp是a=setup:actpass,sdp type是offer。a=setup:active:作为客户端,主动发送协商。

2022-09-07 20:29:49 938

原创 Janus之自问自答

结构体janus_transport_session、janus_ice_peerconnection、janus_ice_handle、janus_videoroom、janus_videoroom_session、janus_videoroom_publisher等都有janus_mutex。1 client向janus发送json消息,2 janus向远端发送event的事件通知。janus在客户端开始的时候,发4次REMB包,确定带宽。enable video,发送请求PLI包。

2022-09-07 15:02:36 587

原创 Janus VideoRoom信令分析--public、subscribe

public、subscribe主要信令记录:

2022-09-05 19:40:10 394

原创 Janus库简介

比如:{"janus":"message","body":{"audio":true,"video":true,"videocodec":"h264"},"transaction":"f4p3bK72QD3e","jsep":{"type":"offer","sdp":"v=..."}插件接口如下:初始化、销毁、创建会话、处理消息--跟client通信、开始媒体、处理rtp包、rtcp包、结束媒体、销毁会话等。参会人员A,ICE后,获取了端口,接收流,记住ssrc。创建会话,获得session_id,

2022-09-05 18:53:28 521

曲线拟合,解线性方程

曲线拟合,解线性方程,在VC6中运行通过,修改点的XY数据就可以移植了。

2011-11-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除