方法一:
ffmpeg.exe -i E:\video\8998.mp3 aa.264
方法二(推荐):
安装MediaCoder软件,运行后,在“容器”设置中,选择Raw Stream,再转换视频,就会生成后缀名为264的文件。
人,技术,生活。
方法一:
ffmpeg.exe -i E:\video\8998.mp3 aa.264
方法二(推荐):
安装MediaCoder软件,运行后,在“容器”设置中,选择Raw Stream,再转换视频,就会生成后缀名为264的文件。
1 2 3 4 5 6 7 8 9 10 11 | void CopyToClipboard(string[] files, bool cut) { if (files == null) return; IDataObject data = new DataObject(DataFormats.FileDrop, files); MemoryStream memo = new MemoryStream(4); byte[] bytes = new byte[] { (byte)(cut ? 2 : 5), 0, 0, 0 }; memo.Write(bytes, 0, bytes.Length); data.SetData("Preferred DropEffect", memo); Clipboard.SetDataObject(data); } |
参考自:https://www.codeproject.com/kb/shell/explorer_drag_drop.aspx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | private Image capturedImage = null; private Point capturedImageLocation; private Point capturedImageCursorLocation; private bool capturedImageIsMouseDown = false; private bool capturedImageIsFullDisplayed = false; private void dataGridViewRecord_CellClick(object sender, DataGridViewCellEventArgs e) { string str = dataGridViewRecord.Rows[e.RowIndex].Cells["pic1"].Value.ToString(); capturedImage = System.Drawing.Image.FromFile(str); capturedImageLocation = new Point(0, 0); pictureBoxCaptured.Invalidate(); } private void pictureBoxCaptured_DoubleClick(object sender, EventArgs e) { if (capturedImageIsFullDisplayed) capturedImageIsFullDisplayed = false; else capturedImageIsFullDisplayed = true; pictureBoxCaptured.Invalidate(); } private void pictureBoxCaptured_MouseDown(object sender, MouseEventArgs e) { if (capturedImageIsFullDisplayed) return; capturedImageIsMouseDown = true; capturedImageCursorLocation = new Point(e.X - capturedImageLocation.X, e.Y - capturedImageLocation.Y); } private void pictureBoxCaptured_MouseUp(object sender, MouseEventArgs e) { capturedImageIsMouseDown = false; } private void pictureBoxCaptured_MouseMove(object sender, MouseEventArgs e) { if (capturedImageIsFullDisplayed) return; if (!capturedImageIsMouseDown) return; capturedImageLocation = new Point(e.X - capturedImageCursorLocation.X, e.Y - capturedImageCursorLocation.Y); pictureBoxCaptured.Invalidate(); } private void pictureBoxCaptured_Paint(object sender, PaintEventArgs e) { if (null == capturedImage) return; if (capturedImageIsFullDisplayed) { e.Graphics.DrawImage(capturedImage, pictureBoxCaptured.ClientRectangle, //e.ClipRectangle, new Rectangle(0, 0, capturedImage.Width, capturedImage.Height), GraphicsUnit.Pixel); } else { e.Graphics.DrawImage(capturedImage, pictureBoxCaptured.ClientRectangle, new Rectangle(-capturedImageLocation.X, -capturedImageLocation.Y, pictureBoxCaptured.Width, pictureBoxCaptured.Height), GraphicsUnit.Pixel); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public delegate void OutDelegate(ParseXmlResult xmlResult); public void insertDataGridView(ParseXmlResult xmlResult) { if (dataGridViewRecord.InvokeRequired) { OutDelegate outdelegate = new OutDelegate(insertDataGridView); this.BeginInvoke(outdelegate, new object[] { xmlResult }); return; } DateTime date; string[] format = { "yyyyMMddHHmmss" }; DateTime.TryParseExact(xmlResult.time.Substring(0, 14), format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date); dataGridViewRecord.Rows.Add(new object[] { dataGridViewRecord.Rows.Count + 1, date.ToString("yyyy-MM-dd HH:mm:ss"), xmlResult.plate, xmlResult.files[0] }); } private Thread workThread; private void ProcessWork() { insertDataGridView(xmlResult); } private static void ProcessThread(object param) { MainForm pThis = param as MainForm; pThis.ProcessWork(); } private void btnSearch_Click(object sender, EventArgs e) { workThread = new Thread(new ParameterizedThreadStart(ProcessThread)); workThread.Start(this); } |
1 2 3 4 5 6 7 8 9 10 | IplImage *Yuv2IplImage(char *yuv, int imgWidth, int imgHeight) { cv::Mat matYUV(imgHeight * 3 / 2, imgWidth, CV_8UC1, yuv); cv::Mat matBGR; cv::cvtColor(matYUV, matBGR, cv::COLOR_YUV2BGR_NV12); IplImage imgTmp = matBGR; IplImage *img = cvCloneImage(&imgTmp); return img; } |
如果能改控件程序,比如用FireBreath做的控件,就要使onWindowEvent函数中的WM_PAINT和WM_ERASEBKGND重载返回false。
如果不能改控件程序,试试卸载firefox,再删除文件夹C:\Users\用户名\AppData\Roaming\Mozilla\Firefox,最后重装firefox。同时记住关掉firefox的自动更新。
但有可能重装了也不行,任务管理器中还是两个firefox.exe进程。
所以能改控件程序最完美。
<tr>...</tr>
改成:
<tr style="display:none;">...</tr>
使用ffmpeg存为avi和存为mp4在代码上是一样的,ffmpeg可以通过文件名后缀决定视频文件类型,以下是关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #pragma once class AVFormatContext; class AVStream; class AviWriter { public: int createFile(const char* filename); int setVideoTrack(const char* sps, int spslen, const char* pps, int ppslen, int width, int hight, int rate); int writeVideoSample(char* data, int datasize, bool keyframe); void closeFile(); private: AVFormatContext *m_fc; AVStream *m_avStream; int m_isHeaderWritten; }; |
从编程角度讲,球机的辅码流和主码流差别就是uri,如海康的球机主码流如:
rtsp://admin:admin@192.168.1.224/1
则其辅码流为:
rtsp://admin:admin@192.168.1.224/2
那如何获取辅码流呢?
是通过onvif协议登陆球机后,获取profile列表,在列表中选择低分辨率的profile,比如宽小于1800,或者高小于1000的就可认为是辅码流,就可取出对应的uri。
在C++中怎么调用webservice?微软的vs里总是对webservice支持不够,其实最安心的还是用开源的gsoap,现在已经很稳定了。
网上关于使用gsoap的教程一大堆,我只说关于使用中碰到的一个问题:我在客户端已将发送的字符串转码成utf8了,通过gsoap发送过去,服务器端接收到的还是乱码,此时,只要在客户端初始化gsoap时加入:
1 2 3 4 5 | struct soap soapCtx; //注意此时不要再调用soap_init了,在上一句的构造函数中, //gsoap自己已经调用过soap_init了。 // soap_init(&soapCtx); soap_set_mode(&soapCtx, SOAP_C_UTFSTRING); |