1.查询该流是否存在,存在就不再进行转流。
/**
* 获取流ID
*/
public static boolean getStream(Long cameraId) {
String localIp = "";
try
{
localIp = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e)
{
e.printStackTrace();
}
String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/getMediaList"
,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp");
JSONObject mediaList = JSONObject.parseObject(result);
// 返回json的数组
JSONArray mediaData = mediaList.getJSONArray("data");
if(mediaData != null){
for (int i = 0; i < mediaData.size(); i++) {
JSONObject jsonObject2 = mediaData.getJSONObject(i);
System.out.println(jsonObject2.getString("stream"));
if(jsonObject2.getString("stream").equals(cameraId.toString())){
System.out.println("找到这个流的stream");
return true;
}else {
return false;
}
}
}
return false;
}
2.获取当前查看人数
/**
* 获取当前观看人数
*/
public static boolean getStreamRead(Long cameraId) {
String localIp = "";
try
{
localIp = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e)
{
e.printStackTrace();
}
String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/getMediaList"
,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp&stream="+cameraId);
JSONObject mediaList = JSONObject.parseObject(result);
// 返回json的数组
JSONArray mediaData = mediaList.getJSONArray("data");
System.out.println("查询观看人数接口返回"+mediaData);
if(mediaData != null){
for (int i = 0; i < mediaData.size(); i++) {
JSONObject jsonObject2 = mediaData.getJSONObject(i);
System.out.println("返回人数"+jsonObject2.getString("totalReaderCount"));
if(Integer.valueOf(jsonObject2.getString("totalReaderCount"))<2){
return true;
}else {
return false;
}
}
}
return false;
}
3.关闭某一个 正在转的流
/**
* 关闭流///
* {
* "code" : 0,
* "count_hit" : 1, # 筛选命中的流个数
* "count_closed" : 1 # 被关闭的流个数,可能小于count_hit
* }
*/
public static void closeStreams(String cameraId) {
String localIp = "";
try
{
localIp = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e)
{
e.printStackTrace();
}
String result = HttpUtils.sendGet("http://"+localIp+":8090/index/api/delFFmpegSource"
,"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&schema=rtmp&stream="+cameraId);
JSONObject mediaList = JSONObject.parseObject(result);
// 返回json的数组
String countHit = mediaList.getString("count_hit");
String countClosed = mediaList.getString("count_closed");
System.out.println("筛选命中的流个数"+countHit);
System.out.println("被关闭的流个数"+countClosed);
}
4.转流
public static String addFFmpegSource(String cameraIp,Long teamId ,String localIp) {
String url ="http://"+localIp+":8090/index/api/addFFmpegSource?" +
"secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc" +
//HuaWei123 = a1234567
"&src_url=rtsp://admin:HuaWei123@"+cameraIp+"/LiveMedia/ch1/Media1" +
"&dst_url=rtmp://127.0.0.1/live/" +teamId+
"&timeout_ms=10000" +
"&enable_hls=n" +
"&enable_mp4=n";
JSONObject media = JSONObject.parseObject(HttpUtils.sendGet(url,null));
// 返回json的数组
if("-1".equals(media.getString("code"))) {
return null;
}else {
String key = media.getJSONObject("data").getString("key");
return key;
}
}
5.调用
/**
* 获取门架摄像头 播放地址
*/
@Log(title = "camera", businessType = BusinessType.OTHER)
@GetMapping("/getPlayUrl/{cameraIp}/{id}")
@ResponseBody
public AjaxResult getPlayUrl(@PathVariable("cameraIp") String cameraIp,@PathVariable("id") Long id) {
String localIp = "";
try
{
localIp = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e)
{
e.printStackTrace();
}
if(SendCmd.getStream(id)){
System.out.println("之前就有这个流");
return AjaxResult.success("http://"+localIp+":8090/live/"+id+".flv");
}else{
//cameraUrl 色相头Ip
//name 色相头编号
String key = SendCmd.addFFmpegSource(cameraIp,id,localIp);
if(key != null){
//把KEY 存入数据库
System.out.println("请注意这个是新添加的日志-------------------》推送视频后获取的KEY"+key);
Camera camera = new Camera();
camera.setCameraId(id);
camera.setRemark(key);
cameraService.updateCamera(camera);
System.out.println("请注意这个是新添加的日志-------------------》把key已经更新到数据库中设备ID是"+id);
return AjaxResult.success("http://"+localIp+":8090/live/"+id+".flv");
}else {
return AjaxResult.error("");
}
}
}
2560

被折叠的 条评论
为什么被折叠?



