很长的故事:
不久:
如何处理这些原始UDP数据以便通过H264/MPEG-4解码器过滤器进行解码?任何人都可以清楚地确定我与H264/MPEG流有关的步骤吗?
额外信息:
我可以用FFmpeg做到这一点......但是我无法弄清楚FFmpeg如何处理原始数据以便解码器可以解码.
我需要在.net 3.5中使用websockets .但是,大多数实现都需要.net 4或4.5 ......
有没有人知道或推荐一个好的开源C#websockets实现,它是积极维护的并且与.net 3.5兼容?
我有一个简单的Rtsp客户端...客户端将Rtsp命令发送到Rtsp服务器并从服务器获取RTP数据包.
问题是经过一段时间(大约3-4分钟)后,我的第三方RTSP服务器断开与RTSP客户端的连接.
我没有实现RTCP ...我从rtsp服务器获取rtp数据包但不发送任何RTCP PACKET ...
我做了简单的搜索,发现有些人使用一些RTSP命令[比如OPTIONS,SET PARAMETER-GET PARAMETER]也保持RTSP服务器和客户端之间的连接...但在我的情况下,这不起作用...
这是我的问题:
我在Visual C++中有一个简单的原生++控制台应用程序.
为了使用NLog,有一个混合模式""NLogC.dll"
我如何在本机C++应用程序中使用Nlog?
我正在使用写得不好的第三方(C/C++)Api.我在托管代码(C++/CLI)中使用它.有时会获得"访问冲突错误".这个崩溃整个应用程序.我知道我无法处理这些错误[如果指针访问非法内存位置等我该怎么办].
但我不希望我的应用程序整体崩溃.至少如果存在真正的问题,我的应用程序应该优雅地说"OK.我不能完成我的工作.BYE.":-)然后它最少执行一些替代方案并最终关闭自己.
但似乎没有办法,抓住(可能是错误的术语,可能会被告知有关严重的一词)访问违规和类似的错误.是否有办法了解这些错误.所以我可以执行我的替代风格.
PS:标准异常处理无法解决此问题.
#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace std;
static void ThrowingManagedException()
{
throw gcnew ArgumentException("For no good reason");
}
static void ThrowingNativeException()
{
throw std::exception("For no good reason");
}
static void SomeBadThingsHappen()
{
short a[1];
a[0]=1;
a[2]= 2; // SomeOne make stupid mistake
}
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Test Exceptions");
try
{
SomeBadThingsHappen();
//ThrowingNativeException();
//ThrowingManagedException();
}
catch(Exception^ e)
{
Console::WriteLine("Something awful happened: "+ e);
}
Console::WriteLine("Press enter to exit");
Console::Read();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个directShow过滤器:MyFilter.ax
当我尝试使用Regsvr32实用程序注册MyFilter.ax时,它不会出现任何错误或任何消息(成功或失败).但是过滤器未注册.
Regsvr32实用程序适用于我的其他过滤器.
为什么Regsvr32 deoes不给出任何成功或失败的消息?如何调试我的Regsvr32故障成功?用于注册directshow过滤器的任何替代实用程序可能会给出有意义的消息?
最好的祝愿
更新:
我在虚拟机上安装了干净的win7操作系统.然后再次尝试register.Fail而没有来自regsvr32的消息响应.
但是再在虚拟机上安装一个干净的win7操作系统.然后进行所有更新.在我进行更新后,regsvr32工作并安装我的过滤器....我不知道是什么原因导致regsvr32失败以及什么样的更新修复它.或者它真的是一个更新问题......
我只是简单地从网络获取数据包,并将它们排入一个线程,然后在另一个线程中使用此数据包(Dequeue).
所以我决定使用boost库来建立一个基于https://www.quantnet.com/cplusplus-multithreading-boost/的共享队列
template <typename T>
class SynchronisedQueue
{
private:
std::queue<T> m_queue; // Use STL queue to store data
boost::mutex m_mutex; // The mutex to synchronise on
boost::condition_variable m_cond;// The condition to wait for
public:
// Add data to the queue and notify others
void Enqueue(const T& data)
{
// Acquire lock on the queue
boost::unique_lock<boost::mutex> lock(m_mutex);
// Add the data to the queue
m_queue.push(data);
// Notify others that data is ready
m_cond.notify_one();
} // Lock is automatically released …Run Code Online (Sandbox Code Playgroud) 我只是以多线程方式测试PetaPoco Transaction ...
我有一个简单的测试用例:
- 简单值对象称之为MediaDevice - 插入记录并将其更新1000次
void TransactionThread(Object object)
{
Database db = (Database) object;
for(int i= 0; i < 1000;i++)
{
Transaction transaction = db.GetTransaction();
MediaDevice device = new MediaDevice();
device.Name = "Name";
device.Brand = "Brand";
db.Insert(device);
device.Name = "Name_Updated";
device.Brand = "Brand_Updated";
db.Update(device);
transaction.Complete();
}
long count = db.ExecuteScalar<long>("SELECT Count(*) FROM MediaDevices");
Console.WriteLine("Number of all records:" + count);
}
Run Code Online (Sandbox Code Playgroud)
我在这两个线程中调用它:[两个线程的单个数据库对象]
void TransactionTest()
{
Database db = GetDatabase();
Thread tThread1 = ... // thread for TransactionTest()
Thread …Run Code Online (Sandbox Code Playgroud) 我想在我的代码中记录不同的文件.
如何在Log4cxx中使用xml配置或以编程方式编写代码...
更新:
Logger.addAppender()方法:
log4cxx::helpers::Pool p;
std::string paramAppender = "appxNormalAppender";
std::string paramFileName = "\\Logs\\MyLog.txt";
LOG4CXX_DECODE_CHAR(logAppender, paramAppender );
LOG4CXX_DECODE_CHAR(logFileName, paramFileName );
FileAppenderPtr fileAppender =
logger->getLoggerRepository()->getRootLogger()->getAppender(logAppender);
if(fileAppender!= NULL)
{
fileAppender->setFile(logFileName);
fileAppender->activateOptions(p);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为
假设我将FileName设置为Logger-k为k组件,它记录到Logger-k,然后我将文件名设置为Logger-k + 1为compoent k + 1,然后组件k和k + 1记录相同的loggerk +1文件.似乎最后一个文件名覆盖或影响所有其他文件...
和
所有组成部分1,... compoeent k,componentk + 1,....组件n在同一个应用程序中......
什么是“IStreamPtr”?
它是保存“字节数据”的东西还是可以是?
如果是这样,是否可以将其内容写入文件?
我检查了一些MPEG-4视频标题,并在开头看到了一些如下所示的字节数组:
00 00 01 B0 01 00 00 01 B5 89 13
Run Code Online (Sandbox Code Playgroud)
我知道00 00 01零件但究竟是什么B0 B1和B5 89 13零件意味着什么?实际上,如果我把这个字节数组放在MPEG-4流的前面,它可以正常工作.
但我不知道这些值是否适用于不同的mpeg-4流源?
假设我有一个名为MyDll.dll的dll
它位于d:\ MyWorks\MyDll.dll [它是directshow dll]
我想从MyDll代码中获取其位置的路径.
我使用了boost: FileSystem
string path = "";
boost::filesystem::path full_path( boost::filesystem::current_path() );
path = full_path.string();
Run Code Online (Sandbox Code Playgroud)
但这给了我它的执行路径,即C:\ Windows\system32,而不是它的位置路径,即d:\ MyWorks\MyDll.dll.
如何在同一个dll中获取dll的位置?
更新:通过获取模块:
TCHAR path[2048];
GetModuleFileName( NULL, path, 2048 );
ostringstream file;
file << path ;
string const pathString =file.str();
cout << "Path: " << pathString << endl;
Run Code Online (Sandbox Code Playgroud)
给我一个十六进制的字符串:0049EA95 ....