加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FlashSDK使用说明书

发布时间:2020-12-15 06:43:15 所属栏目:百科 来源:网络整理
导读:FlashSDK使用说明书 一.概述 FlashSDK是跨平台的FLASH流媒体发布开发包,可以将编码好的H264视频以及AAC音频发布到指定的FMS(FLASH Media Service)服务器上,利用FMS服务器强大的转发存储能力以及全世界安装量最大的媒体播放器FLASH player,实现PC,手机

FlashSDK使用说明书


一.概述
FlashSDK是跨平台的FLASH流媒体发布开发包,可以将编码好的H264视频以及AAC音频发布到指定的FMS(FLASH Media Service)服务器上,利用FMS服务器强大的转发存储能力以及全世界安装量最大的媒体播放器FLASH player,实现PC,手机,平板电脑的跨平台的流媒体播放解决方案。
FlashSDK支持的平台将包括:
* X86 WINDOS
* X86 LINUX
* DAVINCI-ARM-LINUX: 美国德州仪器在安防监控领域性能最强大的处理器平台
* HISI-ARM-LINUX: 海思半导体在安防监控领域性价比和市场占有率最高的处理器平台
* Android平台:Google的智能手机操作系统平台
* iOS平台:Apple的智能手机操作系统平台
* WINCE平台:Microsoft的智能手机操作系统平台
利用FLASHSDK简单的SDK,可以在最短时间内,为您的产品增加FLASH流媒体发布功能,并实现跨平台访问,可广泛应用在网络视频监控,网络会议电视,网络教育,流媒体直播,视频广告发布等各种应用中。


二.FlashSDK发行包的目录结构
Flashsdk
Davinci-linux
Lib
?Flashsdk.a
?Flashsdk.h
Demo
?Makefile
?Demo.c
Hisi-linux
Lib
?Flashsdk.a
?Flashsdk.h
Demo
?Makefile
?Demo.c
X86-linux
Lib
?Flashsdk.a
?Flashsdk.h
Demo
?Makefile
?Demo.c
Doc
?FLASHSDK使用说明书.doc
Flashplayer
?详见目录


三.接口说明
1.数据结构和定义
* 视频参数定义
  typedef struct
  {
  ?//int? codec; //must be h264
  ?int? enable;
  ?int? width;
  ?int? height;
  ?int? datarate;
  ?int? framerate;
  ?char pps[256];
  ?int? pps_len;
  ?char sps[256];
  ?int? sps_len;
  }VIDEO_PARAM;
?
* 音频参数定义
  typedef struct
  {
  ?//int codec; //must be aac
  ?int enable;
  ?int datarate;
  ?int samplerate;
  ?int samplesize;
  ?int stero;
  ?char aac_cfg[256];
  ?int? aac_cfg_len;
  }AUDIO_PARAM;
  
* 网络参数定义
  typedef struct
  {
  ?int nodelay;
  ?int timeout_seconds;
  ?int send_buf_size;
  ?int send_trunk_size;
  }NETWORK_PARAM;
  Nodelay: 是否启用socket的TCP_NODELAY的选项。
  timeout_seconds: socket发送和接收数据超时时间,单位为秒
  send_buf_size:socket发送缓冲大小
  send_trunk_size: socket每次发送媒体流的块大小
* 网络状态定义
  enum
  {
  ?FLASH_STATUS_CONNECTING=0,
  ?FLASH_STATUS_CONNECT_OK,
  ?FLASH_STATUS_CONNECT_FAILED,
  
  ?FLASH_STATUS_CONNECTING_STREAM,
  ?FLASH_STATUS_CONNECT_STREAM_OK,
  ?FLASH_STATUS_CONNECT_STREAM_FAILED,
  ?
  ?FLASH_STATUS_WRITE_FAILED,
  ?FLASH_STATUS_CLOSED,
  };
  
* 网络状态回调函数定义
  typedef int NETWORK_CALLBACK(int handle,int status);
  
* 缓冲状态回调函数定义
  typedef int BUFFER_CALLBACK(int handle,int unsent);
  
2.API说明
* SDK初始化
Int flash_init(void)
参数:

返回值:
<0,初始化失败
其他,初始化成功
说明:
在调用所有其他API(flash_version除外)之前,必须调用此API,否则将返回失败。
* SDK注销
Int flash_release(void)
参数:

返回值:
<0,注销失败
其他,注销成功
说明:
在调用此API之后,除非重新调用flash_init,否则调用其他API将失败(flash_version除外)。
* 查询SDK版本信息
Char *flash_version(void)
参数:

返回值:
版本信息字符串,如:Demo ver 1.0.0 build Oct 10 2011
说明:
无。
* 创建会话实例
  int flash_session_create(char *server,unsigned short port,char *application,char *stream,char *username,char *password);
  参数:
  Server:FMS服务器地址或者域名
  Port: FMS服务器RTMP服务端口
  Application: RTMP服务实时流的应用名称,默认为”live”
  Stream: 当前实例发布实时流的名称
  Username: 发布流时如果服务器需要认证,提供的用户名
  Password: 发布流时如果服务器需要认证,提供的密码
  返回值:
  <0,创建实例失败
  其他,返回的实例编号
* 设置会话参数
  int flash_session_setup(int handle,VIDEO_PARAM *video_param,AUDIO_PARAM *audio_param,NETWORK_PARAM *network_param);
  参数:
  Handle: flash_session_create返回的实例
  video_param:要发布实时流的视频参数
  audio_param: 要发布的实时流的音频参数
  network_param: 发布该实时流时可选的网络参数
  返回值:
  <0: 失败
  其他:成功
* 启动视频流发布会话
  int flash_session_start(int handle,NETWORK_CALLBACK netcb,BUFFER_CALLBACK bufcb);
  参数:
  Handle: flash_session_create返回的实例
  Netcb: 通知网络参数变化时,调用的回调函数
  Bufcb:通知缓冲数据时,调用的回调函数
  返回值:
  <0: 失败
  其他:成功
* 发布一帧视频数据
  int flash_session_send_video(int handle,unsigned char *data,int len,int iskey,double timestamp);
  参数:
  Handle: flash_session_create返回的实例
  Data: 视频数据缓冲指针
  Len: 视频数据长度
  Iskey: 视频数据是否是关键帧
  Timestamp: 视频数据对应的时间戳
  返回值:
  <0: 失败
  其他:成功
  
* 发布一帧音频数据
  int flash_session_send_audio(int handle,double timestamp);
  参数:
  Handle: flash_session_create返回的实例
  Data: 音频数据缓冲指针
  Len: 音频数据长度
  Timestamp: 视频数据对应的时间戳
  返回值:
  <0: 失败
  其他:成功
* 停止发布会话
  int flash_session_stop(int handle);
  参数:
  Handle: flash_session_create返回的实例
  返回值:
  <0: 失败
  其他:成功
  
* 释放会话实例
  int flash_session_destroy(int handle);
  参数:
  Handle: flash_session_create返回的实例
  返回值:
  <0: 失败
  其他:成功
  
3.调用参考
?调用的伪代码如下:
  
  flash_init();
?
  int handle = flash_session_create(param->server,
????????param->port,
????????param->application,
????????param->stream,
????????param->user,
????????param->pass);
??
?flash_session_setup(handle,
&param->video_param,
&param->audio_param,
&param->network_param);?
?flash_session_start(handle,netcb,bufcb);
?
?while(param->running)
?{??
?。。。
???iskey = is_h264_key_frame(frame,len);???
???flash_session_send_video(handle,frame,len,iskey,timestamp);
?。。。
???flash_session_send_audio(handle,timestamp);
?。。。
?}

?flash_session_stop(handle);
?flash_session_destroy(handle);

?flash_release();


四.如何测试和评估
FlashSDK的发行版本中包含有DEMO的源代码,用户可自己编译进行测试,注意需要根据测试的平台修改Makefile和选择对应的flashsdk.a。
Demo程序可将2个H264的录像文件逐帧读出,并同时发布到不同的rtmp地址上,只要能访问文件和网络,就可以进行测试,因此可以方便的在各种不同平台下进行测试和评估。


1.安装并运行FMS服务器
由于发布rtmp实时流需要FMS(FlashMediaService)服务器的支持,因此需要先安装FMS服务器免费开发版本。
请访问Adobe公司网页下载并安装FMS服务器,下载地址为:
https://www.adobe.com/cfusion/tdrc/index.cfm?loc=en%5Fus&product=flashmediaserver
注册帐号即可免费下载。
FMS服务器有WINDOWS和LINUX版本可供选择,用户可选择适合自己的安装。当然用户也可选择安装其他FMS服务器的开源替代产品。
安装完成后需要配置RTMP服务的端口,默认是1935。如果修改了默认端口,在发布流和播放流时,rtmp地址中需要包含实际端口。


2.编译运行demo程序
以PC LINUX为例,假设FLASHSDK解压缩后的目录为:/home/flashsdk
#cd /home/flashsdk/x86-linux/demo
#make clean
#make
#cd release
#./demo &
即可开始发布2路视频流。
注意,需要把h264.avi和h264cif.avi拷贝到/home/flashsdk/x86-linux/demo/release目录下,否则无法打开文件。


3.用测试网页播放FLASH视频
用浏览器打开flashplayer/example/index.hml即可播放发布的实时视频。
注意该网页同时播放两路视频流,用户需要根据自己的需要修改视频流参数,红色字体是用户需要修改的部分:
<script type="text/javascript" src='#'" /script>??????????
<!-- this A tag is where your Flowplayer will be placed. it can be anywhere -->????????
<a href="http://pseudo01.hddn.com/vod/demo.flowplayervod/flowplayer-700.flv"????????????
?style="display:block;width:640px;height:480px"????????????
?id="player">????????
</a>???????????
<!-- this will install flowplayer inside previous A- tag. -->????????
<script>????????????
?flowplayer("player","../flowplayer-3.2.7.swf",
?{
??clip:
??{
???url: 'h264',??
???live: true,???
???provider: 'northalley'
??},????????????????
??allowfullscreen : true,
??plugins:
??{
???northalley:
???{
????url: '../flowplayer.rtmp-3.2.3.swf',
???? ?netConnectionUrl:'rtmp://192.168.1.100:2935/live'
???}????????????????
??}????????????
?});??????????
</script>

<script type="text/javascript" src='#'" /script>??????????
<!-- this A tag is where your Flowplayer will be placed. it can be anywhere -->????????
<a href="http://pseudo01.hddn.com/vod/demo.flowplayervod/flowplayer-700.flv"????????????
?style="display:block;width:320px;height:240px"????????????
?id="player2">????????
</a>???????????
<!-- this will install flowplayer inside previous A- tag. -->????????
<script>????????????
?flowplayer("player2",
?{
??clip:
??{????????????????????
???url: 'h264cif',
???live: true,?????????????????
???provider: 'northalley'???????????????
??},the plugins node????????????????
??plugins:
??{??????????????????
???northalley:
???{????????????????????????
????url: '../flowplayer.rtmp-3.2.3.swf',??????????????????????????????????
????netConnectionUrl:'rtmp://192.168.1.100:2935/live'???????????????????
???}????????????????
??}????????????
?});??????????
</script>

例子中,对应到调用flash_session_create时传入的参数:
Server: 192.168.1.100
Port: 2935
Application: live
Stream: h264或者h264cif


五.注意问题

Demo版本是debug版本,文件较大。Release版本约300k左右。 Demo版本最多只能同时发布两路流。 Demo版本只能连续运行一段时间,时间到了之后将不会发流。 如需正式版本,请和我们联系。 如果在调用flash_session_setup时传输video_param中没有填入正确的pps和sps,那么发送视频流时,请确保至少发送一帧IDR帧,在I帧前面包含pps和sps数据,否则无法播放。 请确保音频和视频的时间戳是统一连续编码的,不要出现后面发送的数据时间戳还比前面发送的时间戳还小的情况。 Demo程序运行所需的h264.avi和h264cif.avi,有点大,未能一起打包上传,请联系我们索取。 ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读