
Recherche avancée
Médias (1)
-
Rennes Emotion Map 2010-11
19 octobre 2011, par
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (86)
-
List of compatible distributions
26 avril 2011, parThe table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (10461)
-
OpenCV and Network Cameras
10 mai 2014, par Alexander
So as a bit of context ; this program was built originally to work with USB cameras - but a few things changed. Now I’m trying to convert it to work with networked cameras, but my presence here should make it quite apparent what my level of success has been so far.
I’m using :
- OpenCV v2.4.6.0
- C++
- D-Link Cloud Camera 7100 (Installer is DCS-7010L, according to the instructions.)
I am trying to access the DLink camera’s video feed through OpenCV.
I can access the camera through it’s IP address with a browser without any issues. Unfourtunately ; my program is less cooperative. When attempting to access the camera the program gives the OpenCV-generated error :
warning : Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:529)
This error occurs with just about everything I try that doesn’t somehow generate more problems.
For reference - the code in OpenCV’s cap_ffmpeg_impl.hpp around line 529 is as follows :
522 bool CvCapture_FFMPEG::open( const char* _filename )
523 {
524 unsigned i;
525 bool valid = false;
526
527 close();
528
529 #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0)
530 int err = avformat_open_input(&ic, _filename, NULL, NULL);
531 #else
532 int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
533 #endif
...
616 }...for which I have no idea what I’m looking at. It seems to be looking for the ffmpeg version - but I’ve already installed the latest ffmpeg on that computer, so that shouldn’t be the issue.
This is the edited down version I tried to use as per Sebastian Schmitz’s recommendation :
1 #include <fstream> // File input/output
2 #include <iostream> // cout / cin / etc
3 #include // Windows API stuff
4 #include // More input/output stuff
5 #include <string> // "Strings" of characters strung together to form words and stuff
6 #include <cstring> // "Strings" of characters strung together to form words and stuff
7 #include <streambuf> // For buffering load files
8 #include <array> // Functions for working with arrays
9 #include <opencv2></opencv2>imgproc/imgproc.hpp> // Image Processor
10 #include <opencv2></opencv2>core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
11 #include <opencv2></opencv2>highgui/highgui.hpp> // OpenCV window I/O
12 #include "opencv2/calib3d/calib3d.hpp"
13 #include "opencv2/features2d/features2d.hpp"
14 #include "opencv2/opencv.hpp"
15 #include "resource.h" // Included for linking the .rc file
16 #include // For sleep()
17 #include <chrono> // To get start-time of program.
18 #include <algorithm> // For looking at whole sets.
19
20 #ifdef __BORLANDC__
21 #pragma argsused
22 #endif
23
24 using namespace std; // Standard operations. Needed for most basic functions.
25 using namespace std::chrono; // Chrono operations. Needed getting starting time of program.
26 using namespace cv; // OpenCV operations. Needed for most OpenCV functions.
27
28 string videoFeedAddress = "";
29 VideoCapture videoFeedIP = NULL;
30 Mat clickPointStorage; //Artifact from original program.
31
32 void displayCameraViewTest()
33 {
34 VideoCapture cv_cap_IP;
35 Mat color_img_IP;
36 int capture;
37 IplImage* color_img;
38 cv_cap_IP.open(videoFeedAddress);
39 Sleep(100);
40 if(!cv_cap_IP.isOpened())
41 {
42 cout << "Video Error: Video input will not work.\n";
43 cvDestroyWindow("Camera View");
44 return;
45 }
46 clickPointStorage.create(color_img_IP.rows, color_img_IP.cols, CV_8UC3);
47 clickPointStorage.setTo(Scalar(0, 0, 0));
48 cvNamedWindow("Camera View", 0); // create window
49 IplImage* IplClickPointStorage = new IplImage(clickPointStorage);
50 IplImage* Ipl_IP_Img;
51
52 for(;;)
53 {
54 cv_cap_IP.read(color_img_IP);
55 IplClickPointStorage = new IplImage(clickPointStorage);
56 Ipl_IP_Img = new IplImage(color_img_IP);
57 cvAdd(Ipl_IP_Img, IplClickPointStorage, color_img);
58 cvShowImage("Camera View", color_img); // show frame
59 capture = cvWaitKey(10); // wait 10 ms or for key stroke
60 if(capture == 27 || capture == 13 || capture == 32){break;} // if ESC, Return, or space; close window.
61 }
62 cv_cap_IP.release();
63 delete Ipl_IP_Img;
64 delete IplClickPointStorage;
65 cvDestroyWindow("Camera View");
66 return;
67 }
68
69 int main()
70 {
71 while(1)
72 {
73 cout << "Please Enter Video-Feed Address: ";
74 cin >> videoFeedAddress;
75 if(videoFeedAddress == "exit"){return 0;}
76 cout << "\nvideoFeedAddress: " << videoFeedAddress << endl;
77 displayCameraViewTest();
78 if(cvWaitKey(10) == 27){return 0;}
79 }
80 return 0;
81 }
</algorithm></chrono></array></streambuf></cstring></string></iostream></fstream>Using added ’cout’s I was able to narrow it down to line 38 : "cv_cap_IP.open(videoFeedAddress) ;"
No value I enter for the videoFeedAddress variable seems to get a different result. I found THIS site that lists a number of possible addresses to connect to it. Since there exists no 7100 anywhere in the list & considering that the install is labeled "DCS-7010L" I used the addresses found next to the DCS-7010L listings. When trying to access the camera most of them can be reached through the browser, confirming that they reach the camera - but they don’t seem to affect the outcome when I use them in the videoFeedAddress variable.
I’ve tried many of them both with and without username:password, the port number (554), and variations on ?.mjpg (the format) at the end.
I searched around and came across a number of different "possible" answers - but none of them seem to work for me. Some of them did give me the idea for including the above username:password, etc stuff, but it doesn’t seem to be making a difference. Of course, the number of possible combinations is certainly rather large- so I certainly have not tried all of them (more direction here would be appreciated). Here are some of the links I found :
- This is one of the first configurations my code was in. No dice.
- This one is talking about files - not cameras. It also mentions codecs - but I wouldn’t be able to watch it in a web browser if that were the problem, right ? (Correct me if I’m wrong here...)
- This one has the wrong error code/points to the wrong line of code !
- This one mentions compiling OpenCV with ffmpeg support - but I believe 2.4.6.0 already comes with that all set and ready ! Otherwise it’s not that different from what I’ve already tried.
- Now THIS one appears to be very similar to what I have, but the only proposed solution doesn’t really help as I had already located a list of connections. I do not believe this is a duplicate, because as per THIS meta discussion I had a lot more information and so didn’t feel comfortable taking over someone else’s question - especially if I end up needing to add even more information later.
Thank you for reading this far. I realize that I am asking a somewhat specific question - although I would appreciate any advice you can think of regarding OpenCV & network cameras or even related topics.
TLDR : Network Camera and OpenCV are not cooperating. I’m unsure if
it’s the address I’m using to direct the program to the camera or the
command I’m using - but no adjustment I make seems to improve the
result beyond what I’ve already done ! -
Ffmpeg error with output file not specified on linux when executing from dockerized new process in .net-core
29 août 2017, par DutchGuySome time back i created a small program in full .net framework that could rip mp3 and then add meta-info and a thumbnail to it. For innovation sake i started porting the application to .net core. After that i thought it would be cool to run this in docker on Linux. It took some time but i got it working. Now i’m running into the issue where i can rip the mp3 from the video file but when i try to combine the meta-info, thumbnail and mp3 ffmpeg tells me "At least one output file must be specified"
I added some checks so the program can run on Linux and Windows (to switch paths etc)
What i tried :
- running same argument structure on windows (works)
- Manualy starting the encode on linux (works)
- Simplifying the names, paths and titles used in the command
- replacing extra spaces and special characters, only "-" and single spaces allowed
Below i have an example of the command that does work when i execute it manually but produces the earlier mentioned error when my program executes it. Also keep in mind that ripping the mp3 from the video does result in the desired outputfile.
ffmpeg -i "temp/vid-id.mp3" -i "temp/vid-id.jpg" -map 0:0 -map 1:0 -c copy -y -id3v2_version 3 -metadata title="title" -metadata artist="artist" -metadata album="album" "completed/file - name.mp3"
To start this from .net-core context i use the snippet below :
using (var ffmpegProcess = new Process())
{
ffmpegProcess.EnableRaisingEvents = false;
ffmpegProcess.StartInfo.CreateNoWindow = true;
ffmpegProcess.StartInfo.UseShellExecute = false;
ffmpegProcess.StartInfo.FileName = ffmpegPath(); (returns "/bin/bash")
string command = "ffmpeg " + arguments;
ffmpegProcess.StartInfo.Arguments = "-c \" " + command + " \"";
ffmpegProcess.Start();
ffmpegProcess.WaitForExit();
ffmpegProcess.Dispose();
}arguments :
String.Format("-i \"{0}\" -i \"{1}.jpg\" -map 0:0 -map 1:0 -c copy -y -id3v2_version 3 -metadata title=\"{2}\" -metadata artist=\"{3}\" -metadata album=\"{4}\" \"{5}\"",inputFile, albumArtFile, outputTitle, artist, outputAlbum, outputFile);
To rip the mp3 from the video file i use the same method mentioned above with the following arguments :
-i "temp/vid-id.mp4" -vn -ab 320k -y -threads 2 "temp/vid-id.mp3"
This works as expected.
Arguments :String.Format("-i \"{0}\" -vn -ab 320k -y -threads 2 \"{1}\"", inputFile, outputFile);
Vid-id does not contain spaces, below is and example of how it could look :
"abcd12ef-gh34i"
Since the initial ripping is working i cant figure out why Ffmpeg complains about the second operation. The only real difference between the two operations is that in the second one the output-file name can contain spaces. But even then, running the same command manually does work and produces the desired file in the completed dir.
Update
After more troubleshooting i have now narrowed the problem down to the usage of the metadata arguments. Still can’t figure out whyUpdate
The problem is with the spaces in the naming i have chosen. On linux the spaces are interpreted as end of file name. Any pointer how i can still use the naming with spaces ? -
What is the format of EIA608 subtitle packet data from av_read_frame() for FFmpeg 4.4 and higher ?
12 avril 2023, par ElijaI have a video file in MOV format. This file contains EIA608 subtitles. I use ffprobe to see the contents of all packets. For FFmpeg 4.3.1, I get the data of the first subtitle packet according to the file content at the offset specified for this packet, but for FFmpeg 4.4 and higher, I get "corrupted" data from the same packet. The beginning is cut off, the characters "0xfc" are added and the packet size is different. For packets of other types (video, audio, data), the result is the same for all versions of FFmpeg and exactly matches the contents of the file.
I get the same result when using the av_read_frame() function call in my code with different versions of FFmpeg.
Why does this happen with subtitle packets ? What has changed in FFmpeg with the transition to version 4.4 and higher ? What do I not know or do not understand ?


The file content at packet position (position = 9723 = 0x25fb) :



FFmpeg 4.3.1 ffprobe result for the first subtitle packet :



FFmpeg 4.4 and higher ffprobe result for the first subtitle packet :



UPDATE :
I found that since version 4.4. when reading a EIA608 subtitle packet for the MOV format, the get_eia608_packet() function has been added (mov_read_packet() used inside of av_read_frame(), get_eia608_packet() used inside of mov_read_packet()). But I don't understand for what purpose it was done. Can someone explain to me ?
As FFmpeg says about av_read_frame() : "This function returns what is stored in the file, and does not validate that what is there are valid frames for the decoder. It will split what is stored in the file into frames and return one for each call. It will not omit invalid data between valid frames so as to give the decoder the maximum information possible for decoding."
av_read_frame() description


libavformat/mov.c :


static int get_eia608_packet(AVIOContext *pb, AVPacket *pkt, int size)
{
 int new_size, ret;

 if (size <= 8)
 return AVERROR_INVALIDDATA;
 new_size = ((size - 8) / 2) * 3;
 ret = av_new_packet(pkt, new_size);
 if (ret < 0)
 return ret;

 avio_skip(pb, 8);
 for (int j = 0; j < new_size; j += 3) {
 pkt->data[j] = 0xFC;
 pkt->data[j+1] = avio_r8(pb);
 pkt->data[j+2] = avio_r8(pb);
 }

 return 0;
}

static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
{
...
if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
 ret = get_eia608_packet(sc->pb, pkt, sample->size);
 else
 ret = av_get_packet(sc->pb, pkt, sample->size);
...
}