互联网视频网站的视频开发

互联网的不断发展,各种新技术的兴起,今天我先列出最基本开发流程,适用于开发视频会议系统、语音视频聊天系统、远程教育平台以及即时通讯平台(IM)等。希望对喜欢这方面的朋友有所帮助。同时欢迎各大高手参与讨论,相互交流、学习。

首先,知其然,先看看如何开始工作。

下载:http://www.anychat.com.cn/download.html 
针对自身的平台下载相印的开发包。

一、初始化

该部分是首先要完成的,包括设置对应的回调函数、设置SDK组件路径、设置是否产生日志文件等,通常初始化的代码如下(C++):

01.// 打开(关闭)的日志记录功能

02.BRAC_ActiveCallLog(TRUE);

03.

04.// 设置核心组件所在目录

05.CHAR szCoreSDKPath[MAX_PATH]={0};

06.GetModuleFileName(NULL,szCoreSDKPath,sizeof(szCoreSDKPath));

07.(strrchr(szCoreSDKPath,‘\\‘))[1]=0;

08.BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,szCoreSDKPath,strlen(szCoreSDKPath));

09.

10.// 根据BRAC_InitSDK的第二个参数:dwFuncMode,来告诉该如何处理相关的任务(详情请参考开发文档)

11.DWORDdwFuncMode=BRAC_FUNC_VIDEO_CBDATA | BRAC_FUNC_AUDIO_AUTOPLAY | BRAC_FUNC_CHKDEPENDMODULE|BRAC_FUNC_AUDIO_VOLUMECALC | BRAC_FUNC_NET_SUPPORTUPNP |BRAC_FUNC_FIREWALL_OPEN|

12.BRAC_FUNC_AUDIO_AUTOVOLUME|BRAC_FUNC_CONFIG_LOCALINI;

13.BRAC_InitSDK(this->GetSafeHwnd()/*NULL*/,dwFuncMode);

14.

15.// 设置录像临时文件保存路径

16.CHAR szRecordDirectory[MAX_PATH]={0};

17.::GetModuleFileName(NULL,szRecordDirectory,MAX_PATH);

18.(strrchr(szRecordDirectory,‘\\‘))[1]=0;

19.strcat(szRecordDirectory,"Record");

20.BRAC_SetSDKOption(BRAC_SO_RECORD_TMPDIR,szRecordDirectory,strlen(szRecordDirectory));

21.

22.// 设置录像文件质量参数

23.DWORD dwVideoBitrate=200 * 1000;  // 200kbps

24.BRAC_SetSDKOption(BRAC_SO_RECORD_VIDEOBR,(PCHAR)&dwVideoBitrate,sizeof(DWORD));

25.DWORD dwAudioBitrate=96 * 1000;   // 96kbps

26.BRAC_SetSDKOption(BRAC_SO_RECORD_AUDIOBR,(PCHAR)&dwAudioBitrate,sizeof(DWORD));

27.

28.// 设置快照临时文件保存路径

29.CHAR szSnapShotDirectory[MAX_PATH]={0};

30.::GetModuleFileName(NULL,szSnapShotDirectory,MAX_PATH);

31.(strrchr(szSnapShotDirectory,‘\\‘))[1]=0;

32.strcat(szSnapShotDirectory,"SnapShot");

33.BRAC_SetSDKOption(BRAC_SO_SNAPSHOT_TMPDIR,szSnapShotDirectory,strlen(szSnapShotDirectory));

34.

35.// 设置临时文件路径

36.CHAR szTempPath[MAX_PATH]={0};

37.::GetModuleFileName(NULL,szTempPath,MAX_PATH);

38.(strrchr(szTempPath,‘\\‘))[1]=0;

39.strcat(szTempPath,"Temp");

40.BRAC_SetSDKOption(BRAC_SO_CORESDK_TMPDIR,szTempPath,strlen(szTempPath));

41.

42.// 启用音频自动参数功能(默认关闭)

43.DWORD bAudioAutoParam=TRUE;

44.BRAC_SetSDKOption(BRAC_SO_AUDIO_AUTOPARAM,(PCHAR)&bAudioAutoParam,sizeof(DWORD));

二、登录系统

当第一步初始化完成之后,便可以连接服务器、验证用户身份。通常调用代码如下(C++):

1.// 连接服务器

2.BRAC_Connect("211.155.25.90",8906);

3.// 登录系统

4.BRAC_Login("testuser","",0);

连接服务器与登录系统都是一个异步的过程,调用后会立即返回,其中:

a、连接服务器成功,或是失败,将会触发异步消息:网络连接消息

b、登录系统成功,或是失败,将会触发异步消息:登录系统消息

所以应用程序需要响应这些异步消息(或处理:异步消息通知回调函数)才能知道连接服务器、登录系统是否成功。

登录系统成功后,如果需要实现即时通讯应用中的好友列表(AnyChat默认没有实现),则需要利用AnyChat的扩展API接口与Server SDK来配合实现,登录系统成功后,服务器会返回一个32位的用户ID,如果登录时没有传入密码参数,则系统会认为是游客登录,并分配一个独立的用户ID(如-1、-2等),如果登录时传入了密码参数,则登录请求将会交给“SDK Filter Plus”接口,或“Server SDK”对应的接口,用户可开发一个自己的服务器插件“SDK
Filter Plus”,或是调用“Server SDK”所对应的API来处理用户身份验证的请求,完成对用户ID的管理,实现与第三方系统的互联互通,详细内容可参考SDK包中的:doc\server\目录下的相关文档。

三、进入房间

在第二步登录系统成功之后,就可以进入房间,因为只有在房间中,才能完成语音和视频的交互。通常调用代码如下(C++):

1.// 进入房间

2.BRAC_EnterRoom(1,"",0);

房间由服务器动态管理,由32位的房间ID号来唯一标示,当客户端指定的房间ID号不存在时,服务器将会自动创建。进入房间也是一个异步的过程,是否成功将会触发异步消息:自己进入房间消息,进入房间成功后,服务器会把当前房间的在线用户列表传给客户端,传输完成后,将会触发异步消息:当前房间在线用户消息(该消息只触发一次),只有收到服务器的在线用户列表后,才能对房间内的用户进行音视频的相关操作。

当自己进入房间成功,且收到服务器的在线用户消息后,有新的用户进入房间,或是老用户离开房间,将会触发异步消息:用户进入(离开)房间消息,这样自己便知道谁进入,或是离开了房间。

1、打开自己的音视频

进入房间成功之后,便可以打开自己的音视频设备,通常调用代码如下(C++):

1.// 打开自己的视频设备

2.BRAC_UserCameraControl(-1,TRUE);

3.// 打开自己的音频设备

4.BRAC_UserSpeakControl(-1,TRUE);

打开自己的设备后,并不会立即上传音视频流,只有当其它用户请求自己的音视频数据时(可单独请求音频流,或视频流)才对外传输,打开自己的音视频设备,默认是按服务器的配置信息来初始化设备(如采样分辨率、视频帧率、音频的采样频率等),如需要在客户端程序中调节音、视频质量,

2、请求其它用户的音视频

如果需要显示其它用户的音视频,则必须在收到房间用户列表消息后,请求对方的音视频流,然后对方才将音视频流传输过来,通常请求其它用户的音视频数据调用代码如下(C++):

1.// 请求对方的视频流

2.BRAC_UserCameraControl(dwUserId,TRUE);

3.// 请求对方的音频流

4.BRAC_UserSpeakControl(dwUserId,TRUE);

数据传输优先P2P方式,只有当P2P不通时,才由服务器转发,P2P的NAT打洞过程,以及数据流传输策略均由服务器控制,只要有请求,而且对方已打开了自己的音视频设备,则就能收到对方的音视频流数据。

3、音视频的播放与显示

当收到其它用户的音频数据后:

a)如果在初始化时设置了“BRAC_FUNC_AUDIO_AUTOPLAY”标志,则SDK内部将会自动播放,自动混音;

b)如果在初始化时设置了“BRAC_FUNC_AUDIO_CBDATA”标志,则SDK会将解码后的音频数据(PCM格式)通过回调函数回调给上层应用。

当收到其它用户的视频数据后

a)如果在初始化时设置了“BRAC_FUNC_VIDEO_AUTODISP”标志,并且调用了API:BRAC_SetVideoPos,则SDK内部将会把视频显示到指定的窗体的指定位置(在指定位置上自动迭加一个视频窗口);

b)如果在初始化时设置了“BRAC_FUNC_VIDEO_CBDATA”标志,则SDK会将解码后的视频数据(RGB、YUV)通过回调函数回调给上层应用,由上层应用自己来绘制,或渲染,该模式适合于DirectX、HGE等没有窗口模式下的应用程序,或是上层应用需要对视频进行特殊处理的场合,如迭加文字、logo等。

4、文字交互

成功进入房间后, 便可以调用API接口向指定用户,或是房间中的所有用户发送文字消息:

1.// 发送文字消息

2.CStringstrInput = "helloworld";

3.BRAC_SendTextMessage(-1,FALSE,strInput.GetBuffer(0),strInput.GetLength());

其它用户收到自己发送的文字消息后,便会触发回调函数:文字消息回调函数,通过处理回调消息,然后将收到的文字消息显示在界面上,便可实现文字的交互。

5、业务逻辑处理 

AnyChat SDK内置的基本逻辑是:当自己的音视频设备打开后,别的用户有请求,便会将流媒体数据传输给对方,而没有任何何业务逻辑。

a)如要实现视频会议系统,则用户进入房间后,就需要知道谁是主持人,然后打开主持人的视频;

b)如要实现视频聊天系统,则用户进入房间后,就需要知道当前房间有几个公麦,谁在公麦上,然后打开对应公麦用户的视频等;

c)……

这些业务逻辑需要与服务器端的“SDKFilter Plus”或“AnyChat Server SDK”互相配合来实现,具体的实现方案可参考SDK包中的:doc\server\目录下的《AnyChat
Server SDK开发指南》第6章节。

四、释放资源

与前面连接服务器、登录系统、进入房间对应的,退出系统的过程是:离开房间、注销系统、释放资源,通常调用代码如下(C++):

1.// 离开房间

2.BRAC_LeaveRoom(-1);

3.// 注销系统(将关闭网络连接)

4.BRAC_Logout();

5.// 释放资源

6.BRAC_Release();

离开房间后,可以进入新的房间,系统注销之后,可以再次调用连接服务器的API接口,但是释放资源后,将不再工作。

需要特别注意一下释放资源的时机。

完了之后,我们就来知其所以然了,如果你喜欢这个项目,请继续关注www.anychat.cn

时间: 2024-11-14 21:03:54

互联网视频网站的视频开发的相关文章

手动抓取爱奇艺和优酷等视频网站的视频

今天就给大家讲讲怎么手动抓取爱奇艺和优酷等视频网站的视频该方法适用于很多视频网站.因为有的网站不支持我们用一些软件比如硕鼠和维棠等的解析下载,所以我就找到了这个方法,本来优酷之前是可以的,不过现在优酷还是不支持硕鼠和维棠的解析了.这两个网页是原帖的地址,其实我之前知道这个方法,不过这个人提供了一个软件比较好用,我把他录制的视频提取出来了,下面看看吧. 其实原理都是一样,这些视频网站为了让视频更快的缓存,当然也有很多其他原因,把视频分成了很多段,所以我们只需要单独下载好每一段视频,然后把这些视频合

Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用. 1.能支持的格式 ffmpeg能解析的格式:

python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 "一出好戏" . 分析页面 我用的是chrome浏览器,F12进入查看.选择NetWork的Doc,发现主体部分的数据是从这个网站获取的. 在地址栏输入这个链接,跳转到了视频来源的播放页面. 当然,在这个页面就可以直接观看视频了,但是我们要把视频下载下来. 寻找视频文件 仍然是之前那个页面,在Other中,我们发现了一些奇怪的

embed播放第三方视频网站的视频

新年第一发,在被窝里发的... 今天的这个问题之前觉得不算什么,直到这两天被搞残了...所以, 谨慎起见,还是记录一下吧 核心代码如下: <embed src="http://player.youku.com/embed/XNDU0NTIxMTE0MA==" width="341" height="195" autostart=start /> src内为播放网站视频的路径(注意需要是要播放的视频的分享路径,之前直接拿网站路径来用,结

下载视频网站的视频

视频播放地址:http://v.youku.com/v_show/id_XODM4NDEyMDMy.html

视频网站的盈利模式分析

一. 由于各种客观非客观因素,我国的视频网站和欧美发达国家的视频网站的盈利模式相比还是有很大差别的,接下来就简单的分析介绍一下欧美和国内视频网站盈利模式. 因为对国外的视频网站不是很了解,所以在这里只能简单地介绍一下国外视频网站不同于国内的盈利方式,欧美在版权这方面做得很完善,所以国外的视频网站可以通过购买某部(或某些)电影/剧集的网络播放权/网络首播权,之后通过收费收看这样的方式,为自己的网站的盈利渠道并提升浏览量,比如<越狱><冰与火之歌>等十分热门,但确只能在收费频道播放的剧

靠谱的Squid缓存视频网站方法

先把以前自己写过的几篇老文章贴上来,Squid缓存视频是个很能节约企业.机构出口流量的方案.不过由于视频网站的技术更新很快,这篇写于2011年的文章如今是否还能不加修改的应用.我相信懂了原理之后稍加修改即可. ==================================================== 开篇先来批评一下国内网站的技术文章,90%都是转载的,转的格式乱七八糟,再加上广告,浮躁啊! Squid的中文文章真是不多,能深入点讲点原理的就更少了,很多是把编译选项和conf文件一

酷六类视频网站Android端软件开发视频教程

风网大话优酷 酷六类视频网站Android端软件开发视频教程本系列教程主要讲解一个类似于酷六.优酷等视频网站Android端软件的整体架构.开发流程及代码编写的全过程.具体涉及网络的上传.下载.多线程.SQLite数据库.SDcard操作.UI界面的显示和事件响应.设计模式的介绍和实战,IoC的精妙应用等. 课程目录:1.软件的演示以及和其他软件的比较 133MB2.Android娱乐多媒体的开发的重要的战略意义分析 45.3MB3.软件的概述 47.1MB4.该软件与Android就业 38.

Java开发视频网站大概需要多少钱?

这个还真不好说,需要看你对视频网站有什么要求?你的数据库选择的是什么型号的?需要开发几个页面?服务器是需要高端的还是中低端的?还有你对完成时间有什么要求,这些细节也是决定价格的关键因素. 上面这些因素都关系到价格的高低,具体来说,一般好一点的服务器至少需要5000一年,每一个单页面的设计费用大概在500左右,而且还有什么数据 库维护费用,如果需要添加一些小功能,肯定还是需要另外收费的,还有什么网站防护.测试费用.网站域名等一些费用,你最好还是找一家公司给你一条龙服务 吗,省的到时候是视频网站开发