
播放器设计与实现
CicadaPlayer VLC FFPlay ijkplayer 网络流媒体 点播播放 直播订阅播放
等风来不如迎风去
音视频行业深耕多年,熟悉会议、直播、RTC,对在线教育、娱乐秀场等音视频端到端技术及系统架构有深入研究
-
原创 【拉流端的多码率自适应】快手LAS
快手自研直播多码率标准对行业发布快手镜相近日,快手正式对外发布基于流式的直播多码率自适应标准LAS(Live Adaptive Streaming),用于提供低延迟、平滑、流畅的直播多码率体验。据悉,快手同时开源了LAS的端到端解决方案,包括服务端、客户端、业界领先的多码率自适应算法等,帮助业界实现零门槛接入和使用LAS。直播清晰度对用户的体验至关重要,通过提升视频的码率、分辨率,能够确保视频清晰度显著提升。快手用户规模大、分布广泛,用户间网络差异性大,单一的视频质量(码率、分辨率)或固定的档位下2021-04-19 11:20:1719
0
-
原创 【fanplayer】build ffmpeg for win32
build ffmpeg for win32winxp/win7 msys2 environmentdownload and install msys2how to build ffmpeg ?build ffmpeg for win32install required packagespacman -S gitpacman -S makepacman -S mingw-w64-i686-gccpacman -S mingw-w64-i686-yasmpacman -2021-04-16 13:07:1712
0
-
原创 【媒矿工厂(media_tech)】理解低延迟视频编码的正确姿势
理解低延迟视频编码的正确姿势延迟在视频世界中,延迟是获取视频帧的瞬间与该帧显示的瞬间之间的时间量。低延迟是任何与视频内容实时交互的系统的设计目标,例如视频会议或无人机驾驶。但是“低延迟”的含义可能会有所不同,实现低延迟的方法也并不相同。本文将定义和解释视频延迟的基础知识,并讨论如何正确选择对延迟影响最大的视频编码技术。表征视频系统延迟(characterizing video system latency)从摄像机捕获画面到显示像素之间是有许多步骤的,由这些处理步骤中的每一个步骤所贡2021-04-09 15:10:4938
0
-
原创 【CicadaPlayer】cmdline 和 Qt demo 使用CicadaSDLView
CicadaPlayer cmdline和Qt deme对比上一篇,qtdemo适配开源的,发现有问题,对比了官方sdk日志信息本次与开源的cmdline对比 ,重点关注渲染窗口。使用cmdline 播放发现也一定会走到setDisp 这里。调用路径是一样的,是播放内核的必然行为。mainServiceProcessVideoLoopSetUpVideoPathcmdline 创建SDL window CicadaSDLViewType_SDL_WINDOW2021-04-08 10:35:1224
0
-
原创 【CicadaPlayer】AliyunPlayerTest 播放对比:卡在setDisPlay
适配qt demo,卡在setDisPlay对比下播放日志,可以看到,内核似乎是一样的。开源的会有问题,渲染窗口问题“AliyunPlayerTest.exe”(Win32): 已加载“G:\NDDEV\RTCPLAYER\CicadaPlayer\cmdline\out\Debug\AliyunPlayerTest.exe”。已加载符号。“AliyunPlayerTest.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。“A2021-04-08 10:13:4622
0
-
原创 【cicadaplayer】dll 链接不一致
dll 链接不一致宏定义添加 BUILD_ALIVC_DLL报错1>g:\nddev\rtcplayer\cicadaplayer\framework\utils\cicadajson.h(110): warning C4251: “CicadaJSONArray::mMutex”: class“std::mutex”需要有 dll 接口由 class“CicadaJSONArray”的客户端使用1>d:\program files (x86)\microsoft visua2021-04-07 18:13:4723
0
-
原创 【cicadplayer】curl-7.76.0 windows 构建
G:\NDDEV\RTCPLAYER\depends_cicadplayer\cyx_libcurl\my\curl-7.76.0DLL debug + openssl自己加zlibHAVE_ZLIB_H已启动生成…1>------ 已启动生成: 项目: libcurl, 配置: DLL Debug - DLL OpenSSL Win32 ------1> 正在创建库 G:\NDDEV\RTCPLAYER\depends_cicadplayer\cyx_l..2021-04-07 18:00:2831
0
-
原创 【cicadplayer】openssl-1.1.1k windows构建
参考nasm我下载了一个win64的https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zipC:\nasm\nasm-2.15.05-win64\nasm-2.15.05openssl-1.1.1k win32G:\NDDEV\RTCPLAYER\depends_cicadplayer\cyx_libcurl\my\openssl-1.1.1k\openssl-1..2021-04-07 17:31:4229
0
-
原创 【cicadplayer】zlib windows 构建
zlib windows 构建下载 http://www.zlib.net/zlib1211.zip直接打开vs 项目:G:\NDDEV\RTCPLAYER\depends_cicadplayer\cyx_libcurl\my\zlib-1.2.11\contrib\vstudio\vc14\构建已启动生成…1>------ 已启动生成: 项目: zlibvc, 配置: Debug Win32 ------1>Microsoft (R) Macro Assembler.2021-04-07 16:30:3120
0
-
原创 【CicadaPlayer】cmd播放程序
用户控制事件处理G:\NDDEV\RTCPLAYER\CicadaPlayer\cmdline\IEventReceiver.hListener 响应的动作 class Listener { public: virtual ~Listener() = default; virtual void onPausePlay() = 0; virtual void onExit() = 0; virtual void o.2021-04-07 16:01:5515
0
-
原创 【CicadaPlayer】cmake+vs构建
cmake-gui 创建vs工程Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.18363.CODE_COVERAGE Disabledbuild windowsTARGET_PLATFORM is windows build windowsTARGET_PLATFORM is windowsTOPDIR is G:/NDDEV/RTCPLAYER/CicadaPlayer/framework/..W.2021-04-06 19:45:2515
0
-
原创 【CicadaPlayer】ubuntu18.04交叉编译 2
root@ubuntu:/home/zhangbin/stream/aliply/CicadaPlayer/cmdline# mkdir buildroot@ubuntu:/home/zhangbin/stream/aliply/CicadaPlayer/cmdline# cd build/root@ubuntu:/home/zhangbin/stream/aliply/CicadaPlayer/cmdline/build# lsroot@ubuntu:/home/zhangbin/stre...2021-04-06 16:53:5018
0
-
原创 【CicadaPlayer】avFormatDemuxer 读取网络包并计算packet的duration pts
上一篇,我们关注了播放核心重要的option,并追踪了低延迟的应用avFormatDemuxer 初始化缓存avFormatDemuxer初始化缓存大小:32768 = 32*1024 ,那就是32K bit?? static const int INITIAL_BUFFER_SIZE = 32768;demuxer的缓存初始值:这里是做啥:demuer 读取包 ReadPacketInternal AVPacket *pkt = av_packe..2021-03-30 17:47:0538
0
-
原创 【cicadaplayer】播放核心option设置及demuxer和decoder的LowLatency
关注的影响直播延迟卡顿的重要optionG:\NDDEV\RTCPLAYER\CicadaPlayer\mediaPlayer\SuperMediaPlayer.cppstartBufferDuration 开始缓存的持续时间RTMaxDelayTime 最大的延迟时间?highLevelBufferDuration 缓存时间的最高等级?maxBufferDuration 最大的缓存时间LowLatency 低延迟模式bandWidth 带宽设置?networkRetry2021-03-30 16:13:1235
0
-
原创 【播放器】适用于直播点播的播放sdk特征
参考pili-engineering/PLPlayerKit 如PLPlayerKit,现代播放器 应该具备以下关键特性:高可定制直播累积延迟消除技术支持首屏秒开支持 RTMP 直播流播放支持 HTTP-FLV 直播流播放支持 HLS 播放支持 HTTPS 播放支持多种画面预览模式支持画面旋转与镜像支持播放器音量设置支持纯音频播放支持后台播放支持使用 IP 地址的 URL支持软硬解自动切换支持 H.265 格式播放支持 HLS 七牛私有 DRM支持点播倍速...2021-03-29 16:29:4138
0
-
原创 【cicadaplayer】MediaPacketQueue的基础操作
media_packet_queue队列(G:\NDDEV\RTCPLAYER\CicadaPlayer\mediaPlayer\media_packet_queue.cpp)的实现是缓存管理的基础队列提供的缓存功能是缓存管理功能的核心。队列提供的缓存能力有:TimePos 时间位置 对应包的timePositionIAFPacket :解复用后的包看起来关键信息与ffmpeg的设计类似#define AF_PKT_FLAG_KEY 0x0001 ///< The pa2021-03-29 15:53:1723
0
-
原创 【CicadaPlayer】缓存控制 BufferController
涉及到 SuperMediaPlayer缓存对象:IAFPacket缓存队列:MediaPacketQueueSuperMediaPlayer这是播放器的实际实现类G:\NDDEV\RTCPLAYER\CicadaPlayer\mediaPlayer\SuperMediaPlayer.h在切换源时,会执行SwitchVideo会清理掉队列中startTime之前的所有包SuperMediaPlayer::SwitchVideo(int64_t startTime)类似的操作..2021-03-29 15:45:4738
0
-
原创 [zz]基于flashplayer的视频播放优化
[zz]基于flashplayer的视频播放优化原文地址本文中如果无特别说明的地方,传输协议都是RTMP,服务器是FMS,播放器指的是Flashplayer。问题:直播延大原因1:编码参数未优化解决1:从编码参数上可以减小视频关键帧间隔、减小带宽、将H.264编码改VP6编码或H.263编码。原因2:服务器端缓冲数据过大解决2:可以设置FMS参数,减小服务器端缓冲。原因3:播放器端缓冲设置过大导致延时。解决3:可以减小播放器缓冲到0.1秒,或设置零缓冲。原因4:网络节点不稳定。解决2021-03-29 14:37:2536
0
-
原创 [zz] 直播中累积延时的优化
[zz] 直播中累积延时的优化原文-对于交互性要求较高的直播业务来说,采集推流端和观看端的延时太高是不可接受的。在 直播协议的选择:RTMP vs. HLS 一文中提到了采用 RTMP 协议做直播业务,一般可以将延时控制在 1-3s 或者更低。但是如果在直播中发生卡顿、播放暂停等情况时,也会不断积累推流端和观看端的延时。这种累积延时要怎么优化呢?优化切换前后台带来的累积延时在直播场景中,有一种情况是切换前后台造成累积延时。这里举个例子:在前台时,直播视频在播放,然后退到后台,此时暂停播放器2021-03-29 11:32:3436
0
-
原创 [zz] 为什么流媒体直播的延迟很高
为什么流媒体直播的延迟很高原文-为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。背景通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 —2021-03-29 11:19:3738
0
-
原创 【zz 干货】直播平台如何使用RTMP实现视频直播低延迟
【zz】干货 - 直播平台如何使用RTMP实现视频直播低延迟原文在这里两种延迟在直播的过程中,有首开延时和内容延时。首开延时,基本可以控制在100ms左右;基于RTMP播放的内容延迟根据CDN的情况,基本上会在2~5秒左右。而因为RTMP是基于TCP协议的,所以在播放的过程中会受到网络条件的影响,造成延迟增加的情况。拉流侧的buffer queue通过了解直播流的推流和拉流相关的知识,可以知道,根据推流端(推流策略)与服务器(缓存策略)不同的控制的设定,我们很可能拿到几秒之前的内容(2021-03-29 11:04:2029
0
-
原创 [webrtc] rtmp2rtp 打包
老版本的WebRtcRTPHeader与新版本的RTPHeader 有相似之处对于rtp封包,主要是自己打 rtp header + 编码后的数据做payload打rtp header + rtp payload 然后给webrtc 处理(jitterbuffer ?)本篇主要是分析涉及到的webrtc的一些数据结构和流程。rtmp2rtp 具体参考 我的这一篇WebRtcRTPHeader看起来老版本才有, 包括:RTPHeaderFrameTypeRTPTyp..2021-03-16 20:23:2967
0
-
原创 【发现】一个简化版本的obs
发现一个简化版本的obs ,大神做的很棒不过是深度绑定windows平台的。界面是mfc的比如,aac编码是media foundation音视频rtmp推流各种场景/源支持各种可配置主界面,可拖动,可自由布局音频配置源是桌面/麦克风等...2021-03-17 15:48:1194
0
-
原创 【rtmp2rtp】rtmp h264 aac 转rtp 封包
rtmp 拉流,得到h264和aac然后封装为rtp 给webrtc 模块从rtmp里获取H.264并打rtp包 void handleVideoPacket(char* data, int len, u_int32_t timestamp) { unsigned frameType = ((unsigned char)data[0]) >> 4; unsigned codecId = data[0] &0xF; RTP..2021-03-16 20:22:2580
0
-
原创 [obs 集成rtmp] rtmp 拾遗
由于一直在用srs的librtmp 模块RTMPDUMP的librtmp 没仔细看过。obs使用的是这个 ,发现纯c的风格实际上比srs的要容易理解。G:\GERRIT\src\livecloud\obs-studio-24.0.6\plugins\obs-outputs\librtmp\rtmp.cc 代码也容易集成到c++ 项目中来。obs的rtmp 插件,是推流用的。因此调用了encoder 编码通过循环缓存给到rtmp 复用 av ,rtmp传输相关的码率控制 丢帧控制在r..2021-03-15 16:30:5346
0
-
原创 【aac编解码】微软 MFMSAACEncoder Decoder
适用于windows端的桌面分享中的aac 编码器DesktopStreamingMFMSAACEncoderhttps://github.com/Shehryar/DesktopStreaming/tree/c66c6d654a64fd3bd7d2ee2860b0feb5c3568218#pragma once#include <mfapi.h>#include <mfidl.h>#include <mfreadwrite.h>#includ..2021-03-11 10:58:3362
0
-
原创 【CicadaPlayer】ubuntu18.04交叉编译 1
SDL2-2.0.10/x86_64-w64-mingw32root@ubuntu:/home/zhangbin/stream/aliply/depends/SDL2-2.0.10/x86_64-w64-mingw32# lsbin include lib share修改路径更新cmake到3.16root@ubuntu:/home/zhangbin/stream/aliply/depends/SDL2-2.0.10/x86_64-w64-mingw32# apt-get r.2021-02-07 15:58:0971
0
-
原创 【zlmediakit 】添加音频输出(windows 端wav播放)
zlmediakit的播放器testplayer 没有音频的解码和播放如果想使用zlmediakit 测试 拉取到的AAC 流 ,必须自己加代码。这里测试的是aac 解码 后的播放 环节。pcm播放上一篇,已经实现了aac(ADTS )解码为pcm只需要在windows上实现pcm输出就ok了windows的MMSystem 支持wav输出,需要MFC的支持fatal error C1189: #error: WINDOWS.H already included.//1&g..2021-02-07 15:41:4394
0
-
原创 【AAC 推流】AAC文件读取并解析ADTS
【AAC 推流】AAC文件读取并解析ADTS参考:ADTS 头解析FRAME_MAX_SIZE 是多大?#define FRAME_MAX_SIZE (1024*500) 是500个AAC包那么大AdtsHeader 头格式#ifndef _AACFile_MEDIA_SOURCE_H_#define _AACFile_MEDIA_SOURCE_H_#include <string>#include "net/MediaSource.h"class AACFi2021-02-04 11:47:58109
0
-
原创 [zlmediakit] 直接编译aac编码器和gui
ZLMEDIAKIT 可选faac 做编码由于目前测试是windows,方便调试,因此想了下,还是打开找了了下仓库位置大神一直在更新atlmfc 里的头文件找不到G:\NDDEV\RTCUtils\faac参考大神我本机装在这里...2021-01-29 16:37:2983
0
-
原创 傅立叶变换1
傅立叶变换时域和频域Fourier Transform, Fourier Series, and frequency spectrum角度 塞他 (圆圈里面有个点的哪个)https://www.youtube.com/watch?v=r18Gi8lSkfMx坐标代表的是 cos塞他二位但是都是无穷尽的Y看上去是一个sin塞他的波形还是一个二维的可以改变sin...2019-12-27 00:59:42100
0
-
原创 ffmpeg探测音频静音
zhangbin@DESKTOP-1QV8QU4 MINGW64 /v/RECORD_TEST/refref/testHLS/TOOLS $ ffmpeg -i hascrs.aac -af silencedetect=noise=0.0001 -f null - ffmpeg version N-81364-gf85842b Copyright (c) 2000-2016 the FFmpeg2017-11-30 16:22:513469
0
-
原创 ffmpeg查看音频波形
zhangbin@DESKTOP-1QV8QU4 MINGW64 /v/RECORD_TEST/refref/testHLS/TOOLS $ ffmpeg -i nosound_crs_deae26cef488423398ca44c208d62882.ts -vn -acodec copy nosound.aac ffmpeg version N-81364-gf85842b Copyright2017-11-30 16:22:264077
0
-
原创 ALSA简介
OSS不开源,已经被废弃了。现在linux都把ALSA作为标准的内核模块,以提供 标准的音频驱动程序。ALSA 为应用程序的编写者,提供了程序库,并提供了接口。ALSA的开发者建议应用程序开发者使用音频函数库而不是驱动程序的API。2011-02-23 11:31:001731
0
-
原创 【zz】ALSA在ARM(S3C6410)中的移植
【zz】ALSA在ARM(S3C6410)中的移植2011-02-23 11:24:002708
0
-
转载 【zz】Linux音频编程指南
Linux音频编程指南2011-02-01 23:45:001602
0
-
转载 alsa声音编程介绍
alsa声音编程介绍2011-02-01 20:19:001630
0
-
原创 【owt】跟踪发布流程
官方EGL是GLES与屏幕的桥梁EGLContext 和 EGLSurface 是EGL上下文相关GLES 操作 上下文是“线程局部存储访问”,渲染代码是在GLES线程中。EGL分配的离屏缓冲区是pbufferEGLSurface 可以是pbuffer也可以是操作系统分配的窗口EGI 是一个规定如何通过操作系统创建和访问窗口的库(要绘制纹理多边形,请使用 GLES 调用eglCreateWindowSurfaceeglCreateWindowSurface 可创建EGL 窗.2020-08-16 10:28:34193
0
-
原创 WebRTC介绍和构建
1介绍WebRTC是一个开放源代码项目,可实现Web和本机应用程序中音频,视频和数据的实时通信。WebRTC具有多个JavaScript API-单击链接以查看演示。getUserMedia():捕获音频和视频。MediaRecorder:录制音频和视频。RTCPeerConnection:在用户之间流式传输音频和视频。RTCDataChannel:在用户之间传输数据。在哪里...2019-12-18 12:35:57314
0
-
原创 rtmp amf 0
AMF是Adobe设计的一种通用数据封装格式。rtmp协议中数据都是大端的,所以在放数据前都要将数据转成大端的形式。AMF(Action Message Format)是一种 二进制格式数据型态,AMF协议基于HTTP,将flash客户端数据编码后传回server,server端的remoting adaptor接收到数据后则会解码回正确的native对象,交给正确的程序处理,并以同样的数...2019-12-10 09:46:36102
0