2014-10-31 3 views
1

파이썬에 rtmplib 바인딩을 사용하고 몇 가지 문제가 발생했습니다.16 진수 (?) 패킷 디코딩

첫째,

내가 이런 걸 가지고 : 아래 그림과 같이

import librtmp 

conn = librtmp.RTMP(...) 
conn.connect() 

while True: 
    packet = conn.read_packet().body 
    print packet 

이 패킷을 출력됩니다 : 나 여기에

example

16 진수처럼 보이고, 다음과 같이 파일에 쓸 때 4 자 문자열을 얻습니다.

0200 086f 6e42 5744 6f6e 6500 0000 0000 
0000 0000 0500 0000 0000 0000 0000 0200 
066e 6f74 6963 6500 0000 0000 0000 0000 
0502 0003 2a2a 2a02 000a 5072 6f63 6573 

내 질문은 어떻게 읽을 수있는 텍스트만으로 실제 문자열 (또는 버퍼)로 바꿀 수 있습니까? 나는 16 진수를 해독하기 위해 여러 가지 방법을 시도했지만 결과는 "\ x05"로 끝납니다.

쓰는 경우에도 00을 많이 포함한다는 점을 언급 할 가치가 있습니다.

누구나 쉽게 알 수있는 방법을 쉽게 얻을 수 있습니까?

미리 감사드립니다.

답변

0

솔루션은 librtmp.amf.decode_amf입니다.

import librtmp 

conn = librtmp.RTMP(...) 
conn.connect() 

while True: 
    packet = conn.read_packet().body 
    print packet 
    print librtmp.amf.decode_amf(packet) 

이것은 파이썬 용 librtmp 래퍼를 관리하는 사람에 의해 지적되었습니다.

1

당신이 얻는 것을 모를 경우 파일에 데이터를 저장하고 뷰어와 함께 살펴보십시오. (예 : od on linux).

또한 수신 할 데이터를 모르는 경우 rtmp가 온라인에서 제공하는 형식에 대한 설명을 찾을 수 없는지 확인하십시오. .. (RED5 같은 일이 문서화해야 존재하기 때문에 내 생각) 당신은 당신이 구조체 붙박이 라이브러리 https://docs.python.org/2/library/struct.html

I와 데이터 압축을 풀 수 있어요 무엇을 알고 있다면 모르겠지만 어떤 문서 http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf

있다 librtmp가 당신에게 높은 수준의 파싱 된 객체를주지 않는다는 사실에 놀랐습니다. 이 일을하고 싶은 사람은 처음이 될 수 없습니다. 다른 사람이 이것을 처리 할 수있는 lib가 있는지보십시오.

+0

일부 연구를 한 후에 구조체를 살펴 보겠습니다. 'print repr (packet)'을 사용하면 좀 더 읽기 쉬운 것을 인쇄 할 수 있습니다. 귀하의 제안에 감사드립니다! –

+0

걱정 마세요 –

+1

답변을 수락하고'librtmp.amf.decode_amf'라고하는 함수가 있음을 알아 냈습니다. 내가 RTMP를 사용하기 전에 amf를 생각하지 않는 어리석은 짓. –