- 博客(23)
- 资源 (7)
- 收藏
- 关注
原创 Cesium使用视频创建自定义纹理
本文参考了cesium的自定义texture实现,在此基础上做了修改,引入html5的视频进行渲染,实测比使用视频作为材质效率略有优化,且更具灵活性,利于对视频进行二次处理,废话不多说,代码如下:var PrimitiveTexture= ( function () { var vertexShader; var fragmentShader; var materialShad...
2020-04-23 13:20:53 3383
原创 rtsp流转为fmp4并由WebSocket网关转发,及对应js播放器
web端是无法直接播放rtsp流的,目前常用的解决方案是如jsffmpeg、flv.js等。这些方案都是要推送流到服务端,之后才能在web上播放视频,相对比较麻烦。我采用websocket结合mse的方式,实现了一个websocket网关,及其对应的js播放器,在这里做下说明,具体代码参考github上我的源码。这套方案的原理是,ws网关在拉到rtsp流后,取得mime,将其发送给web端,然...
2020-04-14 14:12:29 4187 8
原创 ffmpeg实现动态调整字幕和水印位置
紧接上一篇文章,字幕内容的修改可以通过av_opt_set修改AVFilterContext的priv来实现,那么字幕和水印的位置是否也可以这样呢?打开vf_drawtext.c和vf_overlayer.c这两个文件,发现它们都有名为"x"和"y"的设置,然而当我采用av_opt_set将这两个值设置之后,图像位置却没有发生改变,仔细阅读源码,可以看到这两个滤镜都有这样几个变量:cha...
2019-01-15 14:12:14 7767 3
原创 ffmpeg实现动态调整字幕内容
最近在做一个项目,需要在视频上叠加图片和文字,而且是要能根据外部接口调整文字的内容,以及控制图片的位置。水印和字幕当然还是用ffmpeg的滤镜来实现了,变换文字内容也可以用drawtext的textfile来实现,但涉及到实时控制显示位置,就干脆一起使用改变滤镜参数的方法实现了。这篇文章里仅谈谈怎么修改字幕的文字内容,动态调整字幕和水印位置需要修改ffmpeg源码,我会在下一篇文章中讲如何实现。...
2019-01-15 13:46:24 6725 3
原创 ffmpeg源码修改以适应海康摄像头rtsp流的aac音频
最近在测试通过rtsp采集海康的摄像头,以前海康的摄像头采用g711音频,没出现什么问题,这次的设备升级成了aac音频,结果使用ffmpeg出现音频格式不能识别的问题,报什么Audio object type 0的错误,查看发现是解码器的objecttype成了0造成的,于是查看源码。跟踪发现打开rtsp时发来的sdp信息中音频的信息如下:a=rtpmap:104 mpeg4-generi
2015-07-14 15:01:57 8063 3
原创 ffmpeg修改flv打包aac声道部分
ffmpeg默认的flv打包输出aac的音频是44100的采样率、双声道、16位数据格式,但flv格式是可以支持其它参数的,因此需要修改flvenc.c在get_audio_flags函数中,有这段代码:if (enc->codec_id == AV_CODEC_ID_AAC) // specs force these parameters return FLV_CO
2015-04-18 14:55:30 2897
原创 ffmpeg修改源码添加flv对pcm的打包支持
flv支持的音频包含pcm_mulaw和pcm_alaw但使用ffmpeg打包输出的文件使用解码器打开发现无法真确得到音频的格式信息,分析源码发现除了AAC、H264、MPEG4之外,其余的格式信息未被写入到流中,修改flvenc.c,找到flv_write_header函数,在函数最后写格式信息部分修改如下: for (i = 0; i nb_streams; i++) {
2015-04-18 14:54:32 2896
原创 ffmpeg添加MP4的pcm音频支持
ffmpeg中对MP4的打包处理是在movenc.c中,在实际打包过程中发现除了mov类型外,其它类型如vob等均无法生成音频的声道信息,经过分析发现在mov_write_audio_tag函数的最后有如下代码 if (track->mode == MODE_MOV && track->enc->codec_type == AVMEDIA_TYPE_AUDIO) mov_
2015-04-18 14:54:01 9636 10
原创 ffmpeg添加mpeg ts对pcm的支持
在mpegtsenc.c的mpegts_write_pmt函数中,switch(st->codec->codec_id)的case中,添加如下代码 case AV_CODEC_ID_PCM_MULAW: stream_type = 0x91; break; case AV_CODEC_ID_
2015-04-18 14:51:39 6871 3
原创 ffmpeg添加mpeg ps流的pcm的编码支持
ffmpeg的mpegenc.c中,缺少了psm头的写入,而ps流的封包应当是ps,即pes在写入sys头之后写pes之前应当先写入psm头,因此mpegenc.c中需要增加写入psm头的函数,如下:static uint8_t get_stream_type(int stream_codec_id){ uint8_t res = 0;
2015-04-18 14:51:29 3541 1
原创 ffmpeg添加mpeg ps流的pcm的解码支持
ffmpeg原本不支持mpeg ps流,原因有两个。首先在编码时,ffmpeg没有在流中写入psm头;其次,在解码时,只在读文件头的时候判断了流的类型,而ps流中,流类型是在psm头中的,这样ffmpeg会读不到流类型。 要解决读不到媒体类型的问题,需要在mpeg.c函数中mpegps_read_packet函数中做修改,该函数是读取ps包的,如果每个ps包都有psm头,那么到此时流类型
2015-04-18 14:48:12 5949 5
原创 linux下odbc的安装配置和wxODBC的开发
p { margin-bottom: 0.21cm; }安装linux下的ODBC有两种:unixODBC和iodbc,由于wxGTK提供的是对iodbc的支持,因此在安装wxGTK前需要先安装iodbc。在后面安装freetds时,依据环境和依赖关系可能会将unixODBC也装上,iodbc和unixODBC修改的ODBC配置文件都是/etc/odbc.ini和/etc/odbcinst.ini,这两个都是ODBC驱动
2011-03-15 15:12:00 4562 1
原创 windows下codeblocks的wxsmith所需wxGTK的安装
<br />windows下的codeblocks安装完后已经有mingw,但没有wxGTK,还不能使用codeblocks里的wxsmith,因此需要安装wxGTK<br />首先修改windows的环境变量,增加以下内容<br />PATH : MinGW安装目录/bin; <br />LIBRARY_PATH :MinGW安装目录/lib<br />C_INCLUDE_PATH :MinGW安装目录/include<br />CPLUS_INCLUDE_PATH :MinGW安装目录/include/
2010-09-02 16:00:00 1912
原创 linux下codeblocks及wxGTK安装
<br />一般情况下,codeblocks是可以直接使用yum或RPM等安装方式的,不过在有些特殊情况下无法使用yum,RPM安装的依赖关系难以解决,这是就得用编译安装了。<br />codeblocks安装前必须安装wxGTK,我在这里用的版本是2.8.11,不过一般来说2.8的版本就可以了,codeblocks的版本是8.02,系统是红帽子4.7<br />将下载的wxGTK-2.8.1.tar.bz2 拷贝到/tmp<br />然后执行以下命令<br />tar jxf wxGTK-2.8.1.ta
2010-09-02 13:35:00 8903 3
原创 使用数组实现oralce批量数据提交
数组及对象定义如下:create or replace type t_test as object (value number(9));create or replace type t_testarr as table of t_test;存储过程:procedure pro_test(testval in t_testarr )PL/SQL develop下:decl
2009-11-16 16:53:00 988
原创 ORACLE事务的原子性
ORACLE的事务与SQL server以及sybase有很大的不同,举个例子,假如表a有以下记录:field11304 其中对field1字段的约束条件是field1>0,那么当我们执行update a set field1=field1-1这条SQL语句时,将会出现一个错误,因为其中的第三条记录的field1等于0,减去1之后就会违反约束条件。 那么在SQL server或
2007-10-21 10:12:00 4156
原创 oracle的包、用户数据类型与内存表的实现
最近在做的一个项目中,需要从UDP接收数据,数据记录了同样的点不同时间的值,然后每分钟定时将接收到的值更新到数据库中,但是接收数据的时间虽然在一分钟左右,但时间并不准确,如果UDP没有接收到数据,也必须将上次收到的数据再次提交给数据库,因此将接收数据和定时更新分开,接收数据和提交数据互不干涉。然而这么做问题来了,整个系统是建立在ORACLE库上的,而ORACLE是没有内存表的,如果
2007-10-12 16:24:00 1166
原创 ORACLE的多版本与读一致性
先来看看这段代码: while s in (select * from table1) loop insert into table1 values(s.field1,s.field2,s.field3,s.field4,s.field5); end loop; 如果是SQL server的开发人员,看到这段代码,肯定会摇头:这段代码有问题,这样递归插入,会一直到表爆掉为止;而OR
2007-10-10 15:35:00 2523
原创 ORACLE绑定变量的使用
在ORACLE中,使用绑定变量,可以降低硬解析,通常可以提高系统的性能(注意,是通常,不是任何情况下)。 以表tabletest为例,我们来看看如何使用绑定变量,tabletest的表结构为 field1 number(10) field2 number(10) field3 number(10) f
2007-10-09 13:36:00 1494
原创 QT4 designer生成的头文件的优化
前面的文章中举了一个用QT Designer作QT程序界面设计的例子,但使用UIC转出来的头文件代码比较凌乱,看起来太累,如果做的是稍复杂一点的界面程序,放一段时间自己再来看,怕是要花不少时间,最好是对这个头文件做一些优化。下面以上篇文章的例子来说明一下如何优化。 首先看看main.cpp中调用头文件中设计好的窗口的过程: QWidget w;
2007-10-06 20:35:00 1782
原创 QT4designer的使用
直接使用代码来直接编写GUI无疑是非常痛苦的,好在QT提供了界面开发工具:QTdesigner。在QT的安装目录下的bin目录中,找到designer.exe,运行后就可以设计一个你所需要的QT程序界面。 选择菜单file->new form,就会出现一个选择要创建表单类型的对话框,选择widget,然后点create按钮,就会出现一个设计状态的表单。在左边的wid
2007-10-03 20:43:00 2650
原创 windows下Dev-Cpp与QT4开发环境的搭建
我下载的Dev-Cpp版本为4.9.9.2,安装目录为C:/Dev-Cpp,安装过程中按提示选择即可。QT版本为4.3.1,下载的文件为qt-win-opensource-src-4.3.1.zip,也就是需要编译的版本,解压到C:/QT/4.3.1。 在windows的环境变量中增加如下变量 PATH=C:/qt/4.3.1/bin;C:/De
2007-10-01 22:29:00 2791 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人