我一直在互联网上寻找几天有关如何使用libmms的教程或示例。似乎什么也没有,这对于似乎已被广泛使用的lib很奇怪。

LibMMS是用于解析mms://和mmsh://类型的网络流的通用库。
http://sourceforge.net/projects/libmms/files/libmms/0.6.2/libmms-0.6.2.tar.gz/download

我发现的唯一代码示例是来自stackoverflow的另一篇文章。

这将在下面显示。

mms_connect(NULL, NULL, g_tcUrl.av_val, g_hostname.av_val, g_playpath.av_val, "", g_port, 128*1024)

笔记:
NSString* strTemp;
strTemp = @"mms://123.30.49.85/htv2";
// strTemp = @"mms://212.58.251.92/wms/bbc_ami/radio1/radio1_bb_live_int_eq1_sl0";
g_tcUrl.av_val = new char[[strTemp length] + 1];
[strTemp getCString:g_tcUrl.av_val
          maxLength:([strTemp length]+1)
           encoding:NSUTF8StringEncoding];
g_tcUrl.av_len = strlen(g_tcUrl.av_val);
//strTemp = @"212.58.251.92";
strTemp = @"123.30.49.85";
g_hostname.av_val = new char[[strTemp length]+1];
[strTemp getCString:g_hostname.av_val
          maxLength:([strTemp length]+1)
           encoding:NSUTF8StringEncoding];
g_hostname.av_len = strlen(g_hostname.av_val);
//strTemp = @"/wms/bbc_ami/radio1/radio1_bb_live_int_eq1_sl0";
strTemp = @"/htv2";
g_playpath.av_val = new char[[strTemp length] + 1];
[strTemp getCString:g_playpath.av_val
          maxLength:([strTemp length]+1)
           encoding:NSUTF8StringEncoding];
g_playpath.av_len = strlen(g_playpath.av_val);
g_port = 1755;

这不是 objective-c ,但确实显示了需要传递给mms_connect方法的内容。

因此,我做了一个新项目,包括所有需要的libmms文件并进行了构建。编译好了。

下一步是将
#import "mms.h"
#import "mms_config.h"

并声明
mms_t *mms = 0;

到目前为止没有问题。

我想尝试的下一件事是调用mms_connect方法,这就是我遇到的问题。

我不是C程序员,所以这看起来像FUBAR,但这是我的最佳尝试。
我不能使用
char *g_tcUrl = new char[[strTemp length] + 1];

因为在 objective-c 中无法以此处使用的方式识别出new。在Objective-C中我应该使用什么来达到相同的效果?
mms_t *mms = 0;

NSString* strTemp;
strTemp = @"mms://123.30.49.85/htv2";

char *g_tcUrl = new char[[strTemp length] + 1];
[strTemp getCString:g_tcUrl maxLength:([strTemp length]+1)
encoding:NSUTF8StringEncoding];

strTemp = @"123.30.49.85";
char *g_hostname = new char[[strTemp length]+1];
[strTemp getCString:g_hostname maxLength:([strTemp length]+1)
encoding:NSUTF8StringEncoding];

strTemp = @"/htv2";
char * g_playpath = new char[[strTemp length] + 1];
[strTemp getCString:g_playpath maxLength:([strTemp length]+1)
encoding:NSUTF8StringEncoding];
int g_port = 1755;

//mms = mms_connect(mms_io_t *io, void *data, const char *url, const char *host,
const char *uri, const char *query, int port, int bandwidth);
mms = mms_connect(NULL, NULL, g_tcUrl, g_hostname, g_playpath, "", g_port,
128*1024);

现在,我试图在Objective-C文件中混入C代码。当我尝试测试并弄清楚如何正确使用libmms时,这些代码都在viewDidLoad中。

伙计们,我感谢所有为您提供的建议和帮助,以使libmms在我的应用中正常工作。

-代码

最佳答案

我能想到的最简单的版本:

// wherever these NSStrings come from in the app, we can use them
NSString *mmsURL = @"mms://123.30.49.85/htv2",
         *mmsHostname = @"123.30.49.85",
         *mmsPath = @"/htv2";
NSInteger port = 1755;

mms_t *mms = mms_connect(NULL, NULL,
                         [mmsURL cStringUsingEncoding:NSASCIIStringEncoding],
                         [mmsHostname cStringUsingEncoding:NSASCIIStringEncoding],
                         [mmsPath cStringUsingEncoding:NSASCIIStringEncoding],
                         "", port, 128*1024);

要使数据也以其他方式移动(如果您想将流数据传递到基于AVPlayer的自定义电影播放器​​或类似设备中):
char *myCString = "some data coming from libmms";
NSString *myStringFromACString =
[NSString stringWithCString:myCString
              usingEncoding:NSASCIIStringEncoding];

07-27 13:32