Toybrick

标题: 3399PRO除了mpph264enc编码,还有其他的软编码么? [打印本页]

作者: 勇Z的心    时间: 2019-8-2 13:42
标题: 3399PRO除了mpph264enc编码,还有其他的软编码么?
如题,请知道的回复下,哎,发帖老是石沉大海!!!

作者: 勇Z的心    时间: 2019-8-2 15:22
hisping 发表于 2019-8-2 14:37
硬解码:
支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps
1080P 多格式视频解码 (WMV, MPEG-1/2/ ...

mpph264enc总是报错
gst_mpp_video_enc_stop: assertion failedg_atomic_int_get_FALSE)
作者: 勇Z的心    时间: 2019-8-2 15:25
mpph264enc总是报错
gst_mpp_video_enc_stop: assertion failedg_atomic_int_get_FALSE)
请问怎么解决,麻烦回复下 @hisping你们有技术支持电话?买了你们的板子,怎么都没有技术支持的呀!
作者: jefferyzhang    时间: 2019-8-4 23:00
你可以直接调用mpp库来解决,不是一定要通过gstreamer来绕的。
作者: 勇Z的心    时间: 2019-8-5 10:35
jefferyzhang 发表于 2019-8-4 23:00
你可以直接调用mpp库来解决,不是一定要通过gstreamer来绕的。

我们需要使用你们的gstreamer-rockchip来进行编码推流,望gstreamer-rockchip研发人员能尽快看下解决该问题,项目紧急,急望回复!!!!谢谢!!!
作者: 勇Z的心    时间: 2019-8-6 10:25
本帖最后由 勇Z的心 于 2019-8-6 11:04 编辑

import cv2
import gi

gi.require_version('Gst', '1.0')
gi.require_version('GstRtspServer', '1.0')
from gi.repository import Gst, GstRtspServer, GObject


class SensorFactory(GstRtspServer.RTSPMediaFactory):
    def __init__(self, **properties):
        super(SensorFactory, self).__init__(**properties)
        self.cap = cv2.VideoCapture(0)
        self.number_frames = 0
        self.fps = 30
        self.duration = 1 / self.fps * Gst.SECOND  # duration of a frame in nanoseconds
        self.launch_string = 'appsrc name=source is-live=true block=true format=GST_FORMAT_TIME '\
           'caps=video/x-raw,format=BGR,width=640,height=480,framerate={}/1 '\
           '! videoconvert ! video/x-raw,format=I420 '\
           '! mpph264enc '\
           '! rtph264pay config-interval=1 name=pay0 pt=96'.format(self.fps)
        print('init end')

    def on_need_data(self, src, lenght):
        print('on_need_data start')
        if self.cap.isOpened():
            ret, frame = self.cap.read()
            if ret:
                data = frame.tostring()
                buf = Gst.Buffer.new_allocate(None, len(data), None)
                buf.fill(0, data)
                buf.duration = self.duration
                timestamp = self.number_frames * self.duration
                buf.pts = buf.dts = int(timestamp)
                buf.offset = timestamp
                self.number_frames += 1
                retval = src.emit('push-buffer', buf)
                print('pushed buffer, frame {}, duration {} ns, durations {} s'.format(self.number_frames, self.duration, self.duration / Gst.SECOND))
                if retval != Gst.FlowReturn.OK:
                    print(retval)
        print('on_need_data end')

    def do_create_element(self, url):
        print('do_create_element')
        return Gst.parse_launch(self.launch_string)

    def do_configure(self, rtsp_media):
        print('do_configure start')
        self.number_frames = 0
        appsrc = rtsp_media.get_element().get_child_by_name('source')
        appsrc.connect('need-data', self.on_need_data)
        print('do_configure end')


class GstServer(GstRtspServer.RTSPServer):
    def __init__(self, **properties):
        print('GstServer __init__ start')
        super(GstServer, self).__init__(**properties)
        self.factory = SensorFactory()
        self.factory.set_shared(True)
        self.get_mount_points().add_factory("/test", self.factory)
        self.attach(None)
        print('GstServer __init__ end')


GObject.threads_init()
Gst.init(None)

server = GstServer()

loop = GObject.MainLoop()
loop.run()


作者: 勇Z的心    时间: 2019-8-6 10:29
本帖最后由 勇Z的心 于 2019-8-6 10:34 编辑

看了gstreamer-rockchip源码,为什么只有把active赋值为TRUE的语句,而没有赋值为FALSE的语句?
C:\Users\Yongzdexin\Desktop\微信图片_20190731145439
作者: 勇Z的心    时间: 2019-8-6 10:29
本帖最后由 勇Z的心 于 2019-8-6 10:33 编辑

错误信息如图。
作者: 勇Z的心    时间: 2019-8-6 11:07
toybrick 发表于 2019-8-5 15:21
请提供完整出错的log,并告诉我们你做了什么操作,方便我们这边的工程师复现这个问题 ...

已经贴出了python脚本代码,访问地址是rtsp://192.168.1.100:8554/test,其中IP地址是3399pro的IP。使用VLC可以在电脑上看到视频流,但关闭VLC停止读取视频流时,会异常,每次必现,很容易复现!
作者: 勇Z的心    时间: 2019-8-9 16:13
技术支持有收到么,麻烦回复一下可以么
作者: jefferyzhang    时间: 2019-8-21 09:23
首先,Gstreamer属于社区,我们这个社区专注于人工智能,不负责维护其他开源库。我们只能帮忙复现和提交问题,但是我们没有能力维护这个库,这个社区应该也不会有人懂得如何回你这问题。
所以:
1. 如果对gstreamer-rockchip有问题,请直接在github该项目的issues里提问,会有对应维护人员解答。
2. 源码都是开放的,请自行调试,他们帮忙对接了gstreamer,不意味着项目所有gstreamer问题他们还有义务帮你们维护。
3. 做项目不建议用gstreamer,效率很低,传递的都是虚拟地址,无法发挥VPU所有能力。我们社区只建议使用MPP库。





欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3