自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

转载 音频基础资料整理

本文目的是想弄清楚数字信号如何转换成模拟信号,以及在音频里,解码后为什么一个数字代表的意义。1.数字信号转成模拟信号。先从简单的说sinx,这个是一个三角函数。当现实生活我们模拟sinx这个波形时候,那就出现我们所说的模拟信号。这是连续的,在时间上非离散的。而数字信号是模拟信号的一个“快照”,即在隔一个固定时间段从离散信号中拍下这个快照,以便网络传输,压缩,以及我们现实上的任何操作。这里涉及的技术

2017-09-25 14:40:26 593

原创 ffmpeg 奇葩问题2

前段时间一直搞固定码率的问题,在这里不得不吐槽国内的资料。在固定码率那里如果只是根据网上那种将bit_rate, rc_max_rate, rc_min_rate, 以及rc_buffer_size设置到特定的码率下,在ts的模式下,你会发现还是vbr的编码而不是网上说的cbr。这个是第一个坑,大部分人转载了那篇不知哪里来的文章,而且没有验证或者是特定格式的问题,导致了不是cbr的出现,

2017-09-19 14:58:35 893

原创 ffmpeg调试

利用gdb调试ffmpeg如下:gdb ffmpeg_gset args 命令参数剩下的是gdb调试。

2017-09-12 14:47:41 477

原创 git 信息

记录初始化git。1. ssh-keygen -t rsa -C "邮箱"2.git init3.git config --global user.name "zoring"4. git config --global user.email "邮箱"5. cd ~/.ssh6.cat id_rsa.pub  复制到你的git就可以了。

2017-08-28 14:56:28 338

原创 奇思妙想

这篇文章的目的只是将工作里面的一些想法写下来,以供以后研究方向。人的声音我们可以辨别,无论是经过了电子记录还是现实。那么为什么声音复杂的环境下我们不能分辨了。我在想能不能提取某人的音色,或者音的某种东西,以此为依据,将一个混音的数据里面,以那个人的音为模型,进行重构,后续待续。

2017-08-17 17:33:06 314

原创 记录FFmpeg遇见的坑

利用av_frame_clone可以将一个frame clone后,其实也只是v_frame_alloc()+av_frame_ref()。但是有时候在音频帧的clone后不知道为什么会导致了返回了NULL。这个时候就懵逼了。这个debug进去后发现了一个问题,就是channel_layout没有设置导致的。这个因为是我手动设置解码器,所以忘记弄了,这个一般直接读取的话没有那个错误。

2017-07-13 17:37:31 3653 1

原创 关于FFmpeg 利用videotoolbox硬编

在https://trac.ffmpeg.org/wiki/HWAccelIntro介绍下,我们知道ffmpeg不单单支持videotoolbox的硬解,还加上了硬编的能力。在这里介绍一下videotoolbox的硬编,首先mac在编译ffmpeg时候你要加上--enable-videotoolbox,编译后就可以用videotoolbox的硬编了。在使用时候跟普通的软件编译没有什么大不同,这

2017-06-14 16:24:16 7497 1

原创 利用addr2line调试崩溃的bug

在linux下,程序莫名奇妙崩溃,而且不是固定的崩溃,这种情况,你肯定很捉急。这里你可以利用addr2line定位到程序崩溃的地点。首先你先到/var/log/syslog,这里log不一定是这个文件,有可能时间久了,压缩了。然后打开它,你会发现general protection ip:43917e sp:7fa0ca7a3cd0 error:0 in 。 ip 指是编码器的编译后命令addre

2017-04-26 09:23:45 1841

原创 合成视频遇见的坑

打算弄个合成片头的软件,根据想法是打算只将片头按照正片的编码格式编码后写入新的视频,那样只需要重编片头部分,不需要重编正片。但发现如果直接复制正片的视频编码器信息的话有一个问题出现了,那就是播放片头后,正片没有办法播放。这是怎么回事呢?而且不是全部,只是某些视频。初步怀疑是SPS 和 PPS, 因为合成的片头跟正片不是同一个sps,所以导致这种情况。接着我在每个pkt前都加上了一个sps和pp

2017-03-16 14:38:55 880

原创 swr_convert音频重采样成AV_SAMPLE_FMT_FLTP

在网上很多的教程,利用swr_convert来进行音频的重采样,但有时候我们发现有些转换成AV_SAMPLE_FMT_S16是没有问题的,但一旦是AV_SAMPLE_FMT_FLTP 时候,程序直接崩溃,这是因为网上有些教程里那个buffer是自定义一个连续的片段,然后直接丢给swr_convert,但这样在s16上是没有问题,s16上只占用了frame->data[0],但一旦是AV_SAMPL

2017-03-14 09:07:24 4560 2

原创 Opencv的Mat多图像合成坑

将ffmpeg解码后得到的YUV数据进行画面合成时候,你发现除了avfifter这个万能胶水在多个不是同一个timebase或者更准确说是帧率不同时候,你会发现效率慢得让人难以接受外,还有时候不能成功。这时我们不得不重新认识一下,要自己手动合并,这里我用了opencv这个库。一切进行十分顺利,直到合成后发现画面的UV数据完全错误,这时因为用了Mat的Rect这个共享时候没有重定向对的地方,一般

2017-02-13 16:51:15 1227

原创 ffmpeg工作遇见坑

在以往的output里一直复制input的condeccontext,今天沿用代码时候发现视频播放时候有很大部分缺失,查看一下发现output的timebase比起input的timebase大很多,这不正常。反复对比之前跟现在的差别,发现了我在input的时候多了一个打开解码器的过程,这个导致了我output的timebase不同。这次Mark下来防止以后再遇见。在重编码视频时候我发现视

2017-01-12 16:34:53 2027

原创 SDL2嵌入到Qwidget中

在网上看到许多人用qt做播放器只用了SDL2的音频部分,然后就图片刷新。这种方案好处是简单,坏处是没有利用到sdl2 的硬件加速。搜了一下发现大多数没有这方面的记录,所以就写下这篇文章,直接上代码吧。SDL_Window* sdlWindow = SDL_CreateWindowFrom((void*) (w.GetQWidget()->winId()));这个就是利用SDL_Crea

2016-12-20 13:36:21 3737 3

原创 windows下qt编译ffmpeg

这里用到工具qt自带的mingw+msys下载msys后,参考http://blog.csdn.net/caoshangpa/article/details/50947926就可以编译好ffmpeg,这里说一下,你也可以自己带上x264等工具编译一次,但有个坑是qt5.6里,我这边用widgets Application时就出现了ffmpeg的链接不上,不知道是我姿势不好还是该版本

2016-12-15 15:34:04 2705

转载 Mp4格式

FFmpeg使用手册 - MP4的格式解析视频文件转MP4在互联网中常见的格式中,跨平台最好的,应该是MP4文件,因为MP4文件既可以在PC平台的Flashplayer中播放,又可以在移动平台的Android,IOS等平台中进行播放,而且是默认播放,那么就可以理解为MP4为最常见的多媒体文件格式,所以重点介绍MP4封装,说到MP4封装,下面简单介绍一下MP4封装的基本格式.3.1.

2016-11-25 15:12:02 1270 1

原创 利用valgrind 查找内存泄漏

valgrind --leak-check=full --tool=memcheck --show-reachable=yes --track-origins=yes ./TraningClass > /ncast/3.txt 2>&1在上面的命令中> /ncast/3.txt 2>&1 将输出重定向回特定的文件。

2016-11-22 08:45:58 1379

原创 使用 union获取成员函数的地址

如题,如果我们想在C++上获取成员函数的地址(这里指的是非静态的成员函数),喜闻乐见地发现,原来&Class::Funtion是不行的。这里的环境是VS2015 ,于是上网找一下资料,发现有人利用了unio + 成员函数指针达到了获取成员函数地址,先上代码。#include "stdafx.h"#include "TestB.h"#include using namespace std;t

2016-11-17 10:56:00 1094

原创 Linux 简议简单修改配置解决高频率的服务器写操作

在做直播项目时候,发现录制20路的时候会突然卡一下。利用iotop和iostat等工具查到nginx一直在写ts,而这个是项目要求的特色,没有办法再优化。但发现在每隔几秒钟就会出现一次高峰值的io操作,而平时的io并不频繁,而cpu的占用明显是十分足够的。这就说明操作系统优化的原因,每隔一段时间才把脏数据写回硬盘。知道原因就可以将配置Linux的系统vm的配置,将其进行优化,具体可以参考htt

2016-10-31 14:20:00 428

原创 关于Hls导致了wa的使用高

Nginx开启了Hls后top后发现wa的使用,使用iotop发现nginx一直在写io,导致了wa的高,从而导致了cpu一直在等待io。更坑的是多路的情况下才出现这个问题,一直以为自己的程序cpu处理不过来导致的。最后不断优化,还是出现这个问题。还是使用top发现了wa一直高,而正是wa的高导致了 load average一直居高不下。使用iostat可以直观看到io的瓶颈问题,最后就是靠lso

2016-10-24 09:56:09 599

原创 多线程的坑,不要用sleep

找了一周的bug,终于发现了是哪里导致了问题出现。最开始40路推流时候一切的正常,但随着长时间的工作后发现画面变卡了,打印相关信息,发现buf偶尔会多起来。开始了漫长了调试,一开始以为线程数量不够,然后增加了几个线程。但是问题还是没有解决,于是我将sleep 改小了。随之而来的是cpu的上涨,但是问题还是没有解决。最后我将sleep换成了锁的机制。发现问题好很多,虽然还是会出现,不过能够随着时

2016-10-14 16:22:27 21312 3

原创 多线程下队列的坑

在多线程下,我们一般认为push和pop 2个线程是没有冲突的。但事实上如果我们在判断size为不为空而去判断pop时就要注意一个问题。将push和pop上锁了,因为有可能size不再是正确的size,从而导致pop出来的是错误的。有时候开多更多线程还不如更小的线程去做更多的事情,当因为线程的数量多起来,而CPU的占用率居高不下时候,就要看线程最后是去干嘛了,是否按照想的工作。

2016-10-12 16:52:40 690

原创 关于Windows media播放时AAC没有声音ffmpeg

在做项目时候,遇到不小坑,主要是国内的资料太少以及英语水平勉强,所以才让自己的问题一直靠猜想以及验证中,浪费不小时间。这里这个问题一开始我怀疑是没有加上adts头导致的。但最后发现不是这个问题,还有media 的播放格式也有严格的控制,这里可以到官网看看。 我这边是因为codec里有一个profile属性,只有在FF_PROFILE_AAC_LOW的情况下,media才可以在网页上播放,不然会在

2016-09-07 15:06:36 2504

转载 gdb结合coredump定位崩溃进程

Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位。 如何产生core file?我们可以使用ulimit这条命令对core file文件的大小进行设定。一般默认情况下,core file的大小被设置为了0,这样系统就不dump出core file了。这时用如下命令进行设置:ulimit -c unl

2016-08-18 13:29:31 2192

原创 录制播放后时间不对问题

这次项目里,我发现我录制的视频里有个问题是关于那个播放时候十分快,当时以为时间戳不同步导致的,但10几秒的视频最后变成2分钟,这个问题有可能是因为把packet封装的时候将视频和音频混了导致的,你可以打印packet的streamid和视频的id看看。在此记录一下自己犯了这个问题。

2016-08-17 08:34:20 2882 1

原创 记录这次空指针的原因

当初因为要将输入和输出分离,从而以为将那些代码直接带走就可以。但在这发生了空指针的现象,十分让人恼火的是这个错误是时不时才出现,导致不知哪里出现这个问题。最后才发现是当时做了一个断线重连的机制,导致当初的对象删除,从而使指针指向空的对象,这个坑因为当时后面加上需求,忽略了这种情况。 当初为了保护资源,只返回个限定的指针,因为当初是在整个对象之内,所以就算断线重连也不会发生这种情况,在此写下,以备以

2016-08-16 15:44:28 400

原创 关于Ubuntu service的一些问题

在部署个人的service,要求将开机的恢复模式禁用,这里就要到/etc/default/grub 里修改,将GRUB_TIMEOUT 改为0,这个是不会出现选择画面,将【#GRUB_DISABLE_RECOVERY=”true”】高亮行前的#去掉(#代表注释)。然后update-grub,再重启,这样就禁用了恢复模式了。在这里mark一下,还要解决一个开机后磁盘检测时候,发现错误要自动修复的问题。

2016-08-09 15:14:19 541

原创 文章标题

在项目时候一直使用av_free_packet,然后因为项目的AVPacket是使用了动态申请,一直使用这个以为可以delete,但事实上,av_free_packet只是释放掉那个包里面的数据,而整个结构没有delete,从而导致了内存泄漏,在此写下已给后面的人一个提示。

2016-07-28 09:37:12 364

原创 ffmpeg 利用AVFilter音频重采样

前段时间一直在搞pcm转aac ,一开始打算直接来一个frame就编码,但发现因为pcm音频包每个packet是320个字节,AAC每个Packet是1024个字节。所以要加入个filter来转换。不过你也可以自己弄个buffer,等包够1024再编码,不建议这样做。如果只是想研究就可以,因为pts那些很烦,很容易导致一些奇怪的问题出现。在此可以参考http://www.cnblogs.com/wa

2016-07-15 13:47:40 2504

原创 时间戳的累积误差

因为网络抖动或者有些摄像机的原因导致时间戳的错误,这时要手动修复。

2016-07-07 15:09:34 881

原创 关于合拼视频和音频

在合拼不同的视频和音频时候,我们需要2条流,一条音频,一条视频。但合拼时候我们将其按时间戳排序,然后做了个缓冲。但问题就在缓冲这边了,我们设置缓冲时播放要多开一条线程,不然就会造成了播放的卡顿,或者掉包。原因是在播放时候,我们也要对比时间戳,如果时间戳没有达到显示的时候,就要让其sleep,然后等时间戳到时再显示,感觉可以利用sleep时间再去缓冲,但水平有限,这个可能要以后才能做到。而播放时

2016-07-07 14:28:30 508

原创 ffmpeg初始化文件头信息时

if(ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)           o_video_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;要将其头设上flags,不然会导致AVStream的priv_pts不存在。还有X264编码时,你会发现总是少了前面几秒的,那个要在循环体结束后重新再接。

2016-06-24 16:18:44 1412

原创 关于H264编码的问题

在解码后再编码时发生了Application provided invalid, non monotonically increasing dts to muxer in stream 原因是解码后我们得到一个AVFrame ,这里的AVFrame的pkt_pts记录了AvPacket 的pts,然后我们调用avcodec_encode_video2时,要知道AVFrame的pts

2016-06-24 11:43:28 972

原创 ffmpeg莫名其妙的问题

AVFormatContext* ifcon =NULL,这里一定要将其设置为NULL,不然会导致一些奇怪的问题出现。

2016-06-23 14:37:14 413

原创 欢迎使用CSDN-markdown编辑器

C++简单多线程c++多线程里面除了指定函数开始新线程外,也可以用可调用(callable)类型构造,将带有函数调用符类型的实例传入std::thread类中,替换默认的构造函数。代码如下: // test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <thread>using namespa

2016-06-15 14:04:57 352

空空如也

空空如也

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

TA关注的人

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