免费流媒体服务器(AMS3.0 非AdobeMediaServer)API篇

  • Post author:
  • Post category:其他



  • 服务器设置 PHP 设置示例 set.php 内容如下:

<?php

$url = “http://192.168.20.123:89/cfg/set”; //把IP改为你服务器的地址

//下面的设置数据表示 关闭自动录像, 把服务器设为边缘服务器, 同时设置了中服务器的回源地址,

$set_data = “enable_rtmp_record_manual=1&org=0&rtmp_org_addr=rtmp://192.168.20.142:1935&http_org_addr=http://192.168.20.142:89”;

//enable_rtmp_record_manual=1   表示是录像为手动模式, 即关闭自动录像

// org=0   表示要设置当前服务器为边缘服务器, 如果是中心服务器为 1,

//rtmp_org_addr=rtmp://192.168.20.142:1935/live     当不是中心服务器时要设此项指明中心服务器的RTMP地址, 如果是中心服务器那么此项可以不用设置,


注意

:

安全的方式是用url_encoder()把URL编码一次,否则可能因URL中含有特殊字符而出现错误

//http_org_addr=http://192.168.20.142:89            当不是中心服务器时要设此项指明中心服务器的HTTP地址, 如果是中心服务器那么此项可以不用设置,


注意

:

安全的方式是用url_encoder()把URL编码一次,否则可能因URL中含有特殊字符而出现错误

//注意下面的变化:

//rtmp://{ip}:{rtmp_port}/{app}/{streamname},

//推流地址中{app}  为应用名, 当为中心源服务器时 app 是 live; 若为边缘服务器时 app 是 publish. 是否为源服务器的角色可以在设置中把”org”变量设为1.

//http_notify=http://192.168.1.65:80/onplay.php    http播放时的通知接口, 包括播放直播点播   这个onplay.php也有一个示例. 他的IP地址就是这个文件所在的WEB服务器地址

//rtmp_notify=http://192.168.1.65:80/onplay.php    RTMP播放时的通知接口, 包括直播点播

//上面的两个通知只有在下在面的开关项设为1时才会被调用

//enable_http_vod_s_notify=1          启用http点播开始通知

//enable_http_live_s_notify=1            启用http直播通知

//enable_rtmp_vod_s_notify=1            启用rtmp点播通知

//enable_rtmp_live_s_notify=1            启用rtmp直播通知


$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, $url);

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5);

curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt( $ch, CURLOPT_FRESH_CONNECT, true);

curl_setopt( $ch, CURLOPT_POST, 1); //设置为POST方式

curl_setopt($ch, CURLOPT_POSTFIELDS, $set_data);

// 执行一个curl会话

$contents = curl_exec($ch);

// 返回一个保护当前会话最近一次错误的字符串

$error = curl_error($ch);

if($error){

echo ‘Error: ‘.$error;

}

// 关闭一个curl会话

curl_close( $ch );

echo $contents;


  • 事件的HTTP响应示例 onplay.php

<?php

$user = $_GET[“name”];

$psw  = $_GET[“psw”];

//这个用户名和密码就是你在播放或上传发布链接中所带的参数, 你也以带上其它的参数, 这里都能取到

//比如播放地址 rtmp://192.168.1.222:1935/live/live1?name=wang&psw=123456  其它的地址带参数也是这样的

//如果判断所带的信息不合法, 那么可以把返回不合法, 如用  header(‘HTTP/1.1 401 Unauthorized’);这是


安全认证的做法


//header(‘HTTP/1.1 404 Not Found’);

//header(‘HTTP/1.1 401 Unauthorized’);

//header(‘Location:’.$url);  //Location和”:”之间无空格。如果库中没有文件或想让其跳转到另一个播放地址时可以设$url为一个播放地址. 那么播放会自动跳转到指的播放

//header(‘Filename:/var/ams/1.mp4’);  //Filename和”:”之间无空格。此项指定要播放出的文件, 是本地路径, 如果不指定服务器就会播放默认库中的文件. 所以你可在此根据链接中的名称到你的库中找一个你想要让播放器播放的文件, 即


播放的内容完全由我们控制

.

我也推荐用这种做方, 这样只要你媒体文件存到服务器能访问到的地方, 那么用户就能播放出来, 就是说媒体库可以在任务地方



//header(‘is_rec:1’);    //当在设置中设为手动模式时 , 可以在此开启此头, 这时可以针对此次推流进行录像, 这样不会影响其它的推流

//header(‘rec_path:/var/ams’); //header(‘is_rec:1’); 启用时指明录像位置, 否则不起作用,使用默认配置的路径

//header(‘rec_name:mark’); //header(‘is_rec:1’); 启用时指明录像名称, 否则不起作用,使用默认规则生成

?>

  • 简单使用文档

——————————————————–API对接————————————————————–

1. 配置接口的使用

获取配置接口 http://192.168.20.142:89/cfg/get

设置配置接口 http://192.168.20.142:89/cfg/set

注意上面两个接口都要使用 POST 方法.

无论是获取还是设置数据格式都是用 ‘&’ 隔开的键值对形式, 如下

enable_record_size=0&record_size=1024000&hls_fragment=2&hls_playlist_length=4&rtmp_port=1935&http_port=89&http_notify=http://192.168.20.34:80/onplay.php&rtmp_notify=http://192.168.10.36:8080/teachingPlan/liveCallback.do&enable_http_vod_s_notify=0&enable_http_vod_e_notify=0&enable_http_live_s_notify=0&enable_http_live_e_notify=0&enable_rtmp_vod_s_notify=0&enable_rtmp_vod_e_notify=0&enable_rtmp_live_s_notify=0&enable_rtmp_live_e_notify=0&enable_rtmp_publish_s_notify=0&enable_rtmp_publish_e_notify=0&enable_rtmp_update_notify=0&allow_addr=all&record_path=/var/ams&upload_path=/var/ams/upload&update_interval=30&enable_rtmp_record_process=1&enable_rtmp_record_manual=0&enable_http_upload_process=1&org=1&http_org_addr=http://192.168.20.34:89&rtmp_org_addr=rtmp://192.168.20.34:1935/live

当GET配置时会把所有的配置取过来但我们不需要都处理, 只需要处理下面的配置就可以.

enable_record_size=0     当为1时启用录像分段.

record_size=1024000      当启用录像分段时,这个值被启用, 就是录像分段的大小. 单位是KB

rtmp_port=1935                     RTMP服务端口

http_port=89                         http服务端口

enable_rtmp_record_process=1  当为1时启用录像文件处理,   回调使用rtmp_notify

rtmp_notify=http://192.168.10.36:8080/teachingPlan/liveCallback.do   当启用录像文件处理后,会通过这个地址去上报录像信息

http_notify=http://192.168.10.36:8080/teachingPlan/liveCallback.do

enable_rtmp_vod_s_notify=1 当为1时,启用RTMP点播开始时的回调请求 , 回调使用rtmp_notify

enable_http_vod_s_notify=1 当为1时,启用HTTP点播开始时的回调请求 , 回调使用http_notify

record_path=/var/ams       设置录像路径

同样设置配置时也不是必须加入所有的项, 只需要加入部分项目就可以.

注意设置完成要重启服务器

2. 重启服务的接口 (注意要使用POST方法)

http://192.168.20.142:89/cfg/restart

3.录像回调接口的数据格式

call   record_transfer_done

“duration”    文件时长, 单位秒

“size”        文件大小, 字节BYTE

“fps”          帧率

“bitrate”      平均码流, 单位bit

“wh”          宽高

“filepath”    生成录像文件的全路径,包括文件名称. 如果文件不存在值为”NONE”, 当录像文件有问题时可能是FLV文件,正常为MP4.

“filename”    录像文件的名字.当录像文件有问题时可能是FLV文件,正常为MP4.

“streamname”  录像文件的数据源,即流名称

“jpgpath”      生成录像截图文件的全路径, 如果截图失败值为”NONE”

“error”        是否过程中出现错误, 正确时值为0, 错误时为错误码.

4. 使用文件删除接口(使用’GET’方法)

示例 :   http://192.168.20.141:89/cfg/delf?file=%2Fvar%2Fams%2Flive1_20200506022841%2Emp4

5. 录像回放的处理

URL的拼接

http 格式   http://192.168.10.168:89/5642138795462.mp4

rtmp 格式   rtmp://192.168.10.168:1935/vod/5642138795462.mp4

在URL中 “5642138795462” 是文件的唯一标识, 并不是文件的名字, 这个标识一定是唯一的,方便后面WEB去回查文件找到这个文件的物理路径

当播放器播放一个URL时, 流媒体服务器会回调WEB一个回调址(如同录像信息回调相同), 这时WEB应该把待播放录像文件的物理地址找到,并通过HTTP协议头把地址传回到流媒体服务器.

回调中处理的伪码处理过程如下:

录像回调中对于HTTP 和 RTMP的处理略有不同, 如下

if ( call == ‘play’ )

{

if( app == “http_vod” ){


从    name  中取出 名字, 这个名字是WEB拼接播放URL时加入的文件唯一标识,

比如 http://192.168.10.168:89/5642138795462.mp4

这个5642138795462.mp4文件并不是真正存在的, 5642138795462这个就是文件的ID或唯一的标识, 得到这个标识就可以从库中找到这个文件的相关信息

http_vod 时 name 值的格式为   name.mp4

}

if(  app == “vod”  ){


从    name  中取出名字,这个名字是WEB拼接播放URL时加入的文件唯一标识,

比如 rtmp://192.168.10.168:1935/vod/5642138795462.mp4   , 此处收到的 name的值等于 mp4:5642138795462.mp4  , 所以取文件标识的时候注意把前后信息都去掉,

5642138795462这个就是文件的ID或唯一的标识, 得到这个标识就可以从库中找到这个文件的相关信息

vod  时  name 值为   mp4:name.mp4

}

通过 name 从数据库找到 真实文件的物理径, 假设为 /var/ams/1.mp4

if( 找到物理路径 ){


在回复的HTTP头中加入头信息 如 : Filename:/var/ams/1.mp4    , Filename 是固定的, 后面是文件的物理路径

}

else{


暂时不用处理

}

}

———————————————————————————————————————-


  • 博文目的

这篇博文主要让大家能更加清晰服务器怎么使用, 如果只看文档大家可能还是一团雾.

服务器本身只是一个核心, 所有接口都标准HTTP协议, 都是提供给开发使用, 如果只是使用简单功能可以不使用接口. 但要想形成产品就要用相关的控制,这时的接口就显的很重要了. 所以我就写了这个简单博文, 主要是起抛砖引玉的作用. 如果还有问题可以留言.

大家也可以加入这个群, 大家都是使用者, 可以相互讨论.



版权声明:本文为wanghaisheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。