小编Nov*_*lis的帖子

如何处理原始UDP数据包,以便它们可以通过directshow源过滤器中的解码器过滤器进行解码

很长的故事:

  1. 有一个H264/MPEG-4源
  2. 我可以将此源与RTSP协议连接起来.
  3. 我能够使用RTP协议获取原始UDP数据包.
  4. 然后将这些原始UDP数据包发送到解码器[h264/mpeg-4] [DS源过滤器]
  5. 但是这些"原始"UDP数据包无法通过解码器[h264/mpeg-4]过滤器进行解码

不久:

如何处理这些原始UDP数据以便通过H264/MPEG-4解码器过滤器进行解码?任何人都可以清楚地确定我与H264/MPEG流有关的步骤吗?

额外信息:

我可以用FFmpeg做到这一点......但是我无法弄清楚FFmpeg如何处理原始数据以便解码器可以解码.

directshow rtp rtsp h.264 mpeg-4

39
推荐指数
1
解决办法
4万
查看次数

.net 3.5的websockets库

我需要在.net 3.5中使用websockets .但是,大多数实现都需要.net 4或4.5 ......

有没有人知道或推荐一个好的开源C#websockets实现,它是积极维护的并且与.net 3.5兼容?

.net c# websocket

11
推荐指数
0
解决办法
1543
查看次数

保持活跃的Rtsp连接

我有一个简单的Rtsp客户端...客户端将Rtsp命令发送到Rtsp服务器并从服务器获取RTP数据包.

问题是经过一段时间(大约3-4分钟)后,我的第三方RTSP服务器断开与RTSP客户端的连接.

我没有实现RTCP ...我从rtsp服务器获取rtp数据包但不发送任何RTCP PACKET ...

我做了简单的搜索,发现有些人使用一些RTSP命令[比如OPTIONS,SET PARAMETER-GET PARAMETER]也保持RTSP服务器和客户端之间的连接...但在我的情况下,这不起作用...

这是我的问题:

  1. 与RTSP服务器保持连接的最佳方法是什么?
  2. 我是否必须实施RTCP [将RTCP数据包发送到服务器]?连接是否会丢失,因为我不向服务器发送RTCP数据包?

rtp rtsp rtsp-client

7
推荐指数
1
解决办法
2万
查看次数

如何在C++中使用NLog?

我在Visual C++中有一个简单的原生++控制台应用程序.

为了使用NLog,有一个混合模式""NLogC.dll"

  • 如何将"NLogC.dll"添加到我的应用程序中
  • 用于记录?

我如何在本机C++应用程序中使用Nlog?

logging nlog visual-c++

7
推荐指数
1
解决办法
5075
查看次数

在托管代码中使用非托管代码时处理错误(C++,C,C++/CLI,C#)

我正在使用写得不好的第三方(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)

c# c++ exception-handling exception

6
推荐指数
1
解决办法
803
查看次数

Regsvr32奇怪的行为=> Regsvr32没有给出任何成功或失败的消息

我有一个directShow过滤器:MyFilter.ax

当我尝试使用Regsvr32实用程序注册MyFilter.ax时,它不会出现任何错误或任何消息(成功或失败).但是过滤器未注册.

Regsvr32实用程序适用于我的其他过滤器.

为什么Regsvr32 deoes不给出任何成功或失败的消息?如何调试我的Regsvr32故障成功?用于注册directshow过滤器的任何替代实用程序可能会给出有意义的消息?

最好的祝愿

更新:

我在虚拟机上安装了干净的win7操作系统.然后再次尝试register.Fail而没有来自regsvr32的消息响应.

但是再在虚拟机上安装一个干净的win7操作系统.然后进行所有更新.在我进行更新后,regsvr32工作并安装我的过滤器....我不知道是什么原因导致regsvr32失败以及什么样的更新修复它.或者它真的是一个更新问题......

com regsvr32 directshow comobject

6
推荐指数
1
解决办法
4702
查看次数

C++中的共享队列

我只是简单地从网络获取数据包,并将它们排入一个线程,然后在另一个线程中使用此数据包(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)

c++ queue multithreading boost boost-thread

6
推荐指数
1
解决办法
1万
查看次数

多线程环境中的PetaPoco事务

我只是以多线程方式测试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)

petapoco

6
推荐指数
1
解决办法
2983
查看次数

使用log4cxx登录到不同的文件

我想在我的代码中记录不同的文件.

如何在Log4cxx中使用xml配置或以编程方式编写代码...

  • 假设我有1.k,k + 1,... n个组件.
  • 它们在同一个应用程序中运行
  • 我想将组件k log记录到Logger-k,k + 1组件同时记录到Logger-k + 1

更新:

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在同一个应用程序中......

c++ logging log4cxx

5
推荐指数
1
解决办法
1万
查看次数

什么是 IStreamPtr?

什么是“IStreamPtr”

它是保存“字节数据”的东西还是可以是?

如果是这样,是否可以将其内容写入文件?

c++ com visual-c++

3
推荐指数
1
解决办法
930
查看次数

关于MPEG-4标头

我检查了一些MPEG-4视频标题,并在开头看到了一些如下所示的字节数组:

00 00 01 B0 01 00 00 01 B5 89 13
Run Code Online (Sandbox Code Playgroud)

我知道00 00 01零件但究竟是什么B0 B1B5 89 13零件意味着什么?实际上,如果我把这个字节数组放在MPEG-4流的前面,它可以正常工作.

但我不知道这些值是否适用于不同的mpeg-4流源?

mpeg-4

1
推荐指数
1
解决办法
4641
查看次数

如何在C++中的同一个dll中获取dll位置路径?

假设我有一个名为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 ....

c++ windows dll boost visual-c++

0
推荐指数
3
解决办法
1万
查看次数