流媒体与服务器
qiuchangyong
这个作者很懒,什么都没留下…
展开
-
一个Spring Boot @Controller示例程序的开发
不得不说,被垃圾教程,带入歧路,不能返归。经过一番摸索,把里面的问题,修改了,这里上一个正确可用的教程,以求帮助和我一样刚入门的人。------------------------------------------下面正文开始了------------------------------------------原创 2022-12-30 01:13:07 · 682 阅读 · 1 评论 -
关于turnserver配置的两点说明
turnserver是开源的stun/turn服务器,可以作为webrtc的ICE服务器。它的配置文件是turnserver.conf,网上关于其配置的文档挺全的,我也不多讲,这里就使用过程中摸索出来的经验讲两点:1.在使用的过程中发现,在/var/log/目录下产生log文件,一天产生一个,时间长了还很多。文件里记录着哪个ip在使用turnserver,可能别人在使用我的服务器提供stun服务吧。于是想把这个log产生的功能禁用了,但又不知道在哪里设置,在turnserver.conf中有一个log-fi原创 2022-12-07 18:15:58 · 1114 阅读 · 0 评论 -
浅谈h264和h265的区别
h265编码出来的NALU码流的分隔,和h264一样,也是使用00 00 00 01 start code,而且防竞争机制(emulation)也一样。通常编码器出来的码流都是做过防竞争处理的,在传输或保存NALU时无论是使用start code前缀还是长度前缀,都不需要做去03处理,解码器解码的时候会做这一步操作,当然如果要分析NALU码流,就需要先做去03处理。相比h264,压缩同样的视频获得同样的质量的情况下,h265可以做到压缩后的大小为前者的一半,但压缩时间复杂度增加。原创 2022-11-30 18:53:25 · 10039 阅读 · 0 评论 -
浅谈ffmpeg对ps文件格式的转换
我们如果用命令行解封装时通常是不需要指定格式的,会自动探测出封装的格式。当然如果我们知道要处理的文件格式为PS,可以使用iformat = av_find_input_format("mpeg")获取这种格式。注意这里的封装格式写的是mpeg,写成其他的如vcd,vob,svcd,dvd也能够转换。ps流是一种很老的视频格式,最早来自于MPEG-1 Program Stream,也就是VCD光碟。ffmpeg源码中的ps格式解封装的部分位于源码\libavformat\mpeg.c。原创 2022-11-30 01:05:15 · 1861 阅读 · 0 评论 -
对ivf文件格式的一点补充说明
但其中有个地方讲的不好,就是写文件头的地方。文件头的第16个字节和第20个字节处应该写帧率的分母和分子,第24个字节处应该写帧数。这种情况应该是帧率固定的情况,很多时候视频的帧率不是固定的,这就要用到timescale和duration了,以上位置分别写time_base的分母和分子,以及该timescale下的duration。详见ffmpeg源码(\libavformat\ivfenc.c)中的实现。关于ivf文件格式的说明这里(原创 2022-10-09 10:14:27 · 488 阅读 · 0 评论 -
webrtc 源码-发送端上行带宽调整
webrtc 版本:2021-04-23 master。转载 2022-09-02 22:44:14 · 963 阅读 · 0 评论 -
编译ExoPlayer扩展模块av1遇到的问题及解决
ExoPlayer使用libgav1模块实现av1的解码,编译av1这个扩展模块后,得到的是aar文件。本人在编译的过程中遇到两个小问题,后来解决了,现记录如下:问题一:Android Studio报错:Invalid revision: 3.18.1-g262b901-dirty解决办法:删掉或移走Android Sdk安装目录下的cmake目录下的3.18.1目录,不使用这个版本的cmake问题二:提示gav1_jni.cc文件中的random未定义解决办法:这是未包含c++11的产生随原创 2022-04-07 01:20:46 · 2646 阅读 · 0 评论 -
libgav1编译详解
libgav1 -- an AV1 decoderClone this repo:git clone https://chromium.googlesource.com/codecs/libgav1libgav1 -- an AV1 decoderlibgav1 is a Main profile (0), High profile (1) & Professional profile (2) compliant AV1 decoder. More information on th翻译 2022-03-07 22:13:27 · 469 阅读 · 0 评论 -
RFC3581——SIP中的rport机制
1. 介绍RFC3581的下载地址:http://www.ietf.org/rfc/rfc3581.txt该协议比较简短,主要用于描述rport(response-port)机制。1.1NAT分类NAT:网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够.转载 2022-03-02 21:33:40 · 871 阅读 · 0 评论 -
SIP中的dialog,call,session和transaction术语
一、基本概念1、Messages(消息)消息是在服务器和客户端之间交换的独立文本, 有两种类型的消息,分别是请求(Requests)和响应(Responses)。两种类型的消息都由一个起始行、一个或多个头字段、一个标识头字段结束的空行、一个可选的消息体组成。2、Transaction(事务)事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息(也就是说,事务是一次完整的请求)。如果请求是一个"Invi转载 2022-02-14 18:52:09 · 1263 阅读 · 0 评论 -
播放国标28181的PS流文件没有声音的问题
国标28181的PS流是打包在rtp中,传输给接收端播放的,如果要获取PS流的数据,就要把RTP包头去掉,拼在一起就是一个PS文件,这个文件是可以播放的。不过实际遇到的一个问题就是只有视频能播放,但声音出不来,用的是ffplay和vlc都一样。在用ffprobe查看流的信息,发现音频没有认出来。这是因为其中的音频流是G.711A,缺少声道和采样率的信息,这不像mp3音频格式每一帧都含有。ffmpeg中关于PS流解析的源码位于libavformat\mpeg.c,通过研究发现需要在保存PS流到文件的时候,先写原创 2021-12-15 21:45:03 · 2569 阅读 · 5 评论 -
G.722 简介及使用测试
本文转自G.722 简介及使用测试-snowweihua-ChinaUnix博客原文如下:G.722 是一种语音编解码技术。是使用16kHz采样率的宽带语音编码。适合应用在高质量的会议电话系统。 它有三个版本,G.722 (SB-ADPCM): 带宽48,56,64kbit/s. G.722.1 (Siren7): 带宽 16,24,32kbit/s. G.722.2 (AMR-WB): 带宽 6.6-23.85kbit/s (9种)。 再详细的不再介绍,可以到网上找一下就有了。这里...转载 2021-11-03 19:50:21 · 2901 阅读 · 0 评论 -
RTP (I): Intro to RTP and SDP
在java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.转载 2021-09-07 20:53:34 · 446 阅读 · 0 评论 -
compiles ffmpeg for windows
FFMPEG Libraries are built using the following configure optionsx64: ./configure --enable-shared --disable-encoders --disable-decoders --enable-decoder=vp9 --toolchain=msvcwin32: ./configure --enable-shared --disable-encoders --disable-decoders --enab..原创 2021-09-07 10:06:06 · 80 阅读 · 0 评论 -
Overview of JPEG XS
The JPEG XS (ISO/IEC 21122) standard specifies a compression technology with an end-to-end latency of a few lines, at a low implementation complexity. For example, this allows hardware implementations that do not require external memory. Its design off...转载 2021-08-31 20:13:27 · 601 阅读 · 0 评论 -
转载两篇讲解PS流的好文
第一篇:RTP协议全解析(H264码流和PS流)https://blog.csdn.net/chen495810242/article/details/39207305第二篇:PS 流格式解析(转)https://www.cnblogs.com/wanggang123/p/9977019.htmlMPEG-2 TS是一种容器格式,并不是指TS流中的视频编码为MPEG-2格式...转载 2021-08-31 19:52:44 · 117 阅读 · 0 评论 -
SIP协议详解(二)
11查询能力SIP方法OPTIONS允许一个UA来查询另外一个UA或者proxy服务器的能力。这个提供个客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等等。这些都不用”ringing”对方。比如,在客户端试图在INVITE请求头中增加一个请求字段选项的时候,它并不知道对方UAS能否支持这个选项,它就可以用OPTIONS来查询一下UAS,通过检查OPTIONS返回的Supported头域,就可以知道是否支持这个选项。所有的UA都必须支持OPTIONS方法。OPTIONS请求的目标.翻译 2021-08-27 18:48:05 · 2520 阅读 · 0 评论 -
SIP协议详解(一)
1、SIP协议介绍Internet的许多应用都需要建立和管理一个会话,会话在这里的含义是在参与者之间的数据的交换。由于考虑到参与者的实际情况,这些应用的实现往往是很复杂的:参与者可能是在代理间移动,他们可能可以有多个名字,他们中间的通讯可能是基于不同的媒介(比如文本,多媒体,视频,音频等)-有时候是多种媒介一起交互。人们创造了无数种通讯协议应用于实时的多媒体会话数据比如声音,影像,或者翻译 2016-02-26 12:55:52 · 35368 阅读 · 0 评论 -
sip注册示例
这里给出一个sip注册的示例,其中平台注册的密码为12345678,供相关开发参考。REGISTER sip:34020000002000000001@192.168.88.119 SIP/2.0Via: SIP/2.0/UDP 192.168.88.173:45411;rport=45411;branch=z9hG4bK73649;received=192.168.88.173Max-Forwards: 70To: <sip:34020000001320000001@192.168.88原创 2021-08-25 12:15:32 · 1512 阅读 · 0 评论 -
VoLTE:别把Cancel与BYE搞混了!
在VOLTE通信流程的SIP会话中经常会遇到CANCEL消息,它与结束通话中的BYE有什么区别呢?首先,我们来回顾一下SIP的基本呼叫流程;Andrew给Jennifer打电话,通话若干分钟后Jennifer挂机结束通话,这是一个典型的通话过程(图1)。本次通话从INVITE开始,由BYE结束(收到最终响应200 OK)。Figure 1 VOLTE通话主要流程在另一个场景Andrew呼叫Jennifer时,Jennifer正在忙着做饭不能接听电话;Andrew本可等待一段时间,呼叫转移到语转载 2021-07-04 19:04:45 · 2390 阅读 · 0 评论 -
how to build ffmpeg in windows
FFMPEG Libraries are built using the following configure optionsx64: ./configure --enable-shared --disable-encoders --disable-decoders --enable-decoder=vp9 --toolchain=msvcwin32: ./configure --enable-shared --disable-encoders --disable-decoders --enab..原创 2021-05-11 01:32:26 · 162 阅读 · 0 评论 -
Ubuntu18.04 install Vulkan SDK
Vulkan SDK can be downloaded from https://vulkan.lunarg.com/sdk/home. Alternatively, itcan be installed by using the distribution's package manager.please refer to:https://vulkan.lunarg.com/sdk/homehttps://vulkan.lunarg.com/doc/sdk/1.2.176.1/linux/g原创 2021-05-10 02:21:27 · 1524 阅读 · 0 评论 -
linux下使用gettimeofday获取当前时间的注意事项
有时候需要打印代码执行到某处的时间,或者需要计算程序执行的时间差。这时会用到gettimeofday函数,它可以返回自1970-01-01 00:00:00到现在经历的秒数,该函数定义在中,int gettimeofday(struct timeval *, struct timezone *);使用到两个结构体,struct timeval {time_t tv_sec;原创 2017-04-01 18:32:44 · 36090 阅读 · 1 评论 -
What are SIP methods / Requests and responses?
SIP uses Methods / Requests and corresponding Responses to communicate and establish a call session.SIP requestsThere are fourteen SIP Request methods of which the first six are the most basic request / method types: INVITE= Establishes a session.转载 2021-04-14 19:02:07 · 99 阅读 · 0 评论 -
Video Encode and Decode GPU Support Matrix
如果想了解你手头的N卡支持的视频编码和解码类型,请看这里:https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new这里也转一下,以消费者级别的GeForce系列为例,编码性能列表:BOARD FAMILY CHIP NVENC Generation Desktop/ Mobile #OF CHIPS #OF NVENC /CHI...原创 2021-03-02 23:29:45 · 2959 阅读 · 0 评论 -
当前主流的视频编码类型
在视频编码领域,先后诞生了不同视频编码标准,视频编码的目标是提高压缩率,便于存储和传输,算法的发展还没有到达理论上的尽头,当下还在不断演进。目前存在的主要视频编码标准有:MPEG-1、MPEG-2、VC-1、VP8、VP9、H.264、H.265、AV1。...原创 2021-03-02 22:44:09 · 1373 阅读 · 0 评论 -
vlc使用md5插件
请看vlc sdk中的\vlc-3.0.6\sdk\include\vlc\plugins\vlc_md5.h中的源码:/***************************************************************************** * vlc_md5.h: MD5 hash ***************************************************************************** * Copyright原创 2021-01-25 21:11:48 · 127 阅读 · 0 评论 -
obs在ubuntu18.04下的编译
由于要用到obs的某些功能,在linux下编译了一下,其实这篇文档足够了,https://github.com/obsproject/obs-studio/wiki/Install-Instructions#debian-based-build-directions照步骤走完,基本上能够成功。但我碰到一个问题,打不开obs,于是用文件路径打开:/usr/bin/obs结果报错:obs: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Q原创 2021-01-22 02:28:51 · 988 阅读 · 1 评论 -
ffmpeg提取mp4文件中的音频,保存为wav文件
如题,一个命令行即可:ffmpeg -i 123.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav 123.wav这样就生成了一个wav文件,指定其为16位、单声道、采样率为16k。其中-f wav 是必不可少的,没了它,生成的就是pcm数据,而非wav,这里尤其要注意。如果只想获得原始的pcm文件,可以用下面的命令:ffmpeg -i 123.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 1.原创 2021-01-18 16:42:53 · 8056 阅读 · 0 评论 -
修改mp4文件的moov atom,使其位置在文件的前面
mp4文件录制的时候,先写mdat atom对应的音视频数据,最后在尾部写上moov atom对应的一些索引信息。一些软件在录制后会再处理一次,把moov atom的位置搬到文件的前面,而把mdat atom的位置搬到文件的最后。遗憾的是,用ffmpeg转码或转封装后,默认都没有这样的过程,结果就可能导致在网页端播放的时候出来慢(有些播放器不会跳转读取文件,只是顺序下载整个文件的,就有这种问题)。好在可以在生成mp4文件前,使用一个选项 -movflags faststart 解决这种问题,如果moov不位原创 2021-01-09 20:39:41 · 2736 阅读 · 0 评论 -
使用ffmpeg从视频中截图
从一个视频里的多少秒处截取一幅画面,将其保存为jpg,恐怕这是很平常不过的需求。那么用ffmpeg命令行如何实现呢?ffmpeg -ss 1 -i 123.mp4 -vframes 1 123.jpg以上这条命令从123.mp4文件的第一秒的位置截取一幅画面,保存为123.jpg。有时候希望保存的图片所占空间更小一些,这时候就要调整参数选项-qscale:v,比如下面的命令与上面的区别就是将图片质量调整的低一点,因而图片所占空间的大小也有所下降。ffmpeg -ss 1 -i 123.mp4 -原创 2021-01-09 20:28:52 · 843 阅读 · 0 评论 -
linux安装atomicparsley
atomicparsley是mp文件解析工具,mp4文件是有一个个atom构成,atom之间还可能嵌套,就如同树形结构。parsley西芹,喻为parse之意。在debian下安装,命令:apt install atomicparsley查看mp4文件的的atom构成:AtomicParsley 123.mp4 -T在sourceforge上有源码,下面这个源码是MacOS平台的,有兴趣可以自行研究。https://github.com/wez/atomicparsley...原创 2021-01-09 15:54:36 · 379 阅读 · 1 评论 -
浅谈ffmpeg的avfilter中的color
ffmpeg的源码,libavfilter/allfilters.c中有一行:REGISTER_FILTER(COLOR, color, vsrc);注册了一个filter要使用好ffmpeg工具,对它的滤镜熟练使用是必不可少的。------未完待续原创 2021-01-07 20:15:14 · 381 阅读 · 0 评论 -
针对Android MediaCodec解码延时问题的替代解决方案
如题,本人在jni层实现了avc/hevc的解码,避免了在java上层调用系统的MediaCodec解码出现的延时问题,完美支持1080P,4K(具体看手机性能),欢迎大家在此讨论相关的技术。原创 2020-12-23 16:18:26 · 1475 阅读 · 4 评论 -
编译owt-server时遇到的一个错误
root@VM-0-8-ubuntu:~/owt-server-4.3# ./scripts/build.js -t mcu --check/root/owt-server-4.3/build/libdeps/build/lib/pkgconfig:/root/owt-server-4.3/build/libdeps/build/lib64/pkgconfig:Following targets will be built: video-mixer-sw video-transcoder-sw .原创 2020-12-09 14:42:48 · 497 阅读 · 0 评论 -
SIP 响应状态码 对照 详解
SIP应答消息状态码与功能类型 状态码 状态说明临时应答(1XX) 100 Trying 正在处理中180 Ringing 振铃181 call being forwarded呼叫正在前向182 queue 排队183 session progress 会话进行会话成功(2XX) 200 OK 会话成功重定向(3XX) 300 multiple 多重选择301 moved permanently 永久移动302 moved temporaily 临时移动305 use prox.转载 2020-12-05 01:04:26 · 6527 阅读 · 0 评论 -
使用Windows自带的curl遇到的一个问题
下面这个curl命令是post一个json到web服务端:curl "http://localhost:8080/api/authenticate" -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin"}'这个使用linux下的curl运行是没有问题的,但使用Windows自带的curl运行时,经过抓包分析发现,它会改变发送的内容,比如这里想要发送一个json,它却自作聪明原创 2020-12-04 18:05:15 · 2238 阅读 · 0 评论 -
golang中的base64编码/解码
这篇文章又是一篇用来填坑的。golang中用来进行base64编码/解码通常使用:base64.StdEncoding.EncodeToStringbase64.StdEncoding.DecodeStringbase64编码的规则是3个字节变为4个字节,尾部可能会出现=号填充。可有时候不希望有多余的=号,还有解码的时候如果不是4个字节的倍数,就会失败,那么用下面的两个接口就可以了。base64.RawStdEncoding.EncodeToStringbase64.RawStd原创 2020-11-30 19:19:12 · 7336 阅读 · 0 评论 -
关于pthread中pthread_join函数和pthread_detach函数的使用
A thread that is created in a joinable state should eventually either be joined using pthread_join or detached using pthread_detach.pthread创建的线程结束后资源释放的问题,需要使用pthread_join函数或者pthread_detach函数。因为The default setting of the detach state attribute in a new原创 2020-11-22 00:59:29 · 268 阅读 · 2 评论 -
网页websocket一个经典的例子
这个例子来自于\tomcat\webapps\examples\websocket\echo.xhtml源码如下:<?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with原创 2020-11-16 12:58:07 · 508 阅读 · 0 评论