"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[Solved]vlc transcode h264 stream zu mjpeg

Captain Kirk 16.01.2017 - 08:24 10840 16
Posts

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
Moin,

ich verzweifle derzeit massive am Konvertieren eines h264 Streams zu mjpeg.
Dr. Google hat mir nicht geholfen und das VLC Forum dürfte mehr Schein als Sein sein. Zumindest wurde dort bislang nichtmal irgendwie kommentiert.

Das Problem is verzwickt und ich komm nicht drauf warums einmal funktioniert, dann nach kurzer Zeit nimma und dann wieder gar nicht. Egal was ich mach.

Folgende Komponenten:

Ubiquiti G3 Dome Cam
RTSP URL:
rtsp://10.0.0.xx:554/s0
Width:1024
Height:576
Bitrate:2000 kbps
FPS:30

Raspian mit installiertem VLC (läuft in der einer VM - 1 Core vom i7, 1,5GB Ram)

Das Kommando:
Code:
cvlc -I dummy -v -R rtsp://10.0.0.xx/s0 --sout='#transcode{threads=2,acodec=none,vcodec=MJPG ,vb=2200,width=800,height=450,fps=20}:standard{mu x=mpjpeg,access=http{user=xxx,pwd=xxx,mime=m ultipart/x-mixed-replace; boundary=--7b3cc56e5f51db803f790dad720ed50a},dst=:8080/cam.mjpg}' --sout-keep
Hat schon funktioniert. Habs dann in den Autostart verfrachtet, mit dem Ergebnis, dass es nach xx Sekunden plötzlich mit:
Zitat
[00007f1e7c000d18] core stream output warning: trying to send non-dated packet to stream output! [00007f1e7c000d18] core stream output warning: trying to send non-dated packet to stream output! [00007f1e7c000d18] core stream output warning: trying to send non-dated packet to stream output! [00007f1e8c000c28] core input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 1000 ms) [00007f1e8c000c28] core input error: ES_OUT_RESET_PCR called
stoppt.

Ein VB unter 2200 führte anfangs zu:
Zitat
[mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow [mjpeg @ 0x7fb0f8226b40] rc buffer underflow

Aktuell gehts gar nicht.

ICH VERZWEIFLE :rolleyes:

Der h264 Stream läuft btw. super. Nur kann meine Haussteuerung damit nicht umgehen.

TIA
Kirk
Bearbeitet von Captain Kirk am 28.01.2017, 11:01

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
up ^ :ghug:

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12689
all meine transcoding-versuche mit vlc scheiterten stehts an (je nach version) unterschiedlichen bugs.

vielleicht besser ffmpeg verwenden?

@ raspian: solls später auf nem raspi landen oder wieso eine arm-distri in der vm?

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
bei raspian handelt es sich um loxberry. ein fanprojekt für loxone (smarthome).
jemand hat sich die mühe gemacht das zu virtualisieren und das verwend ich jetzt am nas.

kannst mir mit ffmpeg unter die arme greifen oder soll ich lieber google bemühen?

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
ffmpeg hab ich installiert. config bzw. command, dass es läuft hab ich allerdings noch nicht...

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12689
da kann ich im detail leider auch nicht weiterhelfen ;(

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3701
Ich nutze zwar avconv statt ffmpeg, aber im Prinzip is das eh dasselbe, nur die Optionen heißen tlw. etwas anders und ein paar Kleinigkeiten können sich unterscheiden. Ist halt aus'm libav Projekt, was zu 99% deckungsgleich mit ffmpeg ist.

Bsp. für einen H.264/AVC Elementarstream zu MJPEG in einem MKV Container, Input/Output-Framerate von 25fps (Schräge Frameraten wie NTSC kannst auch per Bruch schreiben, z.B. "24000/1001"):

Code:
$ avconv -c:v h264 -r 25 -i ~/videos/input.h264 -c:v mjpeg -r 25 -f matroska ~/videos/output.mkv
Andere Container wären z.B. mp4 oder mov, wenn nötig (z.B. -f mov). Falls die Quelle Audio mitbringt (z.B. ein .mp4 File), kannst es per -an abdrehen. Meinen eigenen avconv Build findest u.a. [hier], falls du es für Windows haben willst (etwas weiter unten).

Ansonsten geht auch ffmpeg, klar, mußt nur wissen wie die Optionen heißen. Optionen vor -i <file> gelten für den Input Decoder, Optionen danach gelten für den Output Encoder.

Das Ergebnis schaut ok aus, hier ein Auszug aus mkvinfo:

Code:
|+ Segment tracks
| + A track
|  + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
|  + Track UID: 1
|  + Lacing flag: 0
|  + Language: und
|  + Default flag: 0
|  + Codec ID: V_MJPEG
|  + Track type: video
|  + Default duration: 40.000ms (25.000 frames/fields per second for a video track)
|  + Video track
|   + Pixel width: 1920
|   + Pixel height: 1080
|   + Display unit: 3 (aspect ratio)
|   + Display width: 1920
|   + Display height: 1080

Und einer aus mediainfo:

Code:
Video
ID                                       : 1
Format                                   : V_MJPEG
Codec ID                                 : V_MJPEG
Duration                                 : 10 min
Bit rate                                 : 11.7 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 FPS
Bits/(Pixel*Frame)                       : 0.226
Stream size                              : 876 MiB (98%)
Writing library                          : Lavc56.1.0 mjpeg
Default                                  : No
Forced                                   : No
Spielt auch sauber ab bei mir nach dem Transcode. Zur Identifikation der Parameter des Inputs (wie Framerate) empfehle ich das Tool MediaInfo, is cross-platform und gibts auch mit GUIs.
Bearbeitet von GrandAdmiralThrawn am 25.01.2017, 15:23

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
ich steck immer noch... hätt wohl doch einfach eine mjpg cam nehmen sollen :rolleyes:

hab jetzt im google was gefunden was ev. etwas weiterhilft (für jemanden der sich auskennt)
klick

Code:
ffprobe 'rtsp://camera_url/'
wirft folgendes aus:

Zitat
Input #0, rtsp, from 'rtsp://10.0.0.86/s0':
Metadata:
title : s0
Duration: N/A, start: 0.093968, bitrate: N/A
Stream #0:0: Audio: aac (LC), 11025 Hz, mono, fltp
Stream #0:1: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080 [SAR 189:190 DAR 168:95], 25 fps, 25 tbr, 90k tbn, 50 tbc

mit dem weiterführenden code komm ich aber schon nimma weiter:
Code:
ffmpeg -re -i 'rtsp://camera_url' -pix_fmt yuv420p -an -c:v mjpeg -q:v 0 -f mjpeg udp://nvr_ip:some_port_above_1024

ich brauch ja letztlich ein
Code:
http://xx.xx.xx.xx:[port]/cam.mjpg

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3701
Moment, WAS? Du willst einen Streaming Server, verstehe ich das so richtig? Mein Ansatz war rein filebasiert, also Quellfile, Zielfile, alles offline.

Was genau ist es eigentlich, was du da machst / machen willst?

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
ja exakt. ich habe eine überwachnungscam die einen h264 stream liefert.
der muss, weil meine haussteuerung nix anderes checkt, in mjpg transcodiert werden.

sorry falls das bis jetzt nicht ausreichend rüber kam.

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3701
Ich bin da etwas rückständig, also mit Bitte um Entschuldigung wenn ich das jetzt so fragen muß, aber was fängt eine "Haussteuerung" mit einem Videostream an?!

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
Ist ein smart home server der u.a. ein intercom interface (also Gegensprechanlage) mit sich bringt. Dh die cam am vorplatz meines hauses schaut zur klingel bzw halt zum tor.
Wenns klingelt verbindet sich die sip Gegensprechanlage mit dem handy und dieses intercom interface zeigt dann auch gleichzeitig an wer dort steht.

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3701
Was du also brauchst ist ein low-latency Livestream zwischen zwei Devices bzw. Netzwerkservices...

Mh, ich hab das Gefühl, ich könnte fast motiviert sein mir das anzusehen.. Vielleicht nächste Woche. ;)

Leider hab ich keinerlei Hardware dieser Art, daher ist's ein wenig schwierig...

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
Du bist herzlichst eingeladen vorbei zu kommen, wenns an hw scheitert :)
Mo hätt ich frei. Abends geht immer ;)

Captain Kirk

Fanboy von sich selbst
Avatar
Registered: Sep 2002
Location: NCC-1701
Posts: 7089
habs geschafft!!

in der /etc/server.conf hab ich nun folgendes eingetragen:
Zitat
HTTPPort 8888
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000000
CustomLog -

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 20M
Launch ffmpeg -i "rtsp://10.0.0.86:554/s2"
</Feed>

<Stream s2.mjpg>
Feed feed1.ffm
Format mpjpeg
VideoBitRate 10000
VideoFrameRate 15
VideoSize 800x450
VideoIntraOnly
NoAudio
Strict -1
NoDefaults
</Stream>
dann ffserver starten (muss ich mir noch anschauen wie ich das automatisch beim systemstart starte, sollte aber nicht so ein großes ding sein hoffe ich...)
und dann einfach den stream per http://xxxxx/s2.mjpg abrufen. funzt super, flüssig UND im gegensatz zu vlc gestochen scharf!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz