当前位置: 技术问答>linux和unix
请教ubuntu环境下的多线程拷贝和多媒体播放!
来源: 互联网 发布时间:2016-03-25
本文导语: 请教一下,ubuntu环境下,用GTK+来实现多媒体文件,从一个路径拷贝到网络上的一个路径(用多线程来实现),拷贝之后,再用播放器播放拷贝过来的多媒体文件,请问该如何实现呢?谢谢! | 你要使用...
请教一下,ubuntu环境下,用GTK+来实现多媒体文件,从一个路径拷贝到网络上的一个路径(用多线程来实现),拷贝之后,再用播放器播放拷贝过来的多媒体文件,请问该如何实现呢?谢谢!
|
你要使用GVfs实现文件的拷贝,然后保存为文件,接着用exec来调用MPLAYER或者其他播放器来播放这个文件就可以了
void Chem3dDoc::Load (char const *uri, char const *mime_type)
{
GVfs *vfs = g_vfs_get_default ();
GFile *file = g_vfs_get_file_for_uri (vfs, uri);
GError *error = NULL;
GFileInfo *info = g_file_query_info (file,
((mime_type)? G_FILE_ATTRIBUTE_STANDARD_SIZE:
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE","G_FILE_ATTRIBUTE_STANDARD_SIZE),
G_FILE_QUERY_INFO_NONE,
NULL, &error);
if (error) {
g_message ("GIO querry failed: %s", error->message);
g_error_free (error);
g_object_unref (file);
error = NULL;
return;
}
if (!mime_type)
mime_type = g_file_info_get_content_type(info);
gsize size = g_file_info_get_size (info);
g_object_unref (info);
GInputStream *input = G_INPUT_STREAM (g_file_read (file, NULL, &error));
if (error) {
g_message ("GIO could not create the stream: %s", error->message);
g_error_free (error);
g_object_unref (file);
error = NULL;
return;
}
gchar *buf = new gchar[size + 1];
gsize n = g_input_stream_read (input, buf, size, NULL, &error);
if (error) {
g_message ("GIO could not read the file: %s", error->message);
g_error_free (error);
delete [] buf;
g_object_unref (input);
g_object_unref (file);
error = NULL;
return;
}
buf[size] = 0;
if (n == size) {
LoadData (buf, mime_type);
if (m_App) {
char *dirname = g_path_get_dirname (uri);
m_App->SetCurDir (dirname);
g_free (dirname);
}
}
if (!strlen (m_Mol.GetTitle()))
m_Mol.SetTitle (g_path_get_basename (uri));
delete [] buf;
g_object_unref (input);
g_object_unref (file);
}