首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gstreamer rtmp接收器到Azure Media Services的实况传递事件

Gstreamer rtmp接收器到Azure Media Services的实况传递事件
EN

Stack Overflow用户
提问于 2018-12-13 11:17:12
回答 1查看 760关注 0票数 1

我正在尝试使用一个on gstreamer编码器管道来向Azure媒体服务播放现场视频。

使用videotestsrc测试管道似乎可以很好地使用折叠字符串:

代码语言:javascript
复制
gst-launch-1.0 -e videotestsrc ! videoconvert ! video/x-raw,format=I420 ! x264enc tune=zerolatency byte-stream=true threads=4 ! flvmux streamable=true ! rtmpsink location='rtmp://xxxx.media.azure.net:1935/live/xxxx/mystream live=true flashver=FMLE/3.0(compatible;FMSc/1.0)'

我可以在Azure AMS仪表板上观看溪流的预览。

现在,如果我尝试使用appsrc管道从我的python脚本使用OpenCV (用gstreamer支持编译),预览窗口中没有显示任何内容。但是,正在为流创建一个资产,我能够通过AMS服务查看这个资产流。

下面的python3脚本使用OpenCV版本4.0.0的自定义构建,并编译了gstreamer和cuda。

代码语言:javascript
复制
import sys
import time
import urllib
import cv2
import numpy as np
from datetime import datetime


TEST_CARD = 'https://upload.wikimedia.org/wikipedia/commons/c/c4/PM5544_with_non-PAL_signals.png'
HEADLINE = 'AZURE LIVE STREAM'

RTMP_SERVER = 'rtmp://xxxx.media.azure.net:1935/live/xxxx/mystream'
GST_PIPE = "appsrc ! videoconvert ! video/x-raw,format=I420 ! x264enc tune=zerolatency byte-stream=true threads=4 ! flvmux streamable=true ! rtmpsink location='{0} live=true flashver=FMLE/3.0(compatible;FMSc/1.0)' ".format(RTMP_SERVER)

if __name__ == '__main__':
    print ('Azure Mediastream tester')
    print(sys.version)
    print (cv2.getBuildInformation())

    imgRequest = urllib.request.urlopen(TEST_CARD)
    imgArray = np.asarray(bytearray(imgRequest.read()), dtype=np.uint8)
    imgO = cv2.imdecode(imgArray, -1)

    h,w,c = imgO.shape
    font = cv2.FONT_HERSHEY_PLAIN
    line = cv2.LINE_AA
    cv2.putText(imgO,HEADLINE,(302,85),font,1,(255,255,255),2,line)

    print(HEADLINE)
    print ('Showing: {0} at [h:{1},w:{2},c:{3}]'.format(TEST_CARD,h,w,c))
    print ('Opening GSTREAM {0}'.format(GST_PIPE))

    try:
        fcc = cv2.VideoWriter.fourcc ('X','2','6','4')
        stream = cv2.VideoWriter(GST_PIPE,fcc,25.0,(w,h))
        while True:
            currentTime = datetime.now()
            img = imgO.copy()
            cv2.putText(img,str(currentTime),(283,460),font,1,(255,255,255),1,line)

            stream.write(img)
            cv2.imshow(HEADLINE,img)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    finally:
        stream.release()
        cv2.destroyAllWindows()
        print ('DONE')

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 13:41:19

因此,在与微软的Azure媒体服务团队进行了广泛的对话之后,事实证明,Azure Media Player需要有一条音轨才能播放。

将GST_PIPE更改为:

代码语言:javascript
复制
GST_PIPE = "appsrc ! videoconvert ! video/x-raw,format=I420 ! x264enc tune=zerolatency byte-stream=true threads=4 ! flvmux name=mux ! rtmpsink location='{0} live=true flashver=FMLE/3.0(compatibble;FMSc/1.0)' audiotestsrc is-live=true ! audioconvert ! audioresample ! audio/x-raw,rate=48000 ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4 ! mux.".format(RTMP_SERVER)

在我的Python代码中,使一切按预期工作(除了Azure门户中的通道预览面板(仍然不知道那里发生了什么))。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53760648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档