mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
update for bug #66, add the srs-librtmp sample for publish h.264 raw stream.
This commit is contained in:
parent
1db69b153e
commit
b964a6c534
4 changed files with 117 additions and 10 deletions
|
@ -1,4 +1,5 @@
|
||||||
/*
|
/*
|
||||||
|
# see: https://github.com/winlinvip/simple-rtmp-server/issues/190
|
||||||
# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm
|
# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm
|
||||||
g++ -g -O0 -o jmp_sp jmp_sp.cpp
|
g++ -g -O0 -o jmp_sp jmp_sp.cpp
|
||||||
arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
|
arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
|
||||||
|
@ -14,15 +15,13 @@ void func1()
|
||||||
{
|
{
|
||||||
#if defined(__amd64__) || defined(__x86_64__)
|
#if defined(__amd64__) || defined(__x86_64__)
|
||||||
register long int rsp0 asm("rsp");
|
register long int rsp0 asm("rsp");
|
||||||
printf("in func1, rsp=%#lx, longjmp to func0\n", rsp0);
|
|
||||||
|
|
||||||
longjmp(env_func1, 0x101);
|
int ret = setjmp(env_func1);
|
||||||
|
printf("setjmp func0 ret=%d, rsp=%#lx\n", ret, rsp0);
|
||||||
printf("func1 terminated\n");
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void func0(int* pv0, int* pv1)
|
void func0()
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
the definition of jmp_buf:
|
the definition of jmp_buf:
|
||||||
|
@ -63,6 +62,8 @@ void func0(int* pv0, int* pv1)
|
||||||
printf("env[%d]=%#x, ", i, (int)env_func1[0].__jmpbuf[i]);
|
printf("env[%d]=%#x, ", i, (int)env_func1[0].__jmpbuf[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
func1();
|
||||||
#else
|
#else
|
||||||
/**
|
/**
|
||||||
/usr/arm-linux-gnueabi/include/bits/setjmp.h
|
/usr/arm-linux-gnueabi/include/bits/setjmp.h
|
||||||
|
@ -84,6 +85,24 @@ void func0(int* pv0, int* pv1)
|
||||||
10-26: d8-d15 17words
|
10-26: d8-d15 17words
|
||||||
27: fpscr
|
27: fpscr
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
For example, on raspberry-pi, armv6 cpu:
|
||||||
|
(gdb) x /64 env_func1[0].__jmpbuf
|
||||||
|
v1, 0: 0x00 0x00 0x00 0x00
|
||||||
|
v2, 1: 0x00 0x00 0x00 0x00
|
||||||
|
v3, 2: 0x2c 0x84 0x00 0x00
|
||||||
|
v4, 3: 0x00 0x00 0x00 0x00
|
||||||
|
v5, 4: 0x00 0x00 0x00 0x00
|
||||||
|
v6, 5: 0x00 0x00 0x00 0x00
|
||||||
|
sl, 6: 0x00 0xf0 0xff 0xb6
|
||||||
|
fp, 7: 0x9c 0xfb 0xff 0xbe
|
||||||
|
sp, 8: 0x88 0xfb 0xff 0xbe
|
||||||
|
pc, 9: 0x08 0x85 0x00 0x00
|
||||||
|
(gdb) p /x $sp
|
||||||
|
$5 = 0xbefffb88
|
||||||
|
(gdb) p /x $pc
|
||||||
|
$4 = 0x850c
|
||||||
|
*/
|
||||||
int ret = setjmp(env_func1);
|
int ret = setjmp(env_func1);
|
||||||
printf("setjmp func1 ret=%d\n", ret);
|
printf("setjmp func1 ret=%d\n", ret);
|
||||||
|
|
||||||
|
@ -105,10 +124,7 @@ int main(int argc, char** argv) {
|
||||||
(int)sizeof(long int), (int)sizeof(long), (int)sizeof(int));
|
(int)sizeof(long int), (int)sizeof(long), (int)sizeof(int));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int pv0 = 0xf0;
|
func0();
|
||||||
int pv1 = 0xf1;
|
|
||||||
func0(&pv0, &pv1);
|
|
||||||
func1();
|
|
||||||
|
|
||||||
printf("terminated\n");
|
printf("terminated\n");
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ else
|
||||||
ST_ALL = objs/srs_flv_parser \
|
ST_ALL = objs/srs_flv_parser \
|
||||||
objs/srs_flv_injecter objs/srs_publish objs/srs_play \
|
objs/srs_flv_injecter objs/srs_publish objs/srs_play \
|
||||||
objs/srs_ingest_flv objs/srs_ingest_rtmp objs/srs_detect_rtmp \
|
objs/srs_ingest_flv objs/srs_ingest_rtmp objs/srs_detect_rtmp \
|
||||||
objs/srs_bandwidth_check
|
objs/srs_bandwidth_check objs/srs_h264_raw_publish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: default clean help ssl nossl
|
.PHONY: default clean help ssl nossl
|
||||||
|
@ -23,6 +23,7 @@ help:
|
||||||
@echo " srs_flv_parser parse flv file, print detail info."
|
@echo " srs_flv_parser parse flv file, print detail info."
|
||||||
@echo " srs_flv_injecter inject keyframes information to metadata."
|
@echo " srs_flv_injecter inject keyframes information to metadata."
|
||||||
@echo " srs_publish publish program using srs-librtmp"
|
@echo " srs_publish publish program using srs-librtmp"
|
||||||
|
@echo " srs_h264_raw_publish publish raw h.264 stream to SSR by srs-librtmp"
|
||||||
@echo " srs_play play program using srs-librtmp"
|
@echo " srs_play play program using srs-librtmp"
|
||||||
@echo " srs_ingest_flv ingest flv file and publish to RTMP server."
|
@echo " srs_ingest_flv ingest flv file and publish to RTMP server."
|
||||||
@echo " srs_ingest_rtmp ingest RTMP and publish to RTMP server."
|
@echo " srs_ingest_rtmp ingest RTMP and publish to RTMP server."
|
||||||
|
@ -81,6 +82,9 @@ objs/srs_flv_injecter: srs_flv_injecter.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I)
|
||||||
objs/srs_publish: srs_publish.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I) $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L)
|
objs/srs_publish: srs_publish.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I) $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L)
|
||||||
$(GCC) srs_publish.c $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L) $(EXTRA_CXX_FLAG) -o objs/srs_publish
|
$(GCC) srs_publish.c $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L) $(EXTRA_CXX_FLAG) -o objs/srs_publish
|
||||||
|
|
||||||
|
objs/srs_h264_raw_publish: srs_h264_raw_publish.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I) $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L)
|
||||||
|
$(GCC) srs_h264_raw_publish.c $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L) $(EXTRA_CXX_FLAG) -o objs/srs_h264_raw_publish
|
||||||
|
|
||||||
objs/srs_play: srs_play.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I) $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L)
|
objs/srs_play: srs_play.c $(SRS_RESEARCH_DEPS) $(SRS_LIBRTMP_I) $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L)
|
||||||
$(GCC) srs_play.c $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L) $(EXTRA_CXX_FLAG) -o objs/srs_play
|
$(GCC) srs_play.c $(SRS_LIBRTMP_L) $(SRS_LIBSSL_L) $(EXTRA_CXX_FLAG) -o objs/srs_play
|
||||||
|
|
||||||
|
|
86
trunk/research/librtmp/srs_h264_raw_publish.c
Normal file
86
trunk/research/librtmp/srs_h264_raw_publish.c
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013-2014 winlin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
gcc srs_h264_raw_publish.c ../../objs/lib/srs_librtmp.a -g -O0 -lstdc++ -o srs_h264_raw_publish
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "../../objs/include/srs_librtmp.h"
|
||||||
|
|
||||||
|
#define srs_trace(msg, ...) printf(msg, ##__VA_ARGS__);printf("\n")
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
srs_rtmp_t rtmp;
|
||||||
|
|
||||||
|
// packet data
|
||||||
|
int type, size;
|
||||||
|
u_int32_t timestamp = 0;
|
||||||
|
char* data;
|
||||||
|
|
||||||
|
srs_trace("publish raw h.264 as rtmp stream to server like FMLE/FFMPEG/Encoder");
|
||||||
|
srs_trace("srs(simple-rtmp-server) client librtmp library.");
|
||||||
|
srs_trace("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
|
||||||
|
|
||||||
|
rtmp = srs_rtmp_create("rtmp://127.0.0.1:1935/live/livestream");
|
||||||
|
|
||||||
|
if (srs_simple_handshake(rtmp) != 0) {
|
||||||
|
srs_trace("simple handshake failed.");
|
||||||
|
goto rtmp_destroy;
|
||||||
|
}
|
||||||
|
srs_trace("simple handshake success");
|
||||||
|
|
||||||
|
if (srs_connect_app(rtmp) != 0) {
|
||||||
|
srs_trace("connect vhost/app failed.");
|
||||||
|
goto rtmp_destroy;
|
||||||
|
}
|
||||||
|
srs_trace("connect vhost/app success");
|
||||||
|
|
||||||
|
if (srs_publish_stream(rtmp) != 0) {
|
||||||
|
srs_trace("publish stream failed.");
|
||||||
|
goto rtmp_destroy;
|
||||||
|
}
|
||||||
|
srs_trace("publish stream success");
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
type = SRS_RTMP_TYPE_VIDEO;
|
||||||
|
timestamp += 40;
|
||||||
|
size = 4096;
|
||||||
|
data = (char*)malloc(4096);
|
||||||
|
|
||||||
|
if (srs_write_packet(rtmp, type, timestamp, data, size) != 0) {
|
||||||
|
goto rtmp_destroy;
|
||||||
|
}
|
||||||
|
srs_trace("sent packet: type=%s, time=%d, size=%d", srs_type2string(type), timestamp, size);
|
||||||
|
|
||||||
|
usleep(40 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
rtmp_destroy:
|
||||||
|
srs_rtmp_destroy(rtmp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -132,6 +132,7 @@ file
|
||||||
..\..\research\librtmp\srs_detect_rtmp.c,
|
..\..\research\librtmp\srs_detect_rtmp.c,
|
||||||
..\..\research\librtmp\srs_flv_injecter.c,
|
..\..\research\librtmp\srs_flv_injecter.c,
|
||||||
..\..\research\librtmp\srs_flv_parser.c,
|
..\..\research\librtmp\srs_flv_parser.c,
|
||||||
|
..\..\research\librtmp\srs_h264_raw_publish.c,
|
||||||
..\..\research\librtmp\srs_ingest_flv.c,
|
..\..\research\librtmp\srs_ingest_flv.c,
|
||||||
..\..\research\librtmp\srs_ingest_rtmp.c,
|
..\..\research\librtmp\srs_ingest_rtmp.c,
|
||||||
..\..\research\librtmp\srs_play.c,
|
..\..\research\librtmp\srs_play.c,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue