- 博客(30)
- 资源 (17)
- 收藏
- 关注
原创 音视频同步专题
<br />1 一个音视频同步算法。情况是这样的,我们同步网络把音频/视频分开传送到接收端,现在的问题关键问题的如果对这股流进行同步播放。<br />我现在的算法是这样的:<br />在发送方:<br />对于相同时刻的音频/视频帧,打上相同的时间戳(系统时间)<br />接收方:<br />保存两个队列,audio/video分别用来存放还未播放的音频和视频<br />1。当每接收到音频帧的时候,遍历此时的video队列,将此音频帧的时间戳跟每个视频帧的时间戳进行比较:<br />1)如果音频帧的时间在这
2010-09-29 15:48:00 1323
原创 TCP/IP下的组播编程基础
<br /> <br />本文讨论基于TCP/IP下的组播编程基础。所有的例子都可以Windows下台运行。<br />本文不会涉及到组播协议的实现,只是讨论组播编程需要的环境及API函数。关于组播的实现和需要的协议笔者将会另写文章讨论。组播描述<br /> 组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传送。对其形象的比喻就是类似于广播电台和电视台节目的发送。电台或电视台向特定频道发送他们的节目,而接收者可以
2010-09-29 11:29:00 2763
原创 Linux网络编程一步一步学-UDP组播
<br />组播客户端代码如下:<br />#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFLEN 255/**********************************************************************filena
2010-09-29 11:26:00 7452
原创 组播应用与编程
<br /><br />组播技术被认为是WWW技术推广之后出现的最激动人心的网络技术之一。1992年出现支<br />持IP组播的Mbone(组播主干网)和Mbone桌面工具;1993-1996年IP Multicast成为业界关注<br />的焦点,然而因发展条件不成熟使得IP组播只为业界所关注;进入1999年以来,IP组播具备<br />了发展的三个关键条件:支持组播的路由协议;基于开放标准的可测试管理协议;因商业发<br />展机遇而进入高速发展阶段。又一次掀起了组播实践的高潮,下面将有关组播应用作简
2010-09-29 11:24:00 3228
转载 VC中怎样修改生成的EXE文件的图标
不知道的话确实是个问题,VS中根本找不到修改的地方,综合网友们的说法,无外乎三种:1. 直接修改IDR_MAINFRAME图标,瞒天过海!2. 插入新图标,删掉IDR_MAINFRAME图标,然后将新图标的ID改为IDR_MAINFRAME,斩草除根!一劳永逸!不留后患!3. 最简单的方法,就是修改resource.h文件中图标的序号,将你想做为EXE文件图标的那个序号改到最小,如: #define IDR_MAINFRAME 128 #define IDR_
2010-09-29 11:08:00 1496
转载 va_g729a音频压缩的设置
<br />要使用va_g729a来进行音频压缩,<br />使用WaveInOpen来录音时,对格式的设置必须是这样,才可以压缩和解压,否侧解压出来的是噪音<br /><br />wfxFormat.wFormatTag:=WAVE_FORMAT_PCM;wfxFormat.nChannels:=1;wfxFormat.nSamplesPerSec:=8000 ;wfxFormat.nBlockAlign:=2;wfxFormat.wBitsPerSample:=16;wfxForma
2010-09-28 14:14:00 1758
转载 低级音频函数手册
提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了PostMessagetimeGetSystemTimetimeGetTimetimeSetEventtimeKillEventmidiOutShortMsgmidiOutLongMsgOutputDebugString 外, 也不能有其他系统调用. --------------------------------------------------
2010-09-28 10:04:00 845
转载 SIP与RTP综合应用5-RTP解包过程
<br /><br />RTP接收部分比较简单(不用考虑jitterbuffer等),先从这里入手。<br />其实主要就3步:<br />1 创建一个udp,监听一个端口,比如5200。<br />2 收到RTP包,送到解包程序,继续收第 二个。<br />3 收齐一帧后,或保存文件,或解码去播放。<br />下面详细说一下具体过程:<br />1 创建UDP,非常非常地简单(这里只是简单地模拟RTP接收,虽然能正常工作,但是没有处理RTCP部分,会影响发送端):<br />lass CUDPSocket
2010-09-27 22:14:00 1442
转载 穿NAT的方法的核心思想及实现
<br />本来题目是几种,不过写到这里的时候,其中的一些东西已经被其它文章所含概了,所以这里只谈NAT的穿透的核心思想:punch技术,我称之为对穿.<br /> (1)先来说对穿的工作原理<br /> 在这里我用两个都是在port restrict cone NAT后面的UAC做例子,假设一个是 A,一个是D。两个NAT 分别是B和C。<br /> 先来说对穿的过程<br /> STEP1:UAC A通过A的porta向STUN服务器发送数据包,得到本socket的NAT的外网IP和
2010-09-27 22:10:00 115
原创 ds 视频参数 设置
<br />//视频参数设置 { HRESULT hr=0; IAMStreamConfig*pConfig=NULL; int typecount=0; int typesize=0; m_pCapture->FindInterface(&PIN_CATEGORY_CAPTURE,0,m_pBF,IID_IAMStreamConfig,(void**)&pConfig); if (pConfig!=NULL) { pConfig->Ge
2010-09-26 10:40:00 1851
转载 音频传输心得
<br />我暑假写了一个网络即时语音通讯的工具,较好的解决了声音采集和播放的问题,我把我的想法贴出来跟大家切磋,望指正。我的e-mial:k_bo@163.com <br /> 语音录制的关键是解决好声音的连续和延迟这两个问题,可以采用五个内存块循环使用,每个内存块录制声音的长度为100ms,在录音开始前,用waveInPrepareHeader和waveInAddBuffer函数把所有的五个内存块都添加到录音设备以保存录音数据,这样就可以连续录制长达500ms的语音数据,当每个内存块录满数据后
2010-09-25 22:49:00 3993 1
转载 基于WaveX低级音频函数的实时语音通信
<br /> <br />编者注:<br /> 虽然现在Microsoft说Windows低级音频函数已经obsoleted,DirectSound也已经大行其道,但其相对易用的特点还是值得学习的。本文的另一个特点是作者结合了局域网实时音频传输的课题给出了这些API函数的使用实例,使得全文不仅仅是单纯的API函数使用介绍,从而具有相当的实用价值。<br />未经作者许可,请勿转载!<br />1 摘要<br />2 背景介绍<br />3 相关数据结构<br />4 参数设置<br />5 基本操作流程<
2010-09-25 22:38:00 3631 2
转载 DirectDraw 示例
DirectDraw 在显示YUV图像的时候,由于 YUV 格式很多,显示不同格式的YUV图像都要针对不同格式专门写一些代码,这样很麻烦,同时也增加代码量。在网上看了一些 DirectDraw 示例以后,发现都是针对某一种格式的显示。我用最基本的 DirectDraw 显示方法,封装了几种格式的显示方法,我的显示器只支持示例中的 YUV 格式,所以只实现了几种格式,如有朋友还需要显示别的 YUV 格式可增加少量代码就可显示#ifndef DirectDraw_H #define DirectDraw_
2010-09-22 00:14:00 1859
原创 调用xvid 实现解码
///////////////////int init_decoder() { int ret; xvid_gbl_init_t xvid_gbl_init; xvid_dec_create_t xvid_dec_create; /* Reset the structure with zeros */ memset(&xvid_gbl_init, 0, sizeof(xvid_gbl_init_t)); memset(&xvid_dec_create, 0, sizeof
2010-09-21 17:18:00 2463 2
原创 最简单的DDRAW C代码实现(只支持YUV420数据)
<br /><br />#include <tchar.h><br />#include <ddraw.h><br />#pragma comment(lib, "dxguid.lib")<br />IDirectDraw7 *pIDirectDraw7;<br />IDirectDrawSurface7 *pIDirectDrawSurface7Primary;<br />IDirectDrawSurface7 *pIDirectDrawSurface7OffScreen;<br />DDSURFACED
2010-09-20 17:36:00 2250 1
转载 C++开发编码规范
<br />年后将开始本年度最重要的产品开发,而且在性能方面要求很高,希望通过这款网络产品打开大流量网络安全审计的市场。所以年前一直在做系统分析、系统设计、技术调研,我自己也要制定C++组的C++开发编码规范。<br /> 以前4年多来,一直是开发人员想怎么写就怎么写,所以10万行代码里什么风格都有,unix风格, mfc风格, java风格,大小写、下划杠分隔,乱得很,所以这次很有必要统一规范一下;当然这个规范没办法采用单一的风格,只有看老代码里最多的使用的那种了,然后来个大杂烩,不然老员工不接
2010-09-19 17:11:00 934
转载 如何使用DirectDraw直接显示YUV视频数据
<br /> <br /> <br />最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中显示YUV数据的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收数据,将数据传给解码器,并将解码得到的YUV数据进行显示,最初在显示部分我是先将YUV数据转换为RGB数据,再以位图的形式显示到屏幕上,但发现CPU占用率比较高,后来改用DirectDraw直接显示YUV数据)<br
2010-09-19 16:43:00 2222 3
转载 如何使用DirectDraw直接显示YUV视频数据
<br /> <br /> <br />最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中显示YUV数据的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收数据,将数据传给解码器,并将解码得到的YUV数据进行显示,最初在显示部分我是先将YUV数据转换为RGB数据,再以位图的形式显示到屏幕上,但发现CPU占用率比较高,后来改用DirectDraw直接显示YUV数据)<br
2010-09-19 16:39:00 2490
转载 VC 小技巧 专题
1VC中如何拷贝已有资源(对话框、菜单等)如果你想把一个工程(A工程)中已有对话框完整拷贝到另一个工程(B工程)中,可以用下面的办法:首先在B中,“文件”-“打开”,选择A的“.rc”资源文件,A的资源就会显示在B工程的代码区里,你就可以选择所需要的资源拖到B工程中就可以了。
2010-09-15 22:54:00 748
原创 VC 调试错误 专题
1 LNK1181: cannot open input file“1.obj” 出错原因:在Pjoject--->Settings---->link---->input 写入需要库时在 末尾 输入一个 1 解决方法:删除 多余的 12 VC编译错误:error LNK2001: 无法解析的外部符号 __iob错误:1>libxvidcore.lib(bitstream
2010-09-15 22:04:00 3483
转载 VC 对话框 怎么实现 鼠标拖动 变大 变小
<br />使用 WS_THICKFRAME<br /><br />ModifyStyle(0,WS_THICKFRAME);
2010-09-08 16:51:00 1125
转载 *DEFINE_GUID宏与#include 的使用
使用DEFINE_GUID宏可以让你通过包含同一个头文件来定义GUID值而不必使用extern关键词。比如,你的工程中有三个源文件:src1.cpp,src2.cpp,src3.cpp,它们都使用一个相同的GUID值,而为了保证一致性,这个GUID只能在你的工程中定义一次,这时,其它的源文件必须定义外部引用来使用它。用了DEFINE_GUID,你可以使用在所有源文件中包含同一个头文件,在头文件中这样定义GUID: DEFINE_GUID(CLSID_MyObject, 0
2010-09-04 17:55:00 2136
转载 C++类设计原则
<br />class CCodecMgr<br />{<br />public:<br /> CCodecMgr();<br /> virtual ~CCodecMgr();<br /> <br /> BOOL InitCodecV(BITMAPINFO bmp); <br /> void DestroyCodecV();<br /> BOOL EncodeVideoData(char* pin,int len,char* pout,int* lenr,BOOL* pKey);<br /> BOOL D
2010-09-03 21:31:00 768
转载 Filter编写之 自定义接口实例
自己解决了,函数方式写的不对,改成// {EF31F705-32A7-477a-90C9-2C7E81EB025D}#ifndef __H_MyFilter__#define __H_MyFilter__#ifdef __cplusplusextern "C" {#endifDEFINE_GUID(IID_IMyFilter, 0xef31f705, 0x32a7, 0x477a, 0x90, 0xc9, 0x2c, 0x7e, 0x81, 0xeb, 0x2, 0x5d);DECLARE_INTERFA
2010-09-03 17:02:00 2963 1
原创 在头文件定义全局变量以后
1glo.h#ifndef _GLO_H_#define _GLO_H_ DWORD test; #endif// _GLO_H#if !defined(AFX_1_H__7B1238F7_C7C0_49EF_8C9A_CAB897B6C2A3__INCLUDED_)#define AFX_1_H__7B1238F7_C7C0_49EF_8C9A_CAB897B6C2A3__INCLUDED_#if _MSC_VER > 1000#pragm
2010-09-03 14:08:00 1348
转载 变量的定义和声明
1 广义地说,声明包含定义,但并非所有的声明都是定义。对于“int lower_limit;”来说,它既是声明又是定义;而对“extern lower_limit;”来说,它是声明不是定义。“声明”仅仅告诉编译器变量名的值的类型而已,不会生成目标代码,当然也不会给它分配存储空间,更不会增大可执行程序的体积。由于声明并不分配存储空间,因此同一个声明可以在程序中多次出现。它的位置可在执行代码之外,也可在执行代码里面。而“定义”不仅要告诉编译器变量名的值的类型,而且还要给变量分配存储空间。既然在定义变量时就已经建
2010-09-03 11:39:00 592
转载 超级P2P搜索引擎
<br />搜索Google大家都用过吧?我们正是利用它强劲的搜索功能来突破封锁下载,Google搜索和限制下载有什么关系,没可能实现吧?不要不相信哦,往下看哦! <br /><br />http://www.google.com/intl/zh-CN/<br />http://www.3721.com/<br />http://www.baidu.com/<br /><br /> 首先打开Google,在关键词输入框中输入“index of/“inurl:lib(双引号为英文状态下),选择“搜索简体中文
2010-09-02 09:52:00 4573
转载 如何进阶为职业程序员---三年程序员生涯的感悟
<br />不知不觉已经工作三年了,回顾自己三年的程序员生涯,总结了一些东西,希望对想从事程序员工作的xdjm们有些帮助。<br />如何从编程爱好者进阶为职业程序员:<br />一、简单才是美<br />好的代码一定是最简单的,这应该是每个职业程序员心中万世不变的箴言。一个简单的“hello world”,可以有十几种实现,但是职业程序员绝对不会标新立异,他们会选择最简单最常用的那种。<br />为什么要写简单的程序?一、简单的程序易于扩展;二、简单的程序易于维护;三、简单的程序易于发现问题…… 写简单程
2010-09-01 10:56:00 951
原创 Call Stack技巧(调用堆栈调试)
<br />1、堆栈调试的原理<br /> 调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的?<br />2、堆栈调试的技巧<br /> 在“Call Stack”对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数,单击这些函数名可以跳到对 应的函数中。<br />3、调用方式(VC++ 6.0)<br /> View-->Debug Window ---->Call Stack<br />4、示例图片<br />
2010-09-01 10:52:00 8869
排序算法实现
2014-07-03
网络编程必备 TCP/ IP 详解
2009-11-04
C++Builder.5.编程实例与技巧
2009-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人