GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2023-04-26T15:39:00Zhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1310glupload: EGL regression with `meta->format != info->finfo->format`2023-04-26T15:39:00ZSebastian Drögeglupload: EGL regression with `meta->format != info->finfo->format`Introduced by https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687
Reproducible via
```console
$ GST_GL_WINDOW=egl gst-launch-1.0 videotestsrc ! video/x-raw,format=I420 ! glvideomixer ! fakesink
[...]
(gst-launch-1....Introduced by https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687
Reproducible via
```console
$ GST_GL_WINDOW=egl gst-launch-1.0 videotestsrc ! video/x-raw,format=I420 ! glvideomixer ! fakesink
[...]
(gst-launch-1.0:1318439): GStreamer-Video-CRITICAL **: 15:55:47.580: gst_video_frame_map_id: assertion 'info->finfo->format == meta->format' failed
0:00:00.735363225 1318439 0x55e1750dfc00 ERROR glmixer gstglmixer.c:124:gst_gl_mixer_pad_prepare_frame:<mixer:sink_0> Failed to map input frame
[...]
```
GLX works fine.
CC @thaytanhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2525Not getting exact size of buffer from appsink after audioresample2023-04-26T14:41:26ZBhoomil ChavdaNot getting exact size of buffer from appsink after audioresampleI am using below vesion of pipeline in my C/C++ code,
`appsrc ! audioconvert ! audioresample ! "audio/x-raw, rate=48000, format=F32LE" ! appsink`
Basically there are two threads,
First thread is push buffer using `gst_app_src_push_buffe...I am using below vesion of pipeline in my C/C++ code,
`appsrc ! audioconvert ! audioresample ! "audio/x-raw, rate=48000, format=F32LE" ! appsink`
Basically there are two threads,
First thread is push buffer using `gst_app_src_push_buffer` by capture buffer from ALSA blocking API pcm_readi at every 4ms interval.
Second thread is pull buffer using `gst_app_sink_pull_sample` blocking call.
When ALSA capture device input is changed from 48KHz to 44.1KHz or 96KHz I have putted my pipline into NULL and then update appsrc caps property and then PLAY again.
My code is working fine when input is 48KHz S16LE i.e. 768bytes input and 48KHz F32LE i.e. 1536 bytes output.
But having issue with 44.1KHz and 96KHz.
For example in case of 96KHz I am getting 1280 bytes of buffer and then 7 times 1536 8th location again 1280 so on ...
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
As per theory, input push buffer len is 1536 bytes having 96KHz rate and after resample 1536 bytes having 48KHz output but why this 1280 size of buffer is coming. This is push model of appsrc I'm using without utilsing need-data enough-data signals. Am I missing any property setting with appsrc.https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/995Not getting exact size of buffer from appsink after audioresample2023-04-26T11:20:05ZBhoomil ChavdaNot getting exact size of buffer from appsink after audioresampleI am using below vesion of pipeline in my C/C++ code,
`appsrc ! audioconvert ! audioresample ! "audio/x-raw, rate=48000, format=F32LE" ! appsink`
Basically there are two threads,
First thread is push buffer using `gst_app_src_push_buffe...I am using below vesion of pipeline in my C/C++ code,
`appsrc ! audioconvert ! audioresample ! "audio/x-raw, rate=48000, format=F32LE" ! appsink`
Basically there are two threads,
First thread is push buffer using `gst_app_src_push_buffer` by capture buffer from ALSA blocking API pcm_readi at every 4ms interval.
Second thread is pull buffer using `gst_app_sink_pull_sample` blocking call.
When ALSA capture device input is changed from 48KHz to 44.1KHz or 96KHz I have putted my pipline into NULL and then update appsrc caps property and then PLAY again.
My code is working fine when input is 48KHz S16LE i.e. 768bytes input and 48KHz F32LE i.e. 1536 bytes output.
But having issue with 44.1KHz and 96KHz.
For example in case of 96KHz I am getting 1280 bytes of buffer and then 7 times 1536 8th location again 1280 so on ...
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1536
Pull Buffer size -> 1280 <--- wrong
As per theory, input push buffer len is 1536 bytes having 96KHz rate and after resample 1536 bytes having 48KHz output but why this 1280 size of buffer is coming. This is push model of appsrc I'm using without utilsing need-data enough-data signals. Am I missing any property setting with appsrc.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1773wasapi2src on Windows10 21H22023-04-26T10:44:12Zgtk2kwasapi2src on Windows10 21H2https://gstreamer.freedesktop.org/download/
I downloaded the "1.22.2 runtime installer" from here and installed it on Windows10 21H2.
But wasapi2src doesn't have loopback-target-pid property.
How can I use wasapi2src with loopback-target...https://gstreamer.freedesktop.org/download/
I downloaded the "1.22.2 runtime installer" from here and installed it on Windows10 21H2.
But wasapi2src doesn't have loopback-target-pid property.
How can I use wasapi2src with loopback-target-pid?
```
> gst-inspect-1.0 wasapi2src
Factory Details:
Rank primary + 1 (257)
Long-name Wasapi2Src
Klass Source/Audio/Hardware
Description Stream audio from an audio capture device through WASAPI
Author Nirbheek Chauhan <nirbheek@centricular.com>, Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>, Seungha Yang <seungha@centricular.com>
Documentation https://gstreamer.freedesktop.org/documentation/wasapi2/wasapi2src.html
Plugin Details:
Name wasapi2
Description Windows audio session API plugin
Filename D:\gstreamer\1.0\msvc_x86_64\lib\gstreamer-1.0\gstwasapi2.dll
Version 1.22.2
License LGPL
Source module gst-plugins-bad
Documentation https://gstreamer.freedesktop.org/documentation/wasapi2/
Source release date 2023-04-11
Binary package GStreamer Bad Plug-ins source release
Origin URL Unknown package origin
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseSrc
+----GstPushSrc
+----GstAudioBaseSrc
+----GstWasapi2Src
Implemented Interfaces:
GstStreamVolume
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
audio/x-raw
format: { (string)F64LE, (string)F64BE, (string)F32LE, (string)F32BE, (string)S32LE, (string)S32BE, (string)U32LE, (string)U32BE, (string)S24_32LE, (string)S24_32BE, (string)U24_32LE, (string)U24_32BE, (string)S24LE, (string)S24BE, (string)U24LE, (string)U24BE, (string)S20LE, (string)S20BE, (string)U20LE, (string)U20BE, (string)S18LE, (string)S18BE, (string)U18LE, (string)U18BE, (string)S16LE, (string)S16BE, (string)U16LE, (string)U16BE, (string)S8, (string)U8 }
layout: interleaved
rate: [ 1, 2147483647 ]
channels: [ 1, 2147483647 ]
Clocking Interaction:
element is supposed to provide a clock but returned NULL
Element has no URI handling capabilities.
Pads:
SRC: 'src'
Pad Template: 'src'
Element Properties:
actual-buffer-time : Actual configured size of audio buffer in microseconds
flags: readable
Integer64. Range: -1 - 9223372036854775807 Default: -1
actual-latency-time : Actual configured audio latency in microseconds
flags: readable
Integer64. Range: -1 - 9223372036854775807 Default: -1
blocksize : Size in bytes to read per buffer (-1 = default)
flags: readable, writable
Unsigned Integer. Range: 0 - 4294967295 Default: 0
buffer-time : Size of audio buffer in microseconds. This is the maximum amount of data that is buffered in the device and the maximum latency that the source reports. This value might be ignored by the element if necessary; see "actual-buffer-time"
flags: readable, writable
Integer64. Range: 1 - 9223372036854775807 Default: 200000
device : WASAPI playback device as a GUID string
flags: readable, writable, changeable only in NULL or READY state
String. Default: null
dispatcher : ICoreDispatcher COM object to use. In order for application to ask permission of audio device, device activation should be running on UI thread via ICoreDispatcher. This element will increase the reference count of given ICoreDispatcher and release it after use. Therefore, caller does not need to consider additional reference count management
flags: writable, changeable only in NULL or READY state
Pointer. Write only
do-timestamp : Apply current stream time to buffers
flags: readable, writable
Boolean. Default: false
latency-time : The minimum amount of data to read in each iteration in microseconds. This is the minimum latency that the source reports. This value might be ignored by the element if necessary; see "actual-latency-time"
flags: readable, writable
Integer64. Range: 1 - 9223372036854775807 Default: 10000
loopback : Open render device for loopback recording
flags: readable, writable, changeable only in NULL or READY state
Boolean. Default: false
low-latency : Optimize all settings for lowest latency. Always safe to enable.
flags: readable, writable, changeable only in NULL or READY state
Boolean. Default: false
mute : Mute state of this stream
flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state
Boolean. Default: false
name : The name of the object
flags: readable, writable
String. Default: "wasapi2src0"
num-buffers : Number of buffers to output before sending EOS (-1 = unlimited)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: -1
parent : The parent of the object
flags: readable, writable
Object of type "GstObject"
provide-clock : Provide a clock to be used as the global pipeline clock
flags: readable, writable
Boolean. Default: true
slave-method : Algorithm used to match the rate of the masterclock
flags: readable, writable
Enum "GstAudioBaseSrcSlaveMethod" Default: 2, "skew"
(0): resample - GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE
(1): re-timestamp - GST_AUDIO_BASE_SRC_SLAVE_RE_TIMESTAMP
(2): skew - GST_AUDIO_BASE_SRC_SLAVE_SKEW
(3): none - GST_AUDIO_BASE_SRC_SLAVE_NONE
typefind : Run typefind before negotiating (deprecated, non-functional)
flags: readable, writable, deprecated
Boolean. Default: false
volume : Volume of this stream
flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state
Double. Range: 0 - 1 Default: 1
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2498[Android] GstDeviceMonitor start fails2023-04-26T08:34:27ZReza Alizadeh Majd[Android] GstDeviceMonitor start failstrying to get the list of video/audio devices on Android, the `GstDeviceMonitor` fails to start with the following error:
```
04-18 12:20:38.896 30341 30362 W GStreamer+devicemonitor: 0:00:00.110287198 0x72c1a5e790 ../gst/gstdevicemoni...trying to get the list of video/audio devices on Android, the `GstDeviceMonitor` fails to start with the following error:
```
04-18 12:20:38.896 30341 30362 W GStreamer+devicemonitor: 0:00:00.110287198 0x72c1a5e790 ../gst/gstdevicemonitor.c:527:gst_device_monitor_start:<devicemonitor0> No providers match the current filters
04-18 12:20:38.896 30341 30362 W demo-monitor: MONITOR: failed to start device monitor
```
we also found the following errors among the GStreamer logs:
```
04-18 12:20:38.887 30341 30362 E GStreamer+ahs: 0:00:00.101531989 0x72c1a5e790 ../sys/androidmedia/gst-android-hardware-sensor.c:596:_init_classes Failed to initialize Android classes: Failed to call Java method: java.lang.ClassNotFoundException: Didn't find class "org/freedesktop/gstreamer/androidmedia/GstAhsCallback" on path: DexPathList[[zip file "/data/app/~~tQjItFlRWaKiBy6K9VkvGQ==/org.qtproject.example-a2jAYwcthrTNqRCqXzgHfQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~tQjItFlRWaKiBy6K9VkvGQ==/org.qtproject.example-a2jAYwcthrTNqRCqXzgHfQ==/lib/arm64, /data/app/~~tQjItFlRWaKiBy6K9VkvGQ==/org.qtproject.example-a2jAYwcthrTNqRCqXzgHfQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64, /product/lib64]]
04-18 12:20:38.887 30341 30362 E GStreamer+ahs: java.lang.ClassNotFoundException: Didn't find class "org/freedesktop/gstreamer/androidmedia/GstAhsCallback" on path: DexPathList[[zip file "/data/app/~~tQjItFlRWaKiBy6K9VkvGQ==/org.qtproject.example-a2jAYwcthrTNqRCqXzgHfQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~tQjItFlRWaKiBy6K9VkvGQ==/org.qtproject.example-a2jAYwcthrTNqRCqXzgHfQ
```
```
04-18 12:20:38.886 30341 30362 E GStreamer+ahc: 0:00:00.100543187 0x72c1a5e790 ../sys/androidmedia/gst-android-hardware-camera.c:1777:_init_classes Failed to initialize android.hardware.Camera classes: Failed to get static field ID EFFECT_EMBOSS (Ljava/lang/String;): java.lang.NoSuchFieldError: no "Ljava/lang/String;" field "EFFECT_EMBOSS" in class "Landroid/hardware/Camera$Parameters;" or its superclasses
04-18 12:20:38.886 30341 30362 E GStreamer+ahc: java.lang.NoSuchFieldError: no "Ljava/lang/String;" field "EFFECT_EMBOSS" in class "Landroid/hardware/Camera$Parameters;" or its superclasses
```
- the repository to reproduce this issue: https://git.pantherx.org/mirror/gstreamer-qt
- full log related to the application execution: https://git.pantherx.org/mirror/gstreamer-qt/-/blob/master/demo-monitor.log
- Test environment:
- Qt 5.15.8
- Gradle 7.2
- GStreamer 1.20.6 built with `qt5` variant using `cerbero` ([ref](https://git.pantherx.org/mirror/gstreamer-qt/-/blob/master/Dockerfile#L48-51))
- Android SDK 32
- Android NDK 21https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1771Gstreamer WebRTC callee can't send video to remote2023-04-25T13:56:59Z蒙金Gstreamer WebRTC callee can't send video to remoteIt is originally posted [here](https://stackoverflow.com/questions/76061774/gstreamer-webrtc-callee-cant-send-video-to-remote).
We are writing a sample code of webrtc to transmit/receive video/audio to/from browser with GStreamer. We a...It is originally posted [here](https://stackoverflow.com/questions/76061774/gstreamer-webrtc-callee-cant-send-video-to-remote).
We are writing a sample code of webrtc to transmit/receive video/audio to/from browser with GStreamer. We are referencing the demo: <https://github.com/centricular/gstwebrtc-demos/blob/master/sendrecv/gst/webrtc_sendrecv.py>. It works fine.
But there is a small difference in our code of cloud side. In the `gstwebrtc` demo code, `webrtcbin` creates an offer and the browser responds with an answer. In our project, the browser creates an offer and `webrtcbin` responds with an answer.
We modify the demo code above to implement the reverse flow(browser offer -> webrtcbin). But there is no video stream on the browser side. The `onTrack` callback in the browser is never invoked.
My question is, how to send video/audio to the browser when `webrtcbin` works as a callee? By the way, we are using `gstreamer 1.20.3`.
And the code is attached:
```python
import paho.mqtt.client as mqtt
import ssl
import json
import time
import sys
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
gi.require_version('GstWebRTC', '1.0')
from gi.repository import GstWebRTC
gi.require_version('GstSdp', '1.0')
from gi.repository import GstSdp
PIPELINE_DESC = '''
webrtcbin name=sendrecv bundle-policy=max-bundle stun-server=stun://turn.jujiucloud.com:3478,
v4l2src ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay !
queue ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! sendrecv.
audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=96 ! sendrecv.
'''
MQTT_URL = 'mqtt.abceefg.com'
MQTT_USERNAME = 'abceefg'
MQTT_PASSWORD = 'abceefg'
MQTT_IPC_TOPIC_PREFIX = 'abceefg'
USN = 'abceefg'
webrtc = None
peers = {}
def check_plugins():
needed = ['opus', 'vpx', 'nice', 'webrtc', 'dtls', 'srtp', 'rtp', 'rtpmanager', 'videotestsrc', 'audiotestsrc']
missing = list(filter(lambda p: Gst.Registry.get().find_plugin(p) is None, needed))
if len(missing):
print('Missing gstreamer plugins:', missing)
return False
return True
def on_set_description(promise, webrtc, client, msg_obj):
print('on_set_description')
promise.wait()
promise = Gst.Promise.new_with_change_func(on_answer_created, webrtc, client, msg_obj)
webrtc.emit('create-answer', None, promise)
def on_answer_created(promise, webrtc, client, msg_obj):
print('on_answer_created')
promise.wait()
reply = promise.get_reply()
answer = reply.get_value('answer')
if not answer:
print('no answer created.')
return
promise = Gst.Promise.new()
webrtc.emit('set-local-description', answer, promise)
promise.interrupt()
mqtt_answer = {
'timestamp': time.time(),
'source': msg_obj['destination'],
'destination': msg_obj['source'],
'type': 'webrtc_signal',
'subtype': 'answer',
'answer': {
'type': 'answer',
'sdp': answer.sdp.as_text()
},
}
# print(mqtt_answer)
client.publish(msg_obj['source'], json.dumps(mqtt_answer))
def on_negotiation_needed(element):
print('on_negotiation_needed')
def send_ice_candidate_message(_, mlineindex, candidate, userdata):
(client, msg_obj) = userdata
mqtt_ice = {
'timestamp': time.time(),
'source': msg_obj['destination'],
'destination': msg_obj['source'],
'type': 'webrtc_signal',
'subtype': 'candidate',
'candidate': {
'candidate': candidate,
'sdpMLineIndex': mlineindex,
'sdpMid': '0'
},
}
# print(send_ice_candidate_message, mqtt_ice)
client.publish(msg_obj['source'], json.dumps(mqtt_ice))
def on_connection_state_notify(webrtc, state):
print(webrtc.get_property('connection-state'))
return
def on_incoming_stream(_, pad):
print('on_incoming_stream', pad.direction)
caps = pad.get_current_caps()
name = caps.to_string()
print('on_incoming_stream', name)
def on_connect(client, userdata, flags, rc, properties):
print('mqtt connected')
client.subscribe(MQTT_IPC_TOPIC_PREFIX + USN)
def on_disconnect(client, userdata, rc, properties):
print('mqtt disconnect')
def on_subscribe(client, userdata, mid, rc, properties):
print('Subscribed.')
def on_message(client, userdata, msg):
msg_obj = json.loads(msg.payload)
# print('mqtt received', msg_obj)
if msg_obj['type'] != 'webrtc_signal':
print('Unknown type: %s' % msg_obj['type'])
return
if msg_obj['subtype'] == 'offer':
print('process offer')
pipe = Gst.parse_launch(PIPELINE_DESC)
webrtc = pipe.get_by_name('sendrecv')
webrtc.connect('on-negotiation-needed', on_negotiation_needed)
webrtc.connect('on-ice-candidate', send_ice_candidate_message, (client, msg_obj))
webrtc.connect('pad-added', on_incoming_stream)
webrtc.connect('notify::connection-state', on_connection_state_notify)
pipe.set_state(Gst.State.PLAYING)
peers[msg_obj['source']] = webrtc
print(peers)
offer_obj = msg_obj['offer']
assert(offer_obj['type'] == 'offer')
sdp = offer_obj['sdp']
res, sdpmsg = GstSdp.SDPMessage.new()
GstSdp.sdp_message_parse_buffer(bytes(sdp.encode()), sdpmsg)
offer = GstWebRTC.WebRTCSessionDescription.new(GstWebRTC.WebRTCSDPType.OFFER, sdpmsg)
promise = Gst.Promise.new_with_change_func(on_set_description, webrtc, client, msg_obj)
webrtc.emit('set-remote-description', offer, promise)
promise.wait()
elif msg_obj['subtype'] == 'candidate':
webrtc = peers[msg_obj['source']]
if not webrtc:
print('Unknown source of candidate')
return
print('Process ice...')
candidate_obj = msg_obj['candidate']
if not candidate_obj:
return
print(candidate_obj)
webrtc.emit('add-ice-candidate', candidate_obj['sdpMLineIndex'], candidate_obj['candidate'])
else:
print('Unknown subtype: %s' % msg_obj['subtype'])
return
Gst.init(None)
if not check_plugins():
sys.exit(1)
print(Gst.version())
client = mqtt.Client(client_id='test_tinker_board_2_webrtc', protocol=mqtt.MQTTv5)
client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_subscribe = on_subscribe
client.on_message = on_message
client.connect(MQTT_URL)
client.loop_forever()
```
The offer sent by the browser:
```text
v=0
o=- 1510238263320950742 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS a5532e2e-1efa-46cf-a66c-8c4a100d716f
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:YJn3
a=ice-pwd:QbCvGKsjzFPxFBvQYPRDJdSr
a=ice-options:trickle
a=fingerprint:sha-256 AA:57:14:42:E4:6B:D5:3E:DB:8E:E9:38:DE:63:9D:39:79:08:BA:99:7D:1D:96:CF:1F:96:58:8F:9E:41:16:CF
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:a5532e2e-1efa-46cf-a66c-8c4a100d716f c0a53b85-cfb3-43d0-aefe-742abcf5ac88
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000
a=ssrc:3745948409 cname:Q2GFJXf+QUwZmcpV
a=ssrc:3745948409 msid:a5532e2e-1efa-46cf-a66c-8c4a100d716f c0a53b85-cfb3-43d0-aefe-742abcf5ac88
m=video 9 UDP/TLS/RTP/SAVPF 45 46 47 48 35 36 37 38 100 101 98 99 96 97 102 103 104 105 106 107 108 109 127 125 39 40 41 42 43 44 112 113 114 115 116 49
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:YJn3
a=ice-pwd:QbCvGKsjzFPxFBvQYPRDJdSr
a=ice-options:trickle
a=fingerprint:sha-256 AA:57:14:42:E4:6B:D5:3E:DB:8E:E9:38:DE:63:9D:39:79:08:BA:99:7D:1D:96:CF:1F:96:58:8F:9E:41:16:CF
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:45 AV1/90000
a=rtcp-fb:45 goog-remb
a=rtcp-fb:45 transport-cc
a=rtcp-fb:45 ccm fir
a=rtcp-fb:45 nack
a=rtcp-fb:45 nack pli
a=rtpmap:46 rtx/90000
a=fmtp:46 apt=45
a=rtpmap:47 AV1/90000
a=rtcp-fb:47 goog-remb
a=rtcp-fb:47 transport-cc
a=rtcp-fb:47 ccm fir
a=rtcp-fb:47 nack
a=rtcp-fb:47 nack pli
a=fmtp:47 profile=1
a=rtpmap:48 rtx/90000
a=fmtp:48 apt=47
a=rtpmap:35 VP9/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=fmtp:35 profile-id=1
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:37 VP9/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=rtcp-fb:37 ccm fir
a=rtcp-fb:37 nack
a=rtcp-fb:37 nack pli
a=fmtp:37 profile-id=3
a=rtpmap:38 rtx/90000
a=fmtp:38 apt=37
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:103 rtx/90000
a=fmtp:103 apt=102
a=rtpmap:104 H264/90000
a=rtcp-fb:104 goog-remb
a=rtcp-fb:104 transport-cc
a=rtcp-fb:104 ccm fir
a=rtcp-fb:104 nack
a=rtcp-fb:104 nack pli
a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:105 rtx/90000
a=fmtp:105 apt=104
a=rtpmap:106 H264/90000
a=rtcp-fb:106 goog-remb
a=rtcp-fb:106 transport-cc
a=rtcp-fb:106 ccm fir
a=rtcp-fb:106 nack
a=rtcp-fb:106 nack pli
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=106
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:39 H264/90000
a=rtcp-fb:39 goog-remb
a=rtcp-fb:39 transport-cc
a=rtcp-fb:39 ccm fir
a=rtcp-fb:39 nack
a=rtcp-fb:39 nack pli
a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
a=rtpmap:40 rtx/90000
a=fmtp:40 apt=39
a=rtpmap:41 H264/90000
a=rtcp-fb:41 goog-remb
a=rtcp-fb:41 transport-cc
a=rtcp-fb:41 ccm fir
a=rtcp-fb:41 nack
a=rtcp-fb:41 nack pli
a=fmtp:41 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=f4001f
a=rtpmap:42 rtx/90000
a=fmtp:42 apt=41
a=rtpmap:43 H264/90000
a=rtcp-fb:43 goog-remb
a=rtcp-fb:43 transport-cc
a=rtcp-fb:43 ccm fir
a=rtcp-fb:43 nack
a=rtcp-fb:43 nack pli
a=fmtp:43 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=f4001f
a=rtpmap:44 rtx/90000
a=fmtp:44 apt=43
a=rtpmap:112 H264/90000
a=rtcp-fb:112 goog-remb
a=rtcp-fb:112 transport-cc
a=rtcp-fb:112 ccm fir
a=rtcp-fb:112 nack
a=rtcp-fb:112 nack pli
a=fmtp:112 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
a=rtpmap:113 rtx/90000
a=fmtp:113 apt=112
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rtpmap:49 flexfec-03/90000
a=rtcp-fb:49 goog-remb
a=rtcp-fb:49 transport-cc
a=fmtp:49 repair-window=10000000
```
The answer responded by `WebRTCBin`:
```text
v=0
o=- 1510238263320950742 2 IN IP4 0.0.0.0
s=-
t=0 0
a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=ice-ufrag:iNopjlp4xw5BzSeD57e9gG50EzJgCtCq
a=ice-pwd:1FDGS7Bl7vZVt9ND6t3qBSVg4o4zbUAO
a=mid:0
a=rtcp-mux
a=setup:active
a=rtpmap:111 OPUS/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=recvonly
a=fingerprint:sha-256 14:23:DD:E9:61:77:1C:74:25:A4:DD:3B:FD:5D:4B:B3:E6:9D:8B:2C:6B:D3:C2:59:62:6D:BB:F1:35:81:31:89
m=video 9 UDP/TLS/RTP/SAVPF 45
c=IN IP4 0.0.0.0
a=ice-ufrag:iNopjlp4xw5BzSeD57e9gG50EzJgCtCq
a=ice-pwd:1FDGS7Bl7vZVt9ND6t3qBSVg4o4zbUAO
a=mid:1
a=rtcp-mux
a=setup:active
a=rtpmap:45 AV1/90000
a=rtcp-fb:45 nack pli
a=rtcp-fb:45 ccm fir
a=rtcp-fb:45 transport-cc
a=inactive
a=fingerprint:sha-256 14:23:DD:E9:61:77:1C:74:25:A4:DD:3B:FD:5D:4B:B3:E6:9D:8B:2C:6B:D3:C2:59:62:6D:BB:F1:35:81:31:89
```
When I enable the debug information of gstreamer, I see this message:
```text
webrtcbin gstwebrtcbin.c:4569:_create_answer_task:<sendrecv> did not find compatible transceiver for offer caps application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)VP8, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)97, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)96; application/x-rtp, media=(string)video, payload=(int)98, clock-rate=(int)90000, encoding-name=(string)VP9, profile-id=(string)0, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)99, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)98; application/x-rtp, media=(string)video, payload=(int)100, clock-rate=(int)90000, encoding-name=(string)VP9, profile-id=(string)2, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)101, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)100; application/x-rtp, media=(string)video, payload=(int)35, clock-rate=(int)90000, encoding-name=(string)VP9, profile-id=(string)1, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)36, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)35; application/x-rtp, media=(string)video, payload=(int)37, clock-rate=(int)90000, encoding-name=(string)VP9, profile-id=(string)3, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)38, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)37; application/x-rtp, media=(string)video, payload=(int)102, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile=(string)baseline, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)103, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)102; application/x-rtp, media=(string)video, payload=(int)104, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)0, profile=(string)baseline, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)105, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)104; application/x-rtp, media=(string)video, payload=(int)106, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile=(string)constrained-baseline, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)107, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)106; application/x-rtp, media=(string)video, payload=(int)108, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)0, profile=(string)constrained-baseline, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)109, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)108; application/x-rtp, media=(string)video, payload=(int)127, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile=(string)main, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)125, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)127; application/x-rtp, media=(string)video, payload=(int)39, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)0, profile=(string)main, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)40, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)39; application/x-rtp, media=(string)video, payload=(int)41, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile=(string)high-4:4:4, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)42, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)41; application/x-rtp, media=(string)video, payload=(int)43, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)0, profile=(string)high-4:4:4, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)44, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)43; application/x-rtp, media=(string)video, payload=(int)45, clock-rate=(int)90000, encoding-name=(string)AV1, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)46, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)45; application/x-rtp, media=(string)video, payload=(int)47, clock-rate=(int)90000, encoding-name=(string)AV1, profile=(string)1, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true; application/x-rtp, media=(string)video, payload=(int)48, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)47; application/x-rtp, media=(string)video, payload=(int)112, clock-rate=(int)90000, encoding-name=(string)RED; application/x-rtp, media=(string)video, payload=(int)113, clock-rate=(int)90000, encoding-name=(string)RTX, apt=(string)112; application/x-rtp, media=(string)video, payload=(int)114, clock-rate=(int)90000, encoding-name=(string)ULPFEC; application/x-rtp, media=(string)video, payload=(int)49, clock-rate=(int)90000, encoding-name=(string)FLEXFEC-03, repair-window=(string)10000000, rtcp-fb-goog-remb=(boolean)true, rtcp-fb-transport-cc=(boolean)true, will only receive
```https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2506msdk: segfault on Intel GPU < gen12 and using OneVPL dispatcher2023-04-25T09:12:29ZU. Artie Eoffmsdk: segfault on Intel GPU < gen12 and using OneVPL dispatcherSince https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4177
When gstreamer msdk is linked to OneVPL dispatcher library (libvpl.so), no elements are registered/available on Intel platforms with GPU < gen12. The `OneVP...Since https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4177
When gstreamer msdk is linked to OneVPL dispatcher library (libvpl.so), no elements are registered/available on Intel platforms with GPU < gen12. The `OneVPL dispatcher` uses the legacy `MSDK runtime` (libmfxhw64.so) for Intel GPU < gen12.
The issue is `not observed` for Intel GPU >= gen12, which the `OneVPL dispatcher` uses the `OneVPL runtime` (libmfx-gen.so).
Also, this issue is `not observed` if using the legacy `MSDK dispatcher` (libmfx.so) and `MSDK runtime`.
```
$ gst-inspect-1.0 msdk
(gst-plugin-scanner:418576): GStreamer-CRITICAL **: 15:38:20.502: gst_mini_object_ref: assertion 'mini_object != NULL' failed
(gst-plugin-scanner:418576): GStreamer-CRITICAL **: 15:38:20.502: gst_mini_object_ref: assertion 'mini_object != NULL' failed
ERROR: Caught a segmentation fault while loading plugin file:
/home/uaeoff/Work/workspace/media/install/lib/gstreamer-1.0/libgstmsdk.so
Please either:
- remove it and restart.
- run with --gst-disable-segtrap --gst-disable-registry-fork and debug.
(gst-plugin-scanner:418600): GStreamer-CRITICAL **: 15:38:20.566: gst_mini_object_ref: assertion 'mini_object != NULL' failed
(gst-plugin-scanner:418600): GStreamer-CRITICAL **: 15:38:20.567: gst_mini_object_ref: assertion 'mini_object != NULL' failed
ERROR: Caught a segmentation fault while loading plugin file:
/home/uaeoff/Work/workspace/media/install/lib/gstreamer-1.0/libgstmsdk.so
Please either:
- remove it and restart.
- run with --gst-disable-segtrap --gst-disable-registry-fork and debug.
0:00:00.694697913 418575 0xffac60 ERROR GST_PLUGIN_LOADING gstpluginloader.c:279:plugin_loader_replay_pending: Plugin file /home/uaeoff/Work/workspace/media/install/lib/gstreamer-1.0/libgstmsdk.so failed to load. Blacklisting
No such element or plugin 'msdk'
```
I will gather a gdb backtrace and attach momentarily...https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1802webrtcbin: Incorrect trace logging of signaling-state changes2023-04-25T05:20:21ZMustafa Asım REYHANm.asimreyhan@gmail.comwebrtcbin: Incorrect trace logging of signaling-state changesBy the time states are logged in line [#6640](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c#L6639-6645)
~~~c
const gchar *from = _enum_value_to_string (GST_TYPE_WEBRT...By the time states are logged in line [#6640](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c#L6639-6645)
~~~c
const gchar *from = _enum_value_to_string (GST_TYPE_WEBRTC_SIGNALING_STATE,
webrtc->signaling_state);
const gchar *to = _enum_value_to_string (GST_TYPE_WEBRTC_SIGNALING_STATE,
new_signaling_state);
GST_TRACE_OBJECT (webrtc, "notify signaling-state from %s "
"to %s", from, to);
~~~
`webrtc->signaling_state` and `new_signaling_state` are equal because of the assignment in [#6459](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c#L6459-6462)
~~~c
if (webrtc->signaling_state != new_signaling_state) {
webrtc->signaling_state = new_signaling_state;
signalling_state_changed = TRUE;
}
~~~
In turn old states logged incorrectly.
`_set_description_task:<webrtcbin> notify signaling-state from stable to stable`
`_set_description_task:<webrtcbin> notify signaling-state from have-remote-offer to have-remote-offer`https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1772d3d11videosink: set_render_rectangle not working2023-04-24T18:40:01ZTPawlikd3d11videosink: set_render_rectangle not workingHi,
I've been trying for a few days to connect GStreamer with the Flutter framework.
The code using GStreamer is written in Rust.
With the help of `set_window_handle`, I managed to pin the `VideoOverlay` to the Flutter window. Unfortuna...Hi,
I've been trying for a few days to connect GStreamer with the Flutter framework.
The code using GStreamer is written in Rust.
With the help of `set_window_handle`, I managed to pin the `VideoOverlay` to the Flutter window. Unfortunately, it displays full screen every time. I tried `set_render_rectangle`, but it doesn't do anything.
I wonder where the problem lies? Is it flutter's fault or something else?
Below is the code I'm using on the GStreamer side and the video.
<details><summary>Click to expand code</summary>
```rust
fn main_loop(uri: &str, hwnd: &u32) -> Result<(), Error> {
println!("Handler:");
println!("{hwnd}");
println!("====");
gstreamer::init()?;
let main_loop = glib::MainLoop::new(None, false);
let videosink = gstreamer::ElementFactory::make("d3d11videosink")
.property("emit-present", true)
.property_from_str("display-format", "DXGI_FORMAT_B8G8R8A8_UNORM")
.build()
.unwrap();
let playbin = gstreamer::ElementFactory::make("playbin")
.property("uri", uri)
.property("video-sink", &videosink)
.build()
.unwrap();
let video_overlay: gstreamer_video::VideoOverlay = playbin
.clone()
.dynamic_cast::<gstreamer_video::VideoOverlay>()
.unwrap();
let hwnd_usize = usize::try_from(hwnd.clone()).unwrap();
unsafe {
video_overlay.set_window_handle(hwnd_usize);
}
video_overlay
.set_render_rectangle(50, 50, 200, 200)
.unwrap();
let main_loop_clone = main_loop.clone();
let bus = playbin.bus().unwrap();
let _bus_watch = bus
.add_watch(move |_, msg| {
use gstreamer::MessageView;
let main_loop = &main_loop_clone;
match msg.view() {
MessageView::Eos(..) => {
println!("received eos");
main_loop.quit()
}
MessageView::Error(err) => {
println!(
"Error from {:?}: {} ({:?})",
err.src().map(|s| s.path_string()),
err.error(),
err.debug()
);
main_loop.quit();
}
_ => (),
};
glib::Continue(true)
})
.unwrap();
match playbin.set_state(gstreamer::State::Playing) {
Ok(_) => {}
Err(e) => {
println!("Not good");
}
}
main_loop.run();
playbin.set_state(gstreamer::State::Null).unwrap();
Ok(())
}
```
</details>
![screen_cap](/uploads/afa3a61f439c7e62214cbc6fc009c94e/screen_cap.mp4)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2502gst-plugins-rs: meson build not running as cargo release2023-04-24T06:42:24ZDavid Revaygst-plugins-rs: meson build not running as cargo release### Describe your issue
When building gstreamer from source with `-D rs=enabled` the rust plugins are building in debug mode which blows out to ~35GB! I have tried adding `-D buildtype=release` but this does not seem to change much.
###...### Describe your issue
When building gstreamer from source with `-D rs=enabled` the rust plugins are building in debug mode which blows out to ~35GB! I have tried adding `-D buildtype=release` but this does not seem to change much.
#### Expected Behavior
When running `-D buildtype=release` on meson one would expect meson to run `cargo build --release` internally.
#### Observed Behavior
It does not appear that `-D buildtype=release` changes how cargo builds the rust plugins (but this build system is very foreign so I could be wrong).
#### Setup
- **Operating System:** Ubuntu 22.04 (docker: ubuntu:22.04)
- **Device:** Computer (docker)
- **GStreamer Version:** 1.22.0
### Steps to reproduce the bug
```bash
meson setup \
-D base=enabled \
-D good=enabled \
-D bad=enabled \
-D ugly=enabled \
-D rs=enabled \
-D buildtype=release \
builddir
```
### How reproducible is the bug?
Always
### Screenshots if relevant
### Solutions you have tried
Currently I am building everything with:
```bash
meson setup \
-D base=enabled \
-D good=enabled \
-D bad=enabled \
-D ugly=enabled \
-D rs=disabled \ # Disabled!!
-D buildtype=release \
builddir
```
and then using the `gst-plugins-rs` source code running my cargo build on the packages I'm interested in.
```bash
cargo build --release \
--package gst-plugin-webrtc-signalling \
--package gst-plugin-webrtc \
--package gst-plugin-rtp
```
PS, it would be good to know how I can select only a few `gst-plugin-rs` packages whilst still selecting all of the `good,bad,ugly` other packages... `-Dauto_features=disabled` causes issues when building `-D rs` also.
### Related non-duplicate issues
### Additional Informationhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2414Playbin and Playbin3 leaks the volume element2023-04-23T08:53:20ZAndoni Morales AlastrueyPlaybin and Playbin3 leaks the volume element### Describe your issue
<!-- a clear and concise summary of the bug. -->
<!-- For any GStreamer usage question, please contact the community using the #gstreamer channel on IRC https://www.oftc.net/ or the mailing list on https://gstream...### Describe your issue
<!-- a clear and concise summary of the bug. -->
<!-- For any GStreamer usage question, please contact the community using the #gstreamer channel on IRC https://www.oftc.net/ or the mailing list on https://gstreamer.freedesktop.org/lists/ -->
Playbin and Playbin3 both leak the volume element, which in turn leaks the context and the display. This can be reproduced with this sample application:
```
#include <gst/gst.h>
#ifdef __APPLE__
#include <TargetConditionals.h>
#endif
typedef enum
{
GST_PLAY_FLAG_VIDEO = (1 << 0),
GST_PLAY_FLAG_AUDIO = (1 << 1),
GST_PLAY_FLAG_TEXT = (1 << 2),
GST_PLAY_FLAG_VIS = (1 << 3),
GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4)
} GstPlayFlags;
void run()
{
GstElement *pipeline;
GstElement *volume;
/* Build the pipeline */
pipeline =
gst_parse_launch
("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
NULL);
// With software volume disabled the leak does not reproduce
// g_object_set (pipeline, "flags", GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT, NULL);
/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, 1 * GST_SECOND);
gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
}
int
tutorial_main (int argc, char *argv[])
{
/* Initialize GStreamer */
gst_init (&argc, &argv);
for (int i=0; i<1; i++) {
run();
}
gst_deinit ();
return 0;
}
int
main (int argc, char *argv[])
{
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
return gst_macos_main (tutorial_main, argc, argv, NULL);
#else
return tutorial_main (argc, argv);
#endif
}
```
#### Expected Behavior
All resources are freed correctly.
#### Observed Behavior
The volume element is leaked
#### Setup
- **Operating System:** Tested in macOS
- **Device:** Computer
- **GStreamer Version**: 1.22.x 6c539cbb4a11a7ba40c8ac32bfc42a3616752995
- **Command line:**
### Steps to reproduce the bug
1. Compile the test sample with: clang test.c \`pkg-config --libs --cflags gstreamer-1.0\` -o test
2. Run the test app: GST_TRACERS='leaks' GST_DEBUG=GST_TRACER:7 ./test
### How reproducible is the bug?
Always, with soft-volume enabled
### Screenshots if relevant
### Solutions you have tried
### Related non-duplicate issues
### Additional Information
<!-- Any other information such as logs. Make use of <details> for long output -->https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/342gl: Propagation of GL display/context not working correctly if using GL eleme...2023-04-23T07:38:07Zmarcbullgl: Propagation of GL display/context not working correctly if using GL elements outside and inside playsinkThe following pipeline does not work with 1.22 / git main (and deadlocks for other reasons with 1.20):
```shell
$ gst-launch-1.0 videotestsrc ! glvideomixer ! sink.video_sink playsink name=sink video-sink="glimagesink"
```
What happe...The following pipeline does not work with 1.22 / git main (and deadlocks for other reasons with 1.20):
```shell
$ gst-launch-1.0 videotestsrc ! glvideomixer ! sink.video_sink playsink name=sink video-sink="glimagesink"
```
What happens here is that outside and inside playsink a different GL display and context are used, and both contexts are not sharing with each other.
This then causes no window to show up, rendering to fail and for each frame errors as follows to be printed
```
0:00:00.103075402 3920565 0x7f0664002180 ERROR gldebug gstgldebug.c:306:_gst_gl_debug_callback:<glcontextegl1> high: GL error from API id:2, GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
0:00:00.103086683 3920565 0x7f0664002180 ERROR gldebug gstgldebug.c:306:_gst_gl_debug_callback:<glcontextegl1> high: GL error from API id:2, GL_INVALID_FRAMEBUFFER_OPERATION in glDrawElements
0:00:00.136571386 3920565 0x7f0664002180 ERROR gldebug gstgldebug.c:306:_gst_gl_debug_callback:<glcontextegl1> high: GL error from API id:2, GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
0:00:00.136615900 3920565 0x7f0664002180 ERROR gldebug gstgldebug.c:306:_gst_gl_debug_callback:<glcontextegl1> high: GL error from API id:2, GL_INVALID_FRAMEBUFFER_OPERATION in glDrawElements
0:00:00.169940583 3920565 0x7f0664002180 ERROR gldebug gstgldebug.c:306:_gst_gl_debug_callback:<glcontextegl1> high: GL error from API id:2, GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
```
Original issue description below
----
I have a problem with the gtk4paintablesink and OpenGL playback, when using a video-stream-combiner with gst_play. I used a modified Glide to produce this problem. You can find it here: https://github.com/marcbull/glide/tree/video-compositor
The repository contains two Dot files of the pipeline and logs for both cases.
Without a video-stream-combiner property set, the gtk4paintablesink shows the expected video frames. If I assign a glvideomixer to the video-stream-combiner property, the view stays black, but you can hear audio playback.
I experienced this on Linux and on macOS.
Glide was started like this:
```
GST_DEBUG_DUMP_DOT_DIR=/tmp/gst GST_DEBUG="gtk4paintablesink:7" cargo r -- -i -c SampleVideo_1280x720_1mb.mp4 &| tee /tmp/glide.log
```
I added an command line argument to enable the use of the glvideomixer:
```
-c, --compositor Use glvideomixer as video-stream-combiner in the pipeline
```
The issue also occurs with the playbin3 element. It can be enabled with the following command line argument:
```
-p, --playbin3 Use playbin3 instead of playbin2
```
Is this a problem in the gtk4paintablesink or another component?
Thanks for your help.https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/344gst-plugin-fmp4 plugin (particularly dashmp4mux element) is not available in ...2023-04-21T13:53:41ZAlexander Urmazovgst-plugin-fmp4 plugin (particularly dashmp4mux element) is not available in the Windows MinGW 64-bit installerI tried to instantiate dashmp4mux element programmatically but get the following error:
`0:00:01.496117200 74108 0000019230E94090 WARN GST_ELEMENT_FACTORY gstelementfactory.c:712:gst_element_factory_make_with_properties: no such ele...I tried to instantiate dashmp4mux element programmatically but get the following error:
`0:00:01.496117200 74108 0000019230E94090 WARN GST_ELEMENT_FACTORY gstelementfactory.c:712:gst_element_factory_make_with_properties: no such element factory "dashmp4mux"!`
I have both packages installed for MinGW 64-bit:
- 1.22.2 runtime installer
- 1.22.2 development installer
I tried to search the ...\GStreamer\1.0\mingw_x86_64 directory and found no files which contain "fmp" (except of ffmpeg which is not the case)
gst-inspect-1.0 dashmp4mux
also report that "No such element or plugin 'dashmp4mux'"
Then I tried to install MSVC 64-bit build of the same version, it does contain the gstfmp4.dll with the plugin. And the gst-inspect-1.0 does detect the plugin.
Unfortunately I'm unable to use MSVC build.
Could you please fix the MinGW installer?
Thank youhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2501gst-plugin-spew don't have any funcionality2023-04-21T13:39:55ZRubén Gonzalezgst-plugin-spew don't have any funcionalityToday I was inspecting GStreamer source code to learn more about `--gst-plugin-spew`.
```
$ gst-inspect-1.0 --help-gst | grep spew
--gst-plugin-spew Enable verbose plugin loading diagnostics
```
But it doesn't have...Today I was inspecting GStreamer source code to learn more about `--gst-plugin-spew`.
```
$ gst-inspect-1.0 --help-gst | grep spew
--gst-plugin-spew Enable verbose plugin loading diagnostics
```
But it doesn't have any implementation.
Inspecting git history, I found this commit done 20 years ago:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/086de421dc283c313f11a3be32a7e3688ea694c5#d5f53f11840298cc38b256da9a589b541cb6a18b_398_459
My point is: Can this option be deleted? or, at least, update the description to deprecate it.https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/410rtpjitterbuffer/h264parse timestamp issue (regression)2023-04-20T11:16:21ZBugzilla Migration Userrtpjitterbuffer/h264parse timestamp issue (regression)## Submitted by Nicola `@drakkan`
**[Link to original bug (#788777)](https://bugzilla.gnome.org/show_bug.cgi?id=788777)**
## Description
Created attachment 361248
logs that show the issue
In a pipeline like this:
rtspsrc...## Submitted by Nicola `@drakkan`
**[Link to original bug (#788777)](https://bugzilla.gnome.org/show_bug.cgi?id=788777)**
## Description
Created attachment 361248
logs that show the issue
In a pipeline like this:
rtspsrc ! rtph264depay ! h264parse ! ...
using rtsp over tcp can happen that rtspsrc outputs buffers with the same timestamp, when this happen h264parse outputs buffer with invalid timestamps.
Please take a look at the attached logs, you can see:
rtpjitterbuffer.c:916:rtp_jitter_buffer_calculate_pts:[00m backwards timestamps, using previous time
so different buffers with pts 0:15:23.020362975 are sended.
Not sure how to handle this case, we need to change rtpjitterbuffer or h264parse?
This problem seems to happen only using rtsp over tcp, I'm unable to reproduce it using rtsp over udp.
**Attachment 361248**, "logs that show the issue":
[log.txt](/uploads/2de2a5196769c1451f65b6887f0c3ba8/log.txt)
Version: 1.xhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/994jifmux: Allow customizing EXIF/XMP tags serialization2023-04-19T22:48:30Zsuperwarejifmux: Allow customizing EXIF/XMP tags serializationHello,
While working with `jifmux` I came to realize there's no way to customize EXIF/XMP tags for serialization beyond the tags already defined internally by GStreamer (see [gstxmptag.c](https://gitlab.freedesktop.org/gstreamer/gst-plu...Hello,
While working with `jifmux` I came to realize there's no way to customize EXIF/XMP tags for serialization beyond the tags already defined internally by GStreamer (see [gstxmptag.c](https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/blob/b9708e06e1aa7804886c38123e02365cd2b51781/gst-libs/gst/tag/gstxmptag.c#L935)).
The infrastructure to support such customization already exists internally, eg. `_gst_xmp_schema_add_mapping` etc.
`GstTagXmpWriter` only allows adding/removing *existing* schemas, `GstXmptag` to only get the list of schemas, so allowing to extend schemas serialization will "close the loop" to fully customize `jifmux` metadata serialization.
What is the prospect of exposing the existing XMP schema mapping functions?
Thank you.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2416SRT error while receiving stream in gstreamer 1.22.1 build2023-04-18T16:37:37ZKishore SahooSRT error while receiving stream in gstreamer 1.22.1 buildI built Gstreamer 1.22.1 in a docker container having Ubuntu 20.04.
Build steps are:
```
git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer
git checkout 1.22.1
meson setup -Dbad=enabled -Dgst-plugins-bad:srt=e...I built Gstreamer 1.22.1 in a docker container having Ubuntu 20.04.
Build steps are:
```
git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer
git checkout 1.22.1
meson setup -Dbad=enabled -Dgst-plugins-bad:srt=enabled -Dgpl=enabled -Dugly=enabled -Dgst-plugins-ugly:x264=enabled builddir
cd builddir
ninja
ninja install
ldconfig
```
I have installed few packages before building gstreamer, such as build-essential meson, ninja, flex, bison, nasm.
1. When I run my code, I get below warning and it waits for the stream:
`(gst-plugin-scanner:133021): GStreamer-WARNING **: 21:21:45.556: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstlibav.so': /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstlibav.so: undefined symbol: gst_video_color_primaries_to_iso`
2. When I send the stream to my code and it tried to receive it via `srtsrc`, I get below error.
`[ WARN:0@16.231] global /workspace/cv/opencv_gst/opencv/modules/videoio/src/cap_gstreamer.cpp (2401) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module srtsrc0 reported: Internal data stream error.`
@tpm Do I need to install any pre-requisites or any dependent mandatory packages?https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/1012mp4mux fails due to missing PTS2023-04-18T12:20:31ZFlorian Echtlermp4mux fails due to missing PTSI'm trying to record multiple H.264 and Opus streams to a MP4 file. However, there is apparently some sort of race condition going on, because in roughly 8 out of 10 attempts, the pipeline fails with the following error and an EOS:
gst-...I'm trying to record multiple H.264 and Opus streams to a MP4 file. However, there is apparently some sort of race condition going on, because in roughly 8 out of 10 attempts, the pipeline fails with the following error and an EOS:
gst-stream-error-quark: Could not multiplex stream. (10): ../gst/isomp4/gstqtmux.c(5402): gst_qt_mux_add_buffer (): /GstPipeline:pipeline0/GstBin:bin_file_sink/GstMP4Mux:mux: Buffer has no PTS.
In the other 20% of cases, the pipeline starts and the resulting MP4 file contains all the streams, correctly synchronized and playable. I also tried with qtmux instead of mp4mux, but got the same results.
I'm attaching the dot graph for the failure case [mp4mux-buffer-no-pts.dot](/uploads/e62dc9f5359dd0cabb54828e95888a43/mp4mux-buffer-no-pts.dot); the dot graph for a successful run looks exactly identical, with the only difference being that the filesink doesn't flag EOS.
This is currently running on GStreamer 1.20.3. I will try to also test with 1.22, and try to create a minimal reproducing example, but since this is a dynamically created pipeline, that may be difficult (note that the error never appears, e.g., when GST_DEBUG=4).https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/171Not able to play the audio streamed with gstreamer (OPUS codec) on VLC player2023-04-18T07:49:58Zanonymous_V xyzNot able to play the audio streamed with gstreamer (OPUS codec) on VLC playerI want to stream live audio with gstreamer using 'opus' codec. At the transmitter end I am using the following script:
Transmitter:
" gst-launch-1.0 autoaudiosrc ! audioconvert ! audioresample ! opusenc bitrate=48000 max-payload-size=...I want to stream live audio with gstreamer using 'opus' codec. At the transmitter end I am using the following script:
Transmitter:
" gst-launch-1.0 autoaudiosrc ! audioconvert ! audioresample ! opusenc bitrate=48000 max-payload-size=101 packet-loss-percentage=0 frame-size=20 bandwidth=fullband audio-type=generic hard-resync=false inband-fec=true complexity=10 bitrate-type=constrained-vbr ! rtpopuspay ! udpsink host=224.0.0.161 port=5001 "
Receiver: At receiver I am trying to receive the stream with VLC player using the following script:
"vlc stream.sdp"
SDP file content: stream.sdp
m=audio 5001 RTP/AVP 101
c=IN IP4 224.0.0.161
a=rtpmap:101 opus/48000/1
a=fmtp:101 maxplaybackrate=16000;
sprop-maxcapturerate=16000;
maxaveragebitrate=20000;
stereo=1;
useinbandfec=1;
usedtx=0
But when I execute the VLC script with SDP file, nothing happens. The player remains paused.
I verified the transmitter script with 'gstreamer' receiver and it works fine.
I am not getting if there is something wrong in SDP file or some configuration issue is there.
I hope I'll find some help here.
thanks.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2485rtspclientsink: MP4A-LATM vs MPEG4-GENERIC2023-04-18T07:44:07ZMaurizio Buratortspclientsink: MP4A-LATM vs MPEG4-GENERICos:windows
gstreamer 1.22.1
i use MediaMtx server https://github.com/aler9/mediamtx (Alias rtsp simple server) and when using this test pipeline:
gst-launch-1.0.exe -e videotestsrc ! mfh264enc bitrate=1024 ! video/x-h264 ! rtspclient...os:windows
gstreamer 1.22.1
i use MediaMtx server https://github.com/aler9/mediamtx (Alias rtsp simple server) and when using this test pipeline:
gst-launch-1.0.exe -e videotestsrc ! mfh264enc bitrate=1024 ! video/x-h264 ! rtspclientsink name=mux location=rtsp://192.168.1.201:8554/live audiotestsrc ! audioconvert ! audioresample ! audio/x-raw, rate=48000 ! mfaacenc bitrate=128000 ! audio/mpeg ! mux.
the hls served by mediamtx is without audio.
when streaming with ffmpeg with this test pipeline:
ffmpeg -f lavfi -i smptebars -t 30 -f lavfi -i "sine=frequency=1000:duration=50000" -ac 2 -c:v libx264 -preset ultrafast -b:v 600k -max_muxing_queue_size 1024 -c:a aac -b:a 128k -f rtsp rtsp://localhost:8554/fflive
everything works fine.
the difference is in the audio format
**gstreamer announce**
2023/04/12 16:13:01 DEB [RTSP] [conn 192.168.1.202:50101] [c->s] ANNOUNCE rtsp://192.168.1.201:8554/live RTSP/1.0
CSeq: 2
Content-Length: 628
Content-Type: application/sdp
Date: Wed, 12 Apr 2023 14:13:14 GMT
User-Agent: GStreamer/1.22.1.1
v=0
o=- 3736019951 1 IN IP4 192.168.1.202
s=Session streamed with GStreamer
i=rtspclientsink
t=0 0
a=tool:GStreamer
m=audio 0 RTP/AVP 96
c=IN IP4 0.0.0.0
**a=rtpmap:96 MP4A-LATM/48000**
a=fmtp:96 cpresent=0;config=40002310
a=control:stream=1
a=ts-refclk:local
a=mediaclk:sender
a=ssrc:3350472162 cname:user3404783220@host-19bf6e68
m=video 0 RTP/AVP 99
c=IN IP4 0.0.0.0
a=rtpmap:99 H264/90000
a=framerate:30
a=fmtp:99 packetization-mode=1;sprop-parameter-sets=Z2QAFKwrYKD9gIgAAB9AAAdTAHjhFw==,aO48sA==
a=control:stream=0
a=ts-refclk:local
a=mediaclk:sender
a=ssrc:4171762370 cname:user3404783220@host-19bf6e68
2023/04/12 16:13:03 INF [RTSP] [session 91addd57] is publishing to path 'live', with UDP, 2 tracks (Generic, H264)
2023/04/12 16:13:03 DEB [RTSP] [conn 192.168.1.202:50101] [s->c] RTSP/1.0 200 OK
**ffmpeg announce**
2023/04/13 11:43:19 DEB [RTSP] [conn [::1]:61892] [c->s] ANNOUNCE rtsp://localhost:8554/fflive RTSP/1.0
CSeq: 2
Content-Length: 494
Content-Type: application/sdp
User-Agent: Lavf59.27.100
v=0
o=- 0 0 IN IP6 ::1
s=No Name
c=IN IP6 ::1
t=0 0
a=tool:libavformat LIBAVFORMAT_VERSION
m=video 0 RTP/AVP 96
b=AS:600
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAFNoFB+wEQAAAAwBAAAAMg8UKqA==,aM48gA==; profile-level-id=42C014
a=control:streamid=0
m=audio 0 RTP/AVP 97
b=AS:128
**a=rtpmap:97 MPEG4-GENERIC/44100/2**
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500
a=control:streamid=1
**the difference with gstreamer is**
**ffmpeg = a=rtpmap:97 MPEG4-GENERIC/44100/2**
**gstreamer = a=rtpmap:96 MP4A-LATM/48000**
would it be possible for gstreamer to send MPEG4-GENERIC instead of MP4A-LATM ?
and can someone explain me the differences between them?
thank you