imx6移植librtmp
/*
* main.cpp
*
* Created on: Jan 9, 2017
* Author: tla001
*/
extern "C"{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> #include "rtmp.h"
#include "log.h"
} int printfAVal(const AVal al)
{
int i = ;
for(i = ;i <al.av_len;i++)
printf("%c",al.av_val[i]);
printf("\n");
} const char RTMPProtocolStringsLower_1[][] = {
"rtmp",
"rtmpt",
"rtmpe",
"rtmpte",
"rtmps",
"rtmpts",
"",
"",
"rtmfp"
}; #define DEF_TIMEOUT 30 /* seconds */ int main(int argc,char * argv[])
{
int Ret = -;
RTMP my_rtmp;
AVal Host, App, Playpath;
unsigned int Port = ;
int Protocol = RTMP_PROTOCOL_UNDEFINED; AVal sockshost = { , };
AVal tcUrl = { , };
AVal swfUrl = { , };
AVal pageUrl = { , };
AVal auth = { , };
AVal swfSHA256Hash = { , };
AVal flashVer = { , };
AVal subscribepath = { , };
AVal usherToken = { , };
uint32_t swfSize = ;
uint32_t dSeek = ; // seek position in resume mode, 0 otherwise
int bLiveStream = FALSE; // is it a live stream? then we can't seek/resume
uint32_t dStopOffset = ;
long int timeout = DEF_TIMEOUT; // timeout connection after 120 seconds int fd = ; char *input_rtmp_url = NULL;
char RTMP_RUL[] = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
if(argv[]==NULL){
input_rtmp_url = RTMP_RUL;
}else{
input_rtmp_url = argv[];
} printf("run %s\n",(char*)argv[]);
printf("input_rtmp_url == %s\n",input_rtmp_url); RTMP_Init(&my_rtmp); //InitSockets(); Ret = RTMP_ParseURL(input_rtmp_url, &Protocol, &Host, &Port,
&Playpath, &App);
if(Ret == TRUE){
printfAVal(Host);
printfAVal(App);
printfAVal(Playpath);
printf("%d\n",Port);
}else{
printf("url(%s) con`t parsed!\n",input_rtmp_url);\
goto EXIT;
} if (Port == )
{
if (Protocol & RTMP_FEATURE_SSL)
Port = ;
else if (Protocol & RTMP_FEATURE_HTTP)
Port = ;
else
Port = ;
} if (tcUrl.av_len == )
{
tcUrl.av_len = strlen(RTMPProtocolStringsLower_1[Protocol]) +
Host.av_len + App.av_len + sizeof("://:65535/");
tcUrl.av_val = (char *) malloc(tcUrl.av_len);
if (!tcUrl.av_val)
return -;
tcUrl.av_len = snprintf(tcUrl.av_val, tcUrl.av_len, "%s://%.*s:%d/%.*s",
RTMPProtocolStringsLower_1[Protocol], Host.av_len,
Host.av_val,Port, App.av_len, App.av_val);
} RTMP_SetupStream(&my_rtmp,
Protocol,
&Host,
Port,
&sockshost,
&Playpath,
&tcUrl,
&swfUrl,
&pageUrl,
&App,
&auth,
&swfSHA256Hash,
swfSize,
&flashVer,
&subscribepath,
&usherToken,
dSeek,
dStopOffset,bLiveStream, timeout); RTMP_Connect(&my_rtmp,NULL); RTMP_ConnectStream(&my_rtmp,dSeek); fd = open("test.flv",O_CREAT|O_RDWR); if(fd){
char buf[*] = {};
while(){
memset(buf,,*);
Ret = RTMP_Read(&my_rtmp,buf,*);
printf("read size %d\n",Ret);
if(Ret <= )
break;
else{
write(fd,buf,Ret);
}
}
}
EXIT:
if(fd)
close(fd);
RTMP_Close(&my_rtmp);
return ;
}
imx6移植librtmp的更多相关文章
- IMX6移植htop
top命令查看CPU利用率并不是很方便,因此打算移植htop到imx6上,主要包括以下几个步骤: - 资源下载 htop 下载http://hisham.hm/htop/releases/1.0.1/ ...
- imx6移植ffmpeg2.3
yasm ./configure --enable-shared --prefix=/usr/local/arm/yasm --host=arm-linux 修改Makefile CC=arm-non ...
- ffmpeg relocation error
在向imx6移植ffmpeg后,一般的编解码操作没有问题,但是当从摄像头录视频时, ffmpeg -f video4linux2 -s 640*480 -r 10 -i /dev/video0 tes ...
- qt5.5.0成功移植到IMX6中
前阵子移植qt4.8.5到板子上成功后,总想着qt4有点旧,于是就想着玩qt5,之前都是在Windows7上写qt,写了个游戏,感觉还不错,但毕竟不能只能在PC机上跑,现在由于项目需要,要将qt搞到I ...
- [IMX6]Android6.0移植和分析
0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...
- Qt5.5.1移植到freescale imx6
一.环境 HOST:ubuntu12.04-LTS Embedded:freescale imx6 linux-3.0.35 CROSS_COMPILE:freescale提供的gcc-4.6.2-g ...
- 【转载】tslib移植_freescale imx6
本文来自网络:http://blog.csdn.net/xishuang_gongzi/article/details/49422879 环境:host:Ubuntu12.04target:frees ...
- 移植rtmpdump(librtmp)到android
编译环境:(rtmpdump-master.zip和Polar SSL版本已经打包上传,具体路径在http://download.csdn.net/detail/gyley2/5721061) win ...
- imx6 yocto移植 环境搭建
系统:ubuntu14.04 LTS 切换软件下载源,确保下载资源是最快. 安装必要软件工具: ~$ apt-get install vim ~$ apt-get install openssh-se ...
随机推荐
- JS中的Global对象
Global对象可以说是ECMAScript中最特别的一个对象了.因为不管你从什么角度上看,这个对象都是不存在的.ECMAScript中的Global对象在某种意义上是作为一个终极的“兜底儿对象”来定 ...
- IOS 自定义导航栏背景
//- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics NS_AV ...
- 【洛谷4009】汽车加油行驶问题(SPFA乱搞)
点此看题面 大致题意:给定一个\(N*N\)的方形网格,其中1表示这个格子有油库,0表示这个格子没油库,且汽车加满油可以行驶\(k\)条网格边.如果遇到油库必须加满油并花费\(A\)元,如果\(X\) ...
- 【转】chrome浏览器的跨域设置——包括版本49前后两种设置
做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...
- Mybatis-动态 SQL语句
if标签 判断语句,用户单条件分支判断 where标签 为了简化上面where 1=1的条件拼装,我们可以采用标签来简化开发 同 foreach标签 场景:传入多个 id 查询用户信息 标签用于遍历集 ...
- python_16_自己建立模块
import python_5_password
- 闭包 -------JavaScript
本文摘要:http://www.liaoxuefeng.com/ 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个对Array的求和.通常情况下,求和的 ...
- 最常用且非常重要的Linux命令
1.针对文件或目录类 cd: cat: ls: pwd: ln: mv: cp: vi.vim: find: mkdir: touch: echo: rm: chmod: chown: chattr: ...
- Docker容器学习--1
Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源.Docker是通过内核虚拟化技 ...
- Nodejs NPM CNPM优雅安装install
由于npm和cnpm都能安装组件,安装的组件有的保存在c盘用户目录的Appdata隐藏目录下,有的保存在安装node的目录下,而且安装在c盘的话,重装系统又得重新部署,甚是麻烦,所以这里提供优雅安装的 ...