648540858
2024-05-24 3a056acbc1f0a5b601880659fe7719ca3170a9d6
合并271分支
2个文件已修改
48 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -11,12 +11,16 @@
import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@Service
public class MediaServiceImpl implements IMediaService {
    private final static Logger logger = LoggerFactory.getLogger(MediaServiceImpl.class);
    @Autowired
    private IRedisCatchStorage redisCatchStorage;
@@ -57,6 +61,7 @@
            calld = streamAuthorityInfo.getCallId();
        }
        JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, app, stream);
        logger.info("[zlm getMediaList]结果: /n {}", mediaList);
        if (mediaList != null) {
            if (mediaList.getInteger("code") == 0) {
                JSONArray data = mediaList.getJSONArray("data");
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -209,49 +209,6 @@
    }
    /**
     * 将不是h264的视频通过ffmpeg 转码为h264 + aac
     * @param streamId 流ID
     */
    @Operation(summary = "将不是h264的视频通过ffmpeg 转码为h264 + aac", security = @SecurityRequirement(name = JwtUtils.HEADER))
    @Parameter(name = "streamId", description = "视频流ID", required = true)
    @PostMapping("/convert/{streamId}")
    public JSONObject playConvert(@PathVariable String streamId) {
//        StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
        InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, streamId);
        if (inviteInfo == null || inviteInfo.getStreamInfo() == null) {
            logger.warn("视频转码API调用失败!, 视频流已经停止!");
            throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到视频流信息, 视频流可能已经停止");
        }
        MediaServerItem mediaInfo = mediaServerService.getOne(inviteInfo.getStreamInfo().getMediaServerId());
        JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaInfo, streamId);
        if (!rtpInfo.getBoolean("exist")) {
            logger.warn("视频转码API调用失败!, 视频流已停止推流!");
            throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到视频流信息, 视频流可能已停止推流");
        } else {
            String dstUrl = String.format("rtmp://%s:%s/convert/%s", "127.0.0.1", mediaInfo.getRtmpPort(),
                    streamId );
            String srcUrl = String.format("rtsp://%s:%s/rtp/%s", "127.0.0.1", mediaInfo.getRtspPort(), streamId);
            JSONObject jsonObject = zlmresTfulUtils.addFFmpegSource(mediaInfo, srcUrl, dstUrl, "1000000", true, false, null);
            logger.info(jsonObject.toJSONString());
            if (jsonObject != null && jsonObject.getInteger("code") == 0) {
                JSONObject data = jsonObject.getJSONObject("data");
                if (data != null) {
                    JSONObject result = new JSONObject();
                    result.put("key", data.getString("key"));
                    StreamInfo streamInfoResult = mediaService.getStreamInfoByAppAndStreamWithCheck("convert", streamId, mediaInfo.getId(), false);
                    result.put("StreamInfo", streamInfoResult);
                    return result;
                }else {
                    throw new ControllerException(ErrorCode.ERROR100.getCode(), "转码失败");
                }
            }else {
                throw new ControllerException(ErrorCode.ERROR100.getCode(), "转码失败");
            }
        }
    }
    /**
     * 结束转码
     */
    @Operation(summary = "结束转码", security = @SecurityRequirement(name = JwtUtils.HEADER))