我试图了解SDP中所需的参数是什么,能够从RTP数据包中解码H264.
这与这个问题有关,因为答案仅适用于少数情况.
例
我使用以下命令从VLC流式传输.
vlc -vvv sample_video/big_buck_bunny_480p_h264.mov --sout '#transcode{vcodec=h264,vb=700,fps=20,scale=0.25,acodec=none}:rtp{dst=10.5.110.117,port=5004,ttl=1}'
Run Code Online (Sandbox Code Playgroud)
这会将视频转码为:
接收器使用以下SDP文件正确接受和解释流(删除第一行,它只是一个名称).
//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=640014;sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;
Run Code Online (Sandbox Code Playgroud)
要运行的命令: vlc test.sdp
此处提供的文档在第7.2章中针对profile-level-id状态命名为SIP Video Profile Best Practices:
型材级-ID
虽然在RFC 6184中指定为可选(与所有参数一样),但'profile-level-id'参数是编解码器设置的基础,并且还需要指定任何其他参数.因此,所有实现都应在其SDP中包含此参数,并在接收时应解释它.如果未包含,则默认值为420010,如RFC 6184中所指定.
对于sprop-parameter-sets,同一文档声明了以下内容:
sprop参数集
H.264允许在带内和带外发送序列和图像信息.SIP视频实现应该在带内发信号通知该信息,符合H.323中普遍存在的模型以及绝大多数现有SIP视频实现中的模型,因此不应包括该参数.
问题1
即使profile-level-id被移除,视频也会在接收器上正确解释.
//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;
Run Code Online (Sandbox Code Playgroud)
它不没有工作sprop-parameter-sets.
问题2
我一直在线路不同的RTCP,SIP和SAP,而且SDP 通常不 包含sprop-parameter-sets.
问题
我正在使用Django进行项目,我正在尝试建立一个名为"index"的页面的链接,这是一个带有url的页面的起始页面
http://localhost:8000/index/result
Run Code Online (Sandbox Code Playgroud)
我添加了这样的链接:
<a href="index">Start over </a>
Run Code Online (Sandbox Code Playgroud)
因此,该链接指向:
http://localhost:8000/index/result/index
Run Code Online (Sandbox Code Playgroud)
而不是要求:
http://localhost:8000/index
Run Code Online (Sandbox Code Playgroud)
我在urls.py和views.py中设置了所有页面.
任何帮助表示赞赏.TNX
我正在实现一个简单的服务器,如果 3 秒内没有收到任何消息,它应该打印一条消息。
处理程序
class SingleTCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
while True:
message = self.rfile.readline().strip()
print message
Run Code Online (Sandbox Code Playgroud)
服务器
class SimpleServer(SocketServer.TCPServer):
timeout = 3
def handle_timeout(self):
print "Timeout"
def __init__(self, server_address, RequestHandlerClass):
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass)
Run Code Online (Sandbox Code Playgroud)
这里我扩展了TCPServer测试超时方法。我已将timeout属性设置为3. 根据文档,如果时间过去了并且没有消息发送到客户端,handle_timeout()则调用它,在我的情况下,只打印“超时”。
BaseServer.timeout
超时持续时间,以秒为单位测量,如果不需要超时,则为“无”。如果handle_request()在超时时间内没有收到传入请求,则调用handle_timeout()方法。
我启动服务器,并观察它的输出。当我连接到它并发送一些消息时,它们通常会被打印出来。但是,如果我 3 秒或更长时间没有发送任何内容,则什么也不会发生。好像timeout和handle_timeout()尚未实施。
这种行为的根源是什么?
我正在float32用 numpy 的tofile().
float_num = float32(3.4353)
float_num.tofile('float_test.bin')
Run Code Online (Sandbox Code Playgroud)
它可以用 numpy's 读取fromfile(),但这不符合我的需要,我必须在bitstring模块的帮助下将其作为原始二进制文件读取。
所以我执行以下操作:
my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('float:32')
print float_num
print float_num_
Run Code Online (Sandbox Code Playgroud)
输出:
3.4353
-5.56134659129e+32
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?第二个输出也应该是3.4353或关闭。
编译Linux内核模块的教程,使用不同的Makefile语法.
obj-m += rpi-pwm.o
Run Code Online (Sandbox Code Playgroud)
obj-m := nothing.o
Run Code Online (Sandbox Code Playgroud)
有什么区别,是否有首选方式?
在二进制数的字符串表示上进行逐位操作的最简单的解决方案是什么?
例
QString a = "001";
QString b = "010";
QString c = "100";
// QString d = a | b | c -> d = "111"
Run Code Online (Sandbox Code Playgroud) 我必须QByteArray使用不同的数据填充a .所以我正在使用QDataStream.
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
qint8 dataHex= 0x04;
qint8 dataChar = 'V';
stream << dataHex<< dataChar;
qDebug() << buffer.toHex(); // "0456" This is what I want
Run Code Online (Sandbox Code Playgroud)
但是,我还想将QByteArray附加到buffer.
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
qint8 dataHex= 0x04;
qint8 dataChar = 'V';
QByteArray moreData = QByteArray::fromHex("ff");
stream << dataHex<< dataChar << moreData.data(); // char * QByteArray::data ()
qDebug() << buffer.toHex(); // "045600000002ff00" I would like "0456ff"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我git branch -a用来列出我所有的远程分支机构.
remotes/origin/feature1
remotes/origin/feature2
remotes/client/feature1
remotes/client/feature2
Run Code Online (Sandbox Code Playgroud)
我选择了一个并且checkout client/feature2它让我处于一种detached head状态,好像我已经在历史的某个地方检查了一个标签?
我有一个嵌套的 git 存储库结构,如下所示:
outer_repository/
|-- outer_dummy_file
|-- .git
`-- inner_repository
|-- .git
`-- inner_dummy_file
Run Code Online (Sandbox Code Playgroud)
是否可以inner_repository/.git使用外部存储库进行版本控制?
动机:
我正在使用cookiecutter为新项目创建一个结构。每个新启动的项目都将有一组预定义的文件和工具。如果要使用 git 对新项目进行版本控制并进行初始提交,则对自动版本控制系统的要求之一。这inner_repository是新项目的结构。
对于我已经问过的问题,这是一个不同的方法
所以它将分享介绍.
我在我的web项目中有一个耗时的功能.当函数正在进行计算时,应该呈现一个网页,通知用户一旦计算完成,结果将通过电子邮件发送.
views.py:
def web_function(request):
...
return HttpResponse(results_will_be_sent_by_mail.html)
time_consuming_function()
Run Code Online (Sandbox Code Playgroud)
由于必须呈现的页面非常简单,并且它不需要来自time_consuming_function()的返回信息,是否有一种方法可以跳过多任务处理,只是以某种方式首先呈现并显示页面而不是调用time_consuming_function()?
可能的方法:
更新
结束使用芹菜.没有成功尝试使用Ajax.
python ×3
django ×2
git ×2
qt ×2
binary ×1
bitstring ×1
c++ ×1
cookiecutter ×1
h.264 ×1
linux-kernel ×1
makefile ×1
numpy ×1
qbytearray ×1
qdatastream ×1
sdp ×1
sip ×1
sockets ×1
socketserver ×1
video ×1
vlc ×1