我們常見的視頻流接入協議包括RTSP協議、RTMP協議、GB28181協議三種,針對這三種協議,TSINGSEE青犀視頻研發了不同的視頻解決方案,其中EasyDSS是支持推流協議RTMP接入的平臺,它與其他平臺不同的點在于EasyDSS可同時支持視頻直播和點播,

EasyDSS添加虛擬直播后,將直播源設定為點播資源,推送到直播間,正常的來說,推送到直播間的點播視頻在沒有關閉虛擬直播的時候,會一直回圈播放,但是實際上我們測驗發現點播視頻結束后,并沒有回圈播放,而是直接停止了,

對于這種問題,我們首先考慮的是推流的命令是否存在問題,因此測驗的時候我們關注了該命令,發現命令中是對m3u8進行拉流然后再推流,但是命令中有-vcodec copy -acodec copy ,這個命令是針對H264的,不進行轉碼操作,所以導致直播出現斷層,無法回圈播放,
我們可以對代碼做以下修改:
// 轉換成 h264 有兩種引數操作 libx264、h264_nvenc
// copy 為默認原資料編碼
if vod.Rotate == 0 {
switch vod.VidioCodecOriginal {
case "H.264":
vcodecstr = "copy"
case "VP9":
// vp9 編碼,僅能夠轉換成 h265 編碼, nvenc 代表設定編碼
vcodecstr = "hevc_nvenc"
case "HEVC":
// hevc 編碼為 h265 編碼,轉換成 h264,有兩種 h264_nvenc、libx264、copy
// libx264 會導致 cpu 使用率 為 100%
vcodecstr = h265VideoTranWay
default:
vcodecstr = videoTranWay
}
}
if strings.EqualFold(vod.AudioCodecOriginal, "AAC") {
acodecstr = "copy"
}
//判斷點播源檔案是否存在,并且是視頻優先從源檔案
if vod.Path != consts.EmptyString && efile.Exisit(filepath.Join(conf2.GetConf().DirVODSrc, vod.Path)) && strings.Contains(vod.Type, "video") {
src = filepath.Join(conf2.GetConf().DirVODSrc, vod.Path)
if vod.VideoCodec == "H.264" && vod.AudioCodec == "AAC" && vod.Rotate == 0 {
vcodec = []string{vcodecstr}
acodec = []string{acodecstr}
}
新代碼中不對m3u8檔案進行拉流,是將點播的源資料當做視頻源進行拉流,然后通過不同的檔案編碼型別,進行不同的命令操作拉流,

當然如果不想點播視頻回圈播放,也可以自行修改,如果大家有接入RTMP協議視頻流的需求,可以聯系我們獲取EasyDSS平臺的測驗賬號進行測驗,如果還想了解更多視頻相關解決方案,歡迎訪問TSINGSEE青犀視頻官方網站,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239592.html
標籤:其他
